제목: "[AWS,Github Action] Elastic Beanstalk에 SpringBoot 배포하기 (3) = EB에 RDS 사용하여 환경속성 통해 application.yml 주입받기"
작성자: tistory(EARTH_ROOPRETELCHAM)
작성자 수정일: 2021년10월14일
링크: https://earth-95.tistory.com/112
작성일: 2022년6월10일
기존 SpringBoot 프로젝트의 경우 H2 데이터베이스를 올리는 방식을 사용했다.
따라서 public Repository라 해도 DB 계정을 암호화하지 않아도 문제가 없었다.
하지만, 로컬 데이터베이스가 아닌 환경을 이용할 때에는 보안을 통해 접근을 막는다해도 해당 정보를 모든 사람에게 공유하는 것은 좋지 않다.
이번 포스팅에서는 DB의 username 이나 password 등 민감한 정보를 application.yml
에 작성하지 않고 EB의 환경속성에 기입하여 각 환경별로 원하는 값을 주입하여 SpringBoot을 실행하는 방법에 대해 알아보자.
이전 포스팅에 작업한 내용물에 RDS를 더해 최종적으로 아래와 같은 구조를 생성해볼 예정이다.
먼저 Elastic Beanstalk의 환경에 접근하여 구성에서 데이터베이스 편집으로 들어간다.
DB 삭제 정책을 삭제로 선택한 이유는 Develop 환경이라 해당 환경을 삭제할 때에 DB까지 모두 함께 삭제할 수 있게 위함이다.
처음 RDS를 설정시, 적용을 누르지 않으면 RDS의 모데인이 나오지 않아 DB 추가 작업 완료 후 EB의 환경에 재접근하여 구성을 클릭후 환경속성을 넣어준다.
환경 속성에는 springboot 어플리케이션에 주입할 값들을 모두 넣어야 한다.
환경 속성 설정 예시
spring.profile.active
에 대한 변수를 지정하고자 한다면 SPRING_PROFILE_ACTIVE
를 이름으로 넣고 값을 넣으면 된다.즉, .(dot)은 언더스코어로 변경하고, 소문자는 대문자로 변경해야한다.
필자의 경우, 아래와 같이 profiles
를 ebdev
로 진행하고 해당 파일 내에 db 정보를 환경 속성으로 지정하여 주입받기 위해 위와 같이 설정하였다.
implementation 'mysql:mysql-connector-java:8.0.28'
RDS 내 Database를 생성해야 해당 database에 스프링부트가 접근이 가능하기 때문에 먼저 로컬에서 RDS에 접근하여 database를 생성해야 한다.
물론, application.yml을 통해 database가 없을 경우 생성할 수도 있겠지만, RDS 접근이 제대로 되는지 확인할 겸 직접 작성해보자
먼저 로컬 환경에서 RDS database에 접근하기 위해 RDS의 보안그룹을 추가해주도록 하자.
아래와 같이 EC2의 보안그룹 탭을 클릭하고, 신규 보안 그룹을 생성한다. 이 때 해당 보안 그룹에는 인바운드 규칙으로 DB 포트에 대해 로컬 pc에서 접근이 가능하도록 설정한다.
이 후, workbench로 RDS에 접근하여 EB의 환경속성으로 지정한 RDS_DBNAME과 동일한 이름의 데이터베이스를 생성한다.
위 과정까지 진행 한 후 CD workflow가 수행되는 행위를 진행하면 아래와 같이 CD가 진행된다.
로그를 확인하면, 기존에 EB 환경설정을 했을때와 같이 추가 배치를 이용한 롤링 배포가 진행됨을 알 수 있다.
신규 버전으로 배포가 완료되면, 기존 버전의 EC2는 삭제되며, 배포 초기에는 아무래도 CPU 사용량이 많아 상태가 성능 저하됨으로 뜨다가 점차 정상화 되면 아래와 같이 동그라미로 바뀌게 된다.
배포가 완료되고 도메인을 클릭하면 현재 배포한 스프링부트 어플리케이션으로 이동할 수 있다.
또한 배포가 완료되면, 실행 버전에 신규로 들어간 버전의 어플리케이션명이 뜨게 된다.
해당 어플리케이션명은 github action의 .yml에 존재하는 version_label
명에 해당하는 것이다.
깃허브 액션과 EB에 의해 EC2에 제대로 배포되었는지 SSH 로그를 통해 확인해보고자 한다. 확인하기 위해서는 먼저 EB에 의해 EC2의 키페어를 로컬에 저장해야 한다.