지난 글에서는 EC2를 이용해서 서버를 올리는 작업을 진행했었다. 이번에는 서버에서 docker로 구성했던 db를 RDS에 올려보려고 한다.
Amazon RDS(Amazon Relational Database Service)는 클라우드 상에서 손쉽게 DB를 설치, 운영, 확장할 수 있는 서비스를 말한다.
공식 사이트
이번 목표는 이 RDS 서비스를 이용해 내 프로젝트 내의 mysql을 운영하는 것이다.
AWS에서 RDS 서비스를 선택해서 들어간다.
데이터베이스 생성 선택
MySql 8.0.31을 선택하고 프리티어 선택
DB 인스턴스 식별자는 말 그대로 그냥 인스턴스 이름을 설정하는 거다. 이에 더해 마스터 사용자 이름, 마스터 암호는 DB의 user와 password를 설정하는 것이다. 자신에 맞춰 설정하고 기억해두자.
스토리지는 범용 SSD로 최소 값인 20GB로 설정한다.
연결탭이다. 나는 앞선 글에서 EC2 Instance를 켜뒀기 때문에 해당 Instance에 연결해줘야 한다. 연결 탭에서 EC2 컴퓨팅 리소스에 연결을 선택하고 아래에서 해당 인스턴스를 선택하면 알아서 연결을 해준다!! (보안 그룹까지 다!)
꼭 빼먹지 말고 추가 구성에서 DB 이름을 지정해주자. 이를 지정해야 DB가 생긴다.
자신의 RDS Instance에 들어가보면 DB endpoint가 나온다. 이를 이용해서 셋팅을 해줘야 한다.
그를 위해 여러 파일들을 수정해주자
우선 datasource 관련 코드를 따로 파일을 빼서 정해주자. 그 이유는 내 RDS 계정과 endpoint가 나오기 때문에 따로 빼서 작성해주자
## application-db.yml
spring:
datasource:
url: jdbc:mysql://[자기 ENDPOINT]:3306/[자기 DB 이름]?useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.cj.jdbc.Driver
username: [RDS ID]
password: [RDS PASSWORD]
## application.yml
## 기존에 있던 spring: 하위의 datasource:를 전부 제거해주자.
## 또 db를 include 해주자.
spring:
~~
profiles:
~~
- db
기존에 docker에 있던 mysql container도 제거해줘야 한다. 코드에서 db-mysql 파트를 싹 드러내주자. 그리고 하단 command 에서 db-mysql 대신 RDS endpoint를 적어주자. 수정한 결과물은 아래와 같다.
## docker-compose.yml
version: "3.8"
services:
app:
container_name: app
build:
context: ./
dockerfile: Dockerfile
ports:
- 8080:8080
command:
- bash
- -c
- |
./wait-for-it.sh ${MYSQL_HOST_ENDPOINT}:3306 -s -t 100
java -jar /app.jar
## .env
MYSQL_HOST_ENDPOINT=[자기 RDS Endpoint]
잊지 말고 .gitignore에 .env 파일과 application-db.yml을 추가해주자.
여기까지 작업을 맞춘 후 github에 push 해주자.
먼저 EC2 Instance에 접속해주자. -> ssh heyday-howwasyourday
그 후 git pull을 통해서 수정사항을 받아오고, instance 내부 프로젝트에도 .env와 application-db.yml 파일을 수동으로 추가해주자.
그 후 기존 빌드 파일과, docker-container를 깔끔하게 날리고 다시 서버를 켜주면 !! 성공적으로 서버가 켜진 것을 볼 수 있다. ㅎㅎ
성공적으로 서버가 켜진 것을 보고 난 후에 AWS RDS Instance에 들어가보자. 그러면 아래와 같이 현재 활동에 없던 연결이 생긴걸 확인할 수 있다.
이렇게 DB까지 RDS를 통해서 키는 작업을 마무리했다. 다음 스텝으로는 빌드 자동화를 구축하는 것이다. Github Action을 통해서 이뤄낼 수 있을 것이라 보이고, 이 자동화까지 하면 github master branch에 merge 하는 걸로 배포를 할 수 있게 만드려 한다.