Infra/AWS

[AWS] Spring boot 랑 RDS Mysql 연동하기 (GitAction, EB)

민돌v 2021. 12. 15. 19:05

전 게시물에서 EB를 이용해 배포를 하였기 때문에, EB 환경에서 데이터베이스(RDS)를 만들어 연동하고자 한다.

 

Elastic Beanstalk > 환경 > 내 eb 환경 > 구성 > 데이터베이스 편집

 

여기서 데이터 베이스를 쭉쭉쭉 만들고

사용자 이름과 비밀번호를 기억해 두어야한다. (master 아이디가 된다.)

그럼 이렇게 RDS 가서 보면 데이터베이스가 생긴걸 확인 할 수 있다.

RDS 데이터베이스 페이지

여기서 클릭해 엔드포인트를 기억해 두고,

인바운드 규칙을 편집한다.

 

VPC 보안그룹 클릭 > 인바운드 규칙 편집 클릭

그다음 해당 데이터베이스의 포트를 열어준다.

나는 mysql을 사용했기 때문에 3306 포트를 열어주엇다.

인바운드 규칙

 

그 다음 EB 환경변수에 아래의 값들을 추가해 준다.

(EB 환경변수와 인텔리제이 환경변수 추가하는 방법은 이전 게시글을 참고)

  1. RDS 엔드포인트
  2. RDS 포트번호
  3. RDS 유저 아이디
  4. RDS 유저 비밀번호

 

application.properties

그 다음 스프링 부트와 RDS를 연동해주기위해, 아래의 코드를 추가해준다.

driver 를 추가해주지 않으면, 깃 배포 시 빌드 에러가 난다. (버전에 따라도 에러가 날 수 있으니, 최신버전 확인)

spring.datasource.url=jdbc:mysql://${RDS_HOSTNAME}:${RDS_PORT}/${RDS_DB_NAME}
spring.datasource.username=${RDS_USERNAME}
spring.datasource.password=${RDS_PASSWORD}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

 

이라믄 끝!

 

+

+

+

 

 

깃 배포시 에러

erro code

Caused by: java.lang.IllegalArgumentException at DefaultCacheAwareContextLoaderDelegate.java: 132

caused by org.springframework.beans.factory.beancreationexception at AbsractAutowireCapleBeanFactory.java

caused by org.hibernate.service.spi.serviceexception at AbstractServiceRegistryImpl.java

caused by org.hibernate.hibernateexception at dialectfactoryimpl.java

에러 켑챠

 

[해결 방법]

application.properties 에 환경변수를 추가하여 생겼던 오류이다.

앱이름SpringApplicationTests.java

위의 TEST파일을 삭제하면 정상적으로 배포가 된다.

 

에러가 나는 이유는,

빌드할 때 테스트케이스가 실행되게 되어있어, @SpringBootTest가 있는 클래스의 테스트들이 실행되게 되어있는데,

테스트 케이스가 돌아기 위해서는 스프링부트와 마찬가지로 스프링이 실행 된 후 테스트케이스가 실행된다.

따라서 스프링 부트가 실행될때 application.properties에 환경변수를 알아채지 못해 생기는 에러이다.