이번 시간에는 스프링부트에 AWS의 Relational Database Service
즉 RDS를 데이터베이스로 연결해보는 과정을 알아보겠다.
:: RDS란 ::
아마존 RDS는 아마존 웹 서비스가 서비스하는 분산 관계형 데이터베이스이다. 애플리케이션 내에서 관계형 데이터베이스의 설정, 운영, 스케일링을 단순케 하도록 설계된 클라우드 내에서 동작하는 웹 서비스이다.
아예 AWS를 처음 접하는 사람들도 쉽게 따라할 수 있도록 차근차근 설명하겠다.
1. IAM 생성
우선 AWS 계정이 없다면 아래 게시물을 따라서 프리티어 계정을 생성해보자.
계정을 생성했다면 IAM을 생성해야한다.
IAM이란 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스이다.
IAM을 사용하면 생성한 IAM에 허가된 권한에 대한 서비스만 사용할 수 있다.
쉽게 말해서 만약 "AWS S3 사용권한만 받은 IAM이 있다면 그 IAM을 통해선 S3만 사용할 수 있다는 것" 이다.
아래를 보고 따라해보자
AWS에 접속해 IAM을 검색한다.
IAM의 사용자 탭 클릭
사용자 추가를 클릭한다.
사용자 이름 을 입력하고 엑세스 키 방식을 선택한다.
IAM의 권한을 설정하는 탭이다.
EC2 배포 관련 권한과 앞으로 사용할 권한을 모두 넣었으니 우선 전부 넣어주도록 하자.
이 부분은 태그를 추가하는 부분이다.
당장은 필요 없으니 넘어간다.
마지막으로 권한이 잘 설정되었는지 확인하고 사용자 만들기 클릭
.csv는 IAM을 사용하기 위해 꼭 필요하므로 다운받자.
지금 페이지를 벗어나면 다신 다운 받을 수 없어 IAM을 새로 생성해야하는 불상사가 발생한다.
2. RDS 생성
IAM 생성이 끝났으니 RDS를 생성해보자.
RDS를 검색해 데이터베이스 생성 버튼을 클릭한다.
우리는 무료 버전을 이용한 것이므로 프리 티어를 선택해주자.
- 인스턴스 식별자: DB Name
- 마스터 사용자 이름: User Name
- 마스터 암호: User PW
이 부분은 자동으로 설정되는 부분인데 무료 버전에 맞춰져 세팅되어 있으므로 건드리지 않고 넘어간다.
연결 설정은 위와 동일하게 해주는데
퍼블릭 엑세스는 아래와 같이 예로 선택한다.
보안 그룹 설정은 RDS 생성을 마친 후에 이어서 하도록 하겠다.
추가 구성 탭에선 초기 데이터베이스의 이름을 지정할 수 있다.
이때 지정해주어야 따로 db에 접속하여 create database 명령을 해주는 귀찮음을 감수할 수 있다.
또한 추가 구성 하단에 있는 자동 백업 활성화를 꺼준다.
백업은 좋은 기능이지만 스냅샷을 생성하는 것은 유료 서비스이다.
완전 최소한의 금액을 사용하고 싶다면 이 부분을 비활성화 해주자.
세팅이 끝났으니 데이터베이스 생성을 눌러주고 RDS에 적용할 보안 그룹을 생성 또는 설정해준다.
보안 그룹을 클릭한 뒤 인바운드 규칙 변경을 선택하면 이러한 화면이 나온다.
유형: MYSQL/Aurora
포트: 3306
소스: Anywhere - IPv4
이 설정을 안해주면 mysql 접속 시 60 error를 표출한다.
이것은 EC2에 적용되는 보안그룹 중 RDS에만 관련된 설정이기 때문에 EC2 배포(2)에서 내용이 더 추가될 것이다.
3. 스프링부트 프로젝트 세팅
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'mysql:mysql-connector-java'
application.yml
spring:
datasource:
url: ${MYSQL_URL}
username: ${MYSQL_USERNAME}
password: ${MYSQL_PW}
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 30
mvc:
pathmatch:
matching-strategy: ant_path_matcher
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
show-sql: true
properties:
hibernate:
format_sql: true
hibernate:
ddl-auto: update
naming:
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
generate-ddl: true
open-in-view: false
${MYSQL_USERNAME}과 ${MYSQL_PW} 부분은 아까 RDS 설정 과정에서 입력했던
마스터 사용자 이름과 마스터 암호를 그대로 입력해주면 되고
url은 jdbc:mysql://엔드포인트:3306/db이름(databaseName) 으로 설정하면 된다.
이렇게 하면 설정은 끝나지만 이렇게 중요한 키값들이 노출되어 있는 상태로 프로젝트를 git에 커밋하기 위해선
키값을 숨겨주거나 application.yml을 gitignore해야한다.
gitignore도 좋은 방법이지만 해당 프로젝트를 다른 환경에서 세팅하여 지속적으로 개발한다고 생각하면
상당히 불편한 상황이 벌어진다.
그래서 난 AWS Secrets Manger를 채택했다.
시크릿 매니저를 이용하면 위처럼 ${}로 키값을 대입시켜 사용할 수 있어 프로젝트 그대로 git에 업로드가 가능하다.
위 게시물을 통해 Secrets Manager 설정 방법을 확인할 수 있으니 필요하다면 참고하도록 하자.
3. AWS 구성 설정 (AWS CLI)
AWS 구성 설정은 프로젝트에서 AWS 관련 기술을 사용한다면 필수적인 부분이기 때문에
RDS나 Secrets Manager를 사용한다면 필수적으로 해주어야한다.
위 게시글을 따라 CLI를 설치하고 설정해보자!
4. MySQL 워크벤치 연결
RDS를 MySQL 워크벤치에도 연결하고 싶다면 아래 게시물을 따라 연결해보자!
'BackEnd > Infra' 카테고리의 다른 글
[AWS] AWS S3 사용법 (with. 스프링부트) (1) | 2022.09.04 |
---|---|
[AWS] EC2 도메인 연결 및 HTTPS 적용하기 (7) | 2022.06.04 |
[AWS] AWS EC2 FTP 클라이언트 연결 (FileZilla) (1) | 2022.04.13 |
[AWS] EC2 배포(2) - PuTTY로 AWS EC2 인스턴스 접속 (2) | 2022.04.09 |
[AWS] EC2 포트 포워딩 (3) | 2022.04.05 |