728x90
반응형

얼마전 새로운 언어에 대한 맛보기로 node.js 기초를 학습하고 배포까지 해보게 되었다.

이 경험을 토대로 현재 고도화 단계인 스프링부트 개인 프로젝트를 RDS 연결부터 진행해보았다.

연결 시 에러가 발생했는데 URL부분 작성 착오로 발생한 것이었고 해결하게 되었다.

 

처음에 에러 원인을 검색해보면서 다양한 원인들이 있다는 내용을 보았고

주 원인들인 퍼블릭 엑세스 설정, 보안 인바운드 규칙은 이미 알맞게 설정이 된 상태였다.

 

처음부터 여러 에러 메세지 중에서 link failure에 초점을 맞추지 못했지만

계속 시도하다보니 url문제인 것을 파악하게 되었다.

 

 

에러 내용 :

java.lang.RuntimeException: Driver cohttp://m.mysql.cj.jdbc.Driver claims to not accept jdbcUrl,...

 

 

해결 :

url 부분에서 jdbc:mysql:// 부분과 :포트 그리고 데이터베이스명 부분을 제대로 작성해주니

RDS 연결에 정상적으로 성공하여 Entity 테이블들이 생성되는 것을 확인했다.

spring:
  # Database 설정
  datasource:
    url: jdbc:mysql://엔드포인트:포트/데이터베이스명
    username: 사용자이름
    password: 비밀번호
    driver-class-name: com.mysql.cj.jdbc.Driver

 

 

프로젝트를 서버에 배포한 후에는 다시 이 url을 배포 주소로 바꿔줘야하니 잊지 않고 기억해두어야겠다.

728x90
반응형
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
반응형
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
반응형

지난 파이널 프로젝트때 회원관리 부분을 담당했었는데

살짝 애먹었던 로그아웃 세션 관련하여

또 한번 마주하게 되어 해결방법을 기록해본다.

 

트러블슈팅을 마주하게 됐던 상황은

컨트롤러 상단에 SessionAttributes를 설정하고

회원가입이나 로그인 시 회원정보 세션을 유지하게 해두었는데

기존에 배웠던 session.invalidate()로는 세션 해제가 되지 않고 세션값이 계속 유지되었다.

쿠키도 삭제해보고 여러가지 방법을 시도해봤는데 새로운 사실을 알게 되었다.

SessionAttributes의 경우 sessionStatus를 사용해 세션을 정리한다고 해서 

invalidate 대신 사용해보니 정상적으로 로그아웃 시 세션 해제가 되었다. 

 

SessionStatus는 @sessionAttributes를 활용해

session에 남긴 데이터를 제거하는데 활용하는 인터페이스라고 한다.

 

 

session : 일반적인 HttpSession 객체

sessionStatus : Spring MVC 컨트롤러에서 세션 관리를 위한 특수한 용도로 사용되는 객체

 

 

컨트롤러에 SessionAttributes로 세션 설정

sessionStatus를 사용한 로그아웃 세션 해제

  @RequestMapping("/logout")
    public String logout(SessionStatus sessionStatus) {
        sessionStatus.setComplete();;
        return "redirect:/";
    }

 

 

 

스프링 문서

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/support/SessionStatus.html

 

SessionStatus (Spring Framework 6.0.12 API)

Mark the current handler's session processing as complete, allowing for cleanup of session attributes.

docs.spring.io

 

728x90
반응형

+ Recent posts