728x90
반응형

AWS EC2 기본 세팅 후 접속하려고 했는데..

우분투였다면 아래 한 문장으로 쉽게 접속할 것이 윈도우를 사용해서 문제를 마주하게 되었다.

chmod 400 펨이름.pem

 

 

에러 내용 :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '펨파일명.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "펨파일명.pem": bad permissions
퍼플릭DNS: Permission denied (publickey).

 

 

해결 :

.pem 파일의 속성 > 보안탭 진입하고 고급버튼 클릭

상속 사용을 눌러 alert창에서 사용 권한을 모두 제거를 누른다.

사용 권한 리스트가 깔끔하게 전부 제거가 된 것을 확인하고

추가 버튼 클릭 > 보안 주체 선택 클릭 

선택할 개체 이름에 본인의 유저 이름을 적고 이름 확인을 눌러보고

맞으면 확인 버튼이 뜨면 전부 확인 누르고 창을 닫고

.pem 위치에서 터미널을 실행 후 다음 내용을 입력하면 정상적으로 접속 OK!

 

AWS에서 인스턴스에 연결 페이지에 나와있는 : 부분의코드를 복사하고 붙여 넣는다.

ssh -i "펨이름.pem" 블라블라

 

과금이 안되도록 잘 관리하면서 프로젝트 배포를 해보아야겠다.

생각보다 정보가 잘 나와있어서

어렵지 않게 배포하는 과정을 밟고 있는 중이다.

728x90
반응형
728x90
반응형

국비강의를 들었을 때 React 강의에서 nodejs를 사용해 본 적이 있었고

맛보기로 npm i 라던지...정말 기본적인 부분들만 알고 썼던 상태여서

기초부터 응용까지 학습하고 있었다.

 

오늘 AWS 세팅을 수월하게 마치고(과금위험 때문에 꼼꼼히 체크)

DB와 node.js 프로젝트를 연동하기 위한 세팅 후 npm start를 해보니

서버가 정상적으로 실행되다말고 에러를 마주하게 되었다.

이때부터 오랜만에 엄청난 삽질이 시작되었다.


에러 내용 :

Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)

...

code: 'ER_ACCESS_DENIED_ERROR',
errno: 1045,
sqlMessage: "Access denied for user ''@'localhost' (using password: NO)",
sqlState: '28000',
fatal: true

 


원인은 일단 pw가 없어서 권한이 거절되고 있는 상황이라고 나왔는데

애초에 ''로 username도 인식을 못하는 것 같았다.

뭔가 이상한데? 왜 공백이지?

권한부여도 mysql 8 버전부터 변경되었다고 해서

정상적으로 부여를 다 한 상태였는데..

 

MySQL 8이상 권한 부여 방식

GRANT ALL PRIVILEGES ON DB이름 TO 'username'@'localhost';
FLUSH PRIVILEGES;

 

기존 방식

GRANT ALL PRIVILEGES ON DB이름 TO 'username'@'localhost' IDENTIFIED BY 'password';

 

하지만 검색을 좀 더 해보니 dotenv(.env) 파일의 경로 설정도 중요한 부분이었던 것이다.

경로 설정 없이 app.js와 같은 형제 위치여서

별도로 세팅을 안한 config() 공백상태였는데 사실은 이게 문제였나보다.


해결 :

정말 허무하게도 MySQL, 터미털에서 열심히 삽질했지만

VScode에서 단 한줄 수정을 끝으로 해결했다.

app.js와 동일한 위치에 존재해서

'/'로 경로를 잡고 적는 것이 아닌 파일명 자체로 넣어줬다.

 

