[SpringBoot] 웹서비스 출시하기 - 6. 운영 환경 설정하기
해당 글은 전 '우아한형제들' 현 '인프런'의 개발자이신 jojoldu님의 블로그와 책(스프링 부트와 AWS로 혼자 구현하는 웹서비스)을 참고하여 작성하였습니다.
이전 글에서 서비스가 죽지 않고 배포가 가능한 무중단 배포를 구축하였습니다.
그러나, 아직까지 이전에 생성한 RDS DB를 연결하지 않았습니다.
이번 글에서는 AWS RDS DB를 연결하여, 운영 환경을 최종적으로 설정하도록 하겠습니다.
1. AWS RDS DB 접근하기
- 이전 글에서 운영 YAML (real-application.yml)을 EC2 서버에 생성하였습니다.
- 운영 DB(AWS RDS)도 해당 파일에 추가하여 사용 가능하도록 하겠습니다.
- 그렇지만, 해당 파일에는 현재 set1, set2 설정에 같은 내용을 반복하여 추가해야 되고, 후에 해당 사항이 변경이 있을 경우 2 곳의 코드를 모두 고쳐야하는 불편함이 있습니다.
- 기타 API 정보나 접속 정보도 동일하게 set1, set2에 추가 및 수정을 반복하게 될 것입니다.
- 이러한 불편함을 파일 하나로 모아서 관리하도록 하겠습니다.
1-1. 프로젝트 DB 드라이버 의존성 추가
- 해당 시리즈를 따라오셨다면, AWS의 RDS DB는 Maria DB를 사용하실 것 입니다.
- Maria DB를 프로젝트 내에서 사용하기 위해 드라이버 의존성을 추가하도록 하겠습니다.
- build.gradle 파일에 아래 코드를 추가합니다.
// Maria DB
implementation ('org.mariadb.jdbc:mariadb-java-client')
- 저장 후 gradle refresh로 의존성을 다운받습니다.
1-2. 프로젝트 YAML(application.yml) 파일 수정
- 스프링부트 yml 에서 특정 Profile을 포함시켜 설정을 공유하는 Adding Active Profiles 를 사용하도록 하겠습니다.
- application.yml 파일을 수정하겟습니다.
- 기존에 로컬PC에 생성하였던 real-application.yml에 작성한 set1, set2 내용을 가져오도록 하겠습니다.
참고!!!
real-application.yml은 Application.java에 위치가 등록되있습니다.
해당 시리즈를 진행하신 분들은 /app/config/springboot-webservice/real-application.yml로 되어있습니다.
- 현재 프로젝트 내의 application.yml
spring:
profiles:
active: local # 기본 환경 선택
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
config:
use-legacy-processing: true
---
spring:
profiles: local
datasource:
data: classpath:data-h2.sql # 시작할때 실행시킬 script
jpa:
show-sql: true
hibernate:
ddl-auto: create-drop
h2:
console:
enabled: true
server:
port: 8787
- 현재 로컬 PC 디렉토리 내의 real-application.yml
---
spring:
profiles: set1
server:
port: 8081
---
spring:
profiles: set2
server:
port: 8082
- real-application.yml 파일에 아래와 같이 RDS DB 접속 정보를 추가하겠습니다.
...
server:
port: 8082
---
spring:
profiles: real-db
datasource:
url: jdbc:mariadb://RDS주소:3306/db명
username: db계정
password: db패스워드
driver-class-name: org.mariadb.jdbc.Driver
- RDS DB 정보는 AWS에서 확인합니다.
- URL에서 RDS주소는 AWS RDS에서 엔드포인트 주소를 입력하시면 됩니다.
- 포트는 기본 3306이며, 따로 설정하셨다면 그 포트를 작성하시면 되겠습니다.
- username 과 password 는 RDS를 생성 시 만들었던 계정 정보를 입력하시면 됩니다.
- real-application.yml 에 DB 정보를 작성하였으니, 프로젝트에 있는 application.yml 에서 이 정보를 가져오도록 하겠습니다.
- application.yml 을 다음과 같이 수정하도록 하겠습니다.
spring:
profiles:
active: local # 기본 환경 선택
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
config:
use-legacy-processing: true
---
spring:
profiles: local
datasource:
data: classpath:data-h2.sql # 시작할때 실행시킬 script
jpa:
show-sql: true
hibernate:
ddl-auto: create-drop
h2:
console:
enabled: true
server:
port: 8787
# 운영 환경
---
spring.profiles: set1
spring.profiles.include: real-db
---
spring.profiles: set2
spring.profiles.include: real-db
- 운영 환경 아래에 set1, set2를 profile 하고 ,real-db를 추가하였습니다.
- spring.profiles.include는 해당 profile을 실행시킬땐 특정 profile을 포함시킨다는 내용입니다.
- 해당 내용이 적용되었는지 확인해보도록 하겠습니다.
- IntelliJ를 기준으로 이전에 생성한 스프링부트 실행시 Active Profiles를 set1로 지정해서 실행해겠습니다.
- 연결이 정상적으로 되었다면, 해당 DB를 사용하는지 테스트를 해보도록 하겠습니다.
- 테스트는 간단하게 CRUD를 진행하는 페이지를 만들어서 진행하시면 되겠습니다.
- 글이 정상적으로 등록이되었고, DB에도 등록되었는지 확인해보도록 하겠습니다.
- AWS RDS DB에도 해당 내용이 들어간 것이 확인되었습니다.
2. EC2에 RDS DB 적용시키기
- ssh로 EC2에 접속하여, EC2에서도 생성하였던, real-application.yml 을 수정하도록 하겠습니다.
- 로컬PC에서 진행하였던 것과 동일하게, RDS DB 정보를 추가합니다.
...
server:
port: 포트
---
spring:
profiles: real-db
datasource:
url: jdbc:mariadb://RDS주소:3306/db명
username: db계정
password: db패스워드
driver-class-name: org.mariadb.jdbc.Driver
참고!!!
이전에도 설명드렸듯이 운영 환경의 정보는 외부에 노출되면 안됩니다.
항상 보안에 신경쓸 수 있도록 해주세요!
- 수정 후 저장하셨다면, 이제 프로젝트 변경사항을 commit & push를 진행하여 반영하도록 합니다.
- 기존에 무중단 자동화 배포가 구성되었으므로, push 만 하시면 확인이 가능할 것 입니다.
- 배포가 끝났다면 URL을 접속하여 확인해보도록 하겠습니다.
- 운영환경에서도 정상적으로 확인이 되었습니다.
참고