✅ 개요
VPC 구축이 완료되었다. 이제 RDS로 MySQL 데이터베이스를 실제로 배포해보겠다.
✅ RDS로 MySQL 데이터베이스 만들기
1️⃣ VPC 서브넷 그룹 만들기
앞서 만든 VPC를 통해 데이터베이스를 만들려면 서브넷그룹이 있어야 한다.
RDS에 들어가 DB 서브넷 그룹을 생성해줬다.
앞서 만든 VPC를 선택하고
해당 VPC의 가용영역과 서브넷을 선택해준다.
2️⃣ 데이터베이스 생성
1. MySQL 선택
2. 무료인 프리티어로
3. DB 인스턴스 식별자의 이름을 정하고 사용자 이름, 암호를 지정한다.
4. VPC 설정
앞서 만들었던 VPC로 설정한다.
5. 서브넷 그룹 설정 및 퍼블릭 액세스 설정
- 서브넷 그룹은 앞서 만들었던 서브넷 그룹을 할당해준다.
- 퍼블릭 액세스를 허용하게 되면 퍼블릭 IP가 할당 되어, 과금이 부과된다. EC2를 통해서만 접근하게 할 것이므로 아니요로 설정했다.
6. 보안그룹 및 가용영역 설정
- 보안그룹은 앞서 만들어두었던 mysql 전용 보안그룹을 선택한다.
- 가용영역의 경우, EC2 인스턴스와 같은 가용영역으로 설정해주어야 한다. 앞서, EC2는 ap-nothreat-2a에 만들었으므로 똑같이 설정해준다.
3️⃣ 파라미터 그룹 설정
파라미터 그룹에 대한 부분은 다음 포스트를 참고했다.
[AWS] RDS MySQL 연결-(2)
RDS 파라미터 그룹 설정
velog.io
만들어준 파라미터 그룹을 데이터베이스에 적용시켜준다.
주의) DB 파라미터 그룹을 변경한 뒤에는 RDS의 DB를 재부팅해야만 정상적으로 적용된다고 한다.
✅ EC2로 연결해보기
1️⃣ MySQL 설치
# APT 업데이트
$ sudo apt-get update
# MySQL 설치
$ sudo apt install mysql-client
# MySQL 접속
$ sudo mysql -u admin -p --port 3306 --host <RDS 인스턴스 엔드포인트>
2️⃣ 접속확인
# MySQL 접속
$ sudo mysql -u admin -p --port 3306 --host <RDS 인스턴스 엔드포인트>
앞서 설정해두었던 비밀번호를 입력하면 정상적으로 연결이 잘되는 것을 알 수 있다.
✅ 로컬호스트 MySQL 데이터베이스를 RDS에 복사하기
이제 로컬호스트에 있던 데이터베이스를 RDS로 바로 복사해 그대로 데이터를 사용할 수 있도록 해보겠다.
기본적인 구조는 다음과 같다.
1️⃣ 로컬호스트에서 데이터베이스 스키마에 대한 덤프파일을 생성한다.
2️⃣ SCP 프로토콜로 AWS EC2에 해당 파일을 전송한다.
2️⃣ AWS EC2는 해당 파일을 받아서 AWS RDS에 복원시킨다.
1️⃣ 덤프 파일 생성
내 로컬 터미널에서 다음의 명령을 입력한다.
$ mysqldump -u <username> -p <database-name> > <파일명>
# 예시
$ mysqldump -u admin -p aws_practice > aws_practice_backup.sql
파일이 잘생성되었다.
2️⃣ SCP로 EC2에 파일 전송
$ scp -i <EC2 접속을 위한 SSH 키 파일의 경로> <백업 파일 경로> <OS>@<your-ec2-ip>:<파일을 저장시킬 경로>
# 예시
$ scp -i Downloads/aws-practice-keypair.pem aws_practice_backup.sql ubuntu@x.x.x.x:/home/ubuntu
파일이 잘 전송되었다.
3️⃣ EC2에서 RDS로 덤프 파일 복원
$ mysql -h <RDS 엔드포인트> -P 3306 -u <your-rds-username> -p <your-rds-database-name> < <백업파일 위치>
# 예시
$ mysql -h xxx.rds.amazonaws.com -P 3306 -u admin -p aws_practice < /home/ubuntu/aws_practice_backup.sql
비밀번호를 입력하면 복원이 완료된다.
잘 복원되었다!
✅ Spring boot API 테스트
MySQL 배포까지 완료되었다.
이제 Spring boot 서버를 실행시켜 잘 작동하는지 API 테스트를 해보겠다.
1️⃣ 서버 실행
$ cd aws_practice-backend # 프로젝트 폴더로 이동
$ ./gradlew clean build # gradle 클린 빌드
$ cd build/libs
$ java -jar aws-0.0.1-SNAPSHOT.jar # 빌드 파일 실행
‼️ 프리티어를 사용하다 보니 빌드과정이 너무 느리거나 멈추는 현상이 종종 발생하였다. 이는 메모리 부족때문인데 스왑메모리를 할당하면 해당 현상이 어느정도 해결된다.
참고 포스트
AWS EC2에 스프링 부트 프로젝트 배포하기
이 글은 EC2와 RDS 설정을 모두 마쳤다는 것을 전제로 그 뒤의 배포 작업에 관한 내용을 다룹니다. 아직 EC2와 RDS 인스턴스가 생성되지 않은 분들은 아래 글을 참고하신 뒤 이 글을 읽으시는 것을
rovemin.tistory.com
2️⃣ API 테스트
간단하게 데이터베이스에 저장돼 있던 회원으로 로그인을 해보겠다.
정상적으로 로그인이 되는 것을 볼 수 있다.
✅ 마치며
드디어 백엔드 배포가 끝났다. 다음 포스트에선 프론트엔드 코드를 S3에 배포해보도록 하겠다.
'AWS' 카테고리의 다른 글
[AWS 실습 프로젝트] 9. NginX, Certbot를 통해 스프링부트 백엔드 서버에 HTTPS 적용시키기 (0) | 2024.09.17 |
---|---|
[AWS 실습 프로젝트] 8. S3에 프론트엔드 배포하기 (0) | 2024.09.17 |
[AWS 실습 프로젝트] 6. RDS를 통해 MySQL 서버 배포하기 - (1) 안전하고 저렴하게 배포하기 위한 VPC도입 (0) | 2024.09.17 |
[AWS 실습 프로젝트] 5. EC2에 스프링부트 백엔드 서버 배포하기 (0) | 2024.09.17 |
[AWS 실습 프로젝트] 4. Spring boot로 S3에 이미지 업로드 및 수정 비즈니스 로직 구현하기 (0) | 2024.09.17 |