Error

[aws] 스프링 프로젝트 - mariadb rds ec2 서버 연결 java.sql.SQLNonTransientConnectionException 에러 해결

난감 2024. 6. 20. 01:01
728x90

application.properties에 aws에서 생성한 rds(mariadb) 엔드포인트 주소와 이름, 비번을 적어 권한을 설정하고

git에 push 한 뒤 서버에 연결했는데 에러가 났다. 

 

nohup.out 파일에서 로그를 보니 

java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=엔드포인트)(port=3306)(type=master) : Connect timed out

라고 떠있었다.

 

인터넷에 찾아보니 java와 mariadb 버전이 안맞거나, 외부에서 mariadb에 접속할 수 있는 권한이 없거나 등등 여러가지 원인이 있었다.

 

나의 경우 rds 보안 그룹 규칙에 0.0.0.0/0 인바운드 규칙을 추가한 뒤 재배포 하니 잘 동작했다.

(재배포 안하면 적용안됨!!)

 

aws에서 rds에 들어간다.

rds - 데이터베이스 - 생성된 rds 클릭 후 밑으로 내리면 보안 그룹 규칙이 보인다.

여기서 보안 그룹을 하나 클릭하면 rds 생성시 만들었던 보안 그룹으로 이동한다.

보안그룹 id를 누른다.

 

그리고 인바운드 규칙 편집을 누르고 아래와 같이 설정했다.

해결.

 

 

 

위 방법 외에도 일단 sql 오류가 발생하면 db가 제대로 연결되었는지를 먼저 확인해야한다.

따라서 우선 application.properties에 제대로된 주소를 적었는지 확인한다.

엔드포인트를 잘못적었거나 포트를 잘못 적었을 수 있다.

application.properties의 경우 아래처럼 작성한다.

spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://{엔드포인트}:{포트번호}/{데이터베이스 이름}
spring.datasource.username=이름
spring.datasource.password=비번

 

엔드포인트와 포트번호를 확인하는 방법은 아래와 같다.

 

aws에서 rds - 데이터베이스 에 들어가면 생성한 rds가 나타난다.

 

 

여기서 db 식별자를 누르면 아래처럼 엔드포인트와 포트를 확인할 수 있다.

 

반응형