dotenv.config( {path: '.env} );

백, 프론트 모두 할 때 마다 느꼈던 건데

경로가 기본인 것 같지만 실수가 발생할 수 있는 부분인데

다른 경우에 비해 명확하게 에러가 나오지 않는 경우가 꽤 있어서

놓치지 않고 꼼꼼하게 봐야겠다고 또 한번 다짐하게 되었다.

 

 

연관 사이트
 

MySQL :: How to grant privileges to users in MySQL 8.0

How to grant privileges to users in MySQL 8.0 For this last technical post of the MySQL Community Advent Calendar 2022, I will explain how to grant privileges to users in MySQL 8.0. This is an important task for anyone who is responsible for managing a MyS

dev.mysql.com

 

728x90
반응형
728x90
반응형

개발자가 되기 위해 개념들을 학습하고, 다양한 프로젝트를 진행해 보면서

좀 더 정확하게 개념을 짚고 넘어가고 싶다는 생각이 들었다.

그러기 위해서 다양한 IT 용어들에 대해서 기본 개념부터 이해도를 높이고자 기록을 해본다.

 

이번에는 기본 중의 기본인 API에 대한 내용이다.

 

API  (Application Programming Interface)

- 직역 : 응용 프로그램 프로그래밍 인터페이스

- 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘입니다.

예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다.

휴대폰의 날씨 앱은 API를 통해 이 시스템과 ‘대화’하여 휴대폰에 매일 최신 날씨 정보를 표시합니다.

 

AWS 사이트에서도 예시를 잘 들어서 이해하는데 도움이 되었다.

쉽게 말해서 한 프로그램에서 다른 프로그램으로 데이터를 주고 받기 위한 방법이다.


API 종류

Private API

- 내부 API

- 사내에서 쓰는 API로, 제 3자에게 노출되지 않음

 

Public API

- 개방형 API

- 제약없이 누구나 사용 가능한 공개 API

 

 Partner API

- 특정 비즈니스 파트너 간의 데이터 공유

 


참고 사이트

 

API란 무엇인가요? - 애플리케이션 프로그래밍 인터페이스 설명 - AWS

GraphQL은 API용으로 특별히 개발된 쿼리 언어로서, 클라이언트에게 요청한 데이터만 제공하는 것을 우선으로 합니다. 또한 API를 빠르고 유연하며 개발자 친화적으로 만들도록 설계되었습니다. RES

aws.amazon.com

 

아래는 유튜버 코딩애플님의 영상이다.

IT현황부터 프론트, 백 구분 없이 정말 유용한 내용들이 많아 즐겨보는 유튜버 중 한 명이다.

 

728x90
반응형

'Coding > Study' 카테고리의 다른 글

[JAVA] 자바의 메모리 영역 (stack, heap)  (0) 2023.11.15
[JAVA] 람다식 Lambda  (0) 2023.10.05
[JSP] JSP 강의평가 웹 사이트 개발하기 완료  (0) 2023.10.02
[GitHub] 깃, 깃허브  (0) 2023.09.28
[Kotlin] 코틀린 맛보기  (0) 2023.09.22
728x90
반응형
TDD : Test Driven Development

TDD 테스트 주도 개발에  대해 큰 그림을 그리며 배워보고자 인프런 강의를 듣는데

빌드에서부터 실패하는 트러블슈팅을 겪었다.

버전 세팅이 잘못되었거나 Build 세팅이 Gradle로 되어있어서 그런가 싶어서

변경해보았는데도 나 같은 경우 해결이 되지 않았다.

 

 

에러 내용 : 

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not execute test class 'com.tddpj.productorderservice.ProductServiceTest'. at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:54) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94).

 

 

해결 :

인텔리제이 기준 메뉴 Help > Edit Custom VM Options에서

-Dconsole.encoding=UTF-8 코드 하나 추가해주었다.

기존에는 위 두 개 값이 기본 세팅으로 되어 있었다.

빌드 실패했던 이유는 이 추가 설정 없이

PC 경로에 한글이 존재해서 그런 것 같다.

 

 

빨간불보다는 초록불이 좋아요.

반갑다 초록불

 

 

참고한 링크

https://www.inflearn.com/questions/459145/gradle-build-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4-testsuiteexecutionexception

728x90
반응형
728x90
반응형

람다식

- 익명 함수(anonymout function)를 생성하기 위한 식

- 객체 지향 언어보다는 함수 지향 언어에 가깝다.

- 자바 코드가 간결해진다.

- 컬렉션의 요솔르 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다.

- (매개변수) -> { 실행코드 } 형태로 작성

 

람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체

// Runnable 인터페이스 익명 구현 객체 생성하는 전형적인 코드
Runnable runnable = new Runnable() {
    public void run() { ... }
}

// 익명 구현 객체를 람다식으로 표현
Runnable runnable = () -> { ... };

 

 

타겟 타입과 함수적 인터페이스(@FunctionalInterface)

- 람다식의 타겟 타입은 하나의 추상 메소드가 선언된 인터페이스(두 개 이상 선언된 것은 타겟 타입 사용 불가)

- @FunctionalInterface 어노테이션을 인터페이스 선언 시 붙여주면

  두 개 이상의 추상 메소드가 선언되면 컴파일러가 체킹해 오류를 발생해준다. (선택사항)

@FunctionalInterface
public interface MyFunctionalInterface {
    public void method();
    public void otherMethod();	// 컴파일 오류
}

 

 

정적 메소드와 인스턴스 메소드 참조

- 정적(static) 메소드를 참조할 경우 클래스 이름 뒤에 :: 기호를 붙이고 정적 메소드 이름을 기술

public class Main {
    public static int staticMethod(int x, int y) {	// 정적 메소드
        return x + y;
    }

    public int insatanceMethod(int x, int y) {	// 인스턴스 메소드
        return x + y;
    }

    public static void main(String[] args) {
        IntBinaryOperator oper;

	    // 정적 메소드 참조
        oper = (x, y) -> Main.staticMethod(x, y);
        System.out.println("결과1 : " + oper.applyAsInt(1, 2));

        oper = Main::staticMethod;
        System.out.println("결과2 : " + oper.applyAsInt(3, 4));

	    /// 인스턴스 메소드 참조
        Main obj = new Main();
        oper = (x, y) -> obj.insatanceMethod(x, y);
        System.out.println("결과3 : " + oper.applyAsInt(5, 6));

        oper = obj :: insatanceMethod;
        System.out.println("결과4 : " + oper.applyAsInt(7, 8));
    }
}

 

728x90
반응형

+ Recent posts