AWS RDS MariaDB를 생성해 스프링 부트와 연동해보자.
1. AWS RDS MairaDB 생성
데이터베이스 생성 버튼을 클릭하고 MariaDB를 선택한다.
템플릿은 프리티어, 식별자는 원하는대로 작성하면 되고, 마스터의 사용자 이름과 비밀번호도 원하는대로 설정한다.
20GB까지 무료이므로 변경해주고, 스토리지 자동 조정 활성화를 꺼준다.
외부에서 DB에 접근이 가능하도록 하기 위해 퍼블릭 액세스 부분은 '예'로 변경했다.
추가 구성을 열어, 초기 데이터베이스를 생성해주었다. 자동 백업 활성화는 비활성화 해주었다. (필자는 혹시 몰라 보존기간 0일, 스냅샷으로 태그 복사를 비활성화 한 뒤 자동 백업을 비활성화 시켰다.)
마이너 버전 자동 업그레이도도 비활성화 해주었다.
이제 데이터베이스를 생성하면 된다. 상태가 사용 가능이 될 때까지 기다려야 한다.
사용 가능 상태가 되고, DB 식별자를 클릭하면 DB 접속을 위한 정보를 확인할 수 있다.
하단의 보안 그룹 규칙에서 보안 그룹을 클릭하면 다음과 같은 창이 나온다. 여기서 보안 그룹 ID를 클릭한다.
인바운드 규칙 편집을 클릭한다.
다음과 같이 MYSQL/Aurora 유형의 규칙을 추가한다.
모든 곳에서 접근할 수 있도록 해두었다.
2. 파라미터 그룹 설정
RDS는 다음 세가지를 설정해주어야 한다
- Time Zone
- Character Set
- Max Connection
생성한 파라미터 그룹을 클릭해 상세 페이지로 이동하고, 파라미터 편집을 클릭해 편집 모드로 바꿔준다.
time_zone을 검색해 Asia/Seoul로 변경한다.
character_set 을 검색하고, 다음의 값을 모두 utf8mb4로 변경한다.
• character_set_client
• character_set_connection
• character_set_database
• character_set_filesystem
• character_set_results
• character_set_server
colleation을 검색하고, 다음의 값을 모두 utf8m64_general_ci로 변경한다.
• collation_connection
• collation_server
빨갛게 표시한 파라미터는 MariaDB에서만 RDS 파라미터 그룹으로는 변경이 안된다고 한다. 그래서 HeidiSQL에서 접속한 후, 직접 다음 쿼리를 수행해주었다.
alter database DB이름 character set utf8 collate utf8_general_ci;
이제 파라미터를 적용시켜 주자.데이터베이스 탭으로 이동해 수정할 데이터베이스를 클릭하고 수정 버튼을 누른다.
추가 구성을 열어서 데이터베이스 옵션의 DB 파라미터 그룹을 방금 생성한 파라미터 그룹으로 변경하고, 가장 하단의 계속을 클릭한다. 즉시 적용을 클릭하고, DB 인스턴스 수정을 클릭한다.
3. HeidiSQL 접속
세션을 하나 추가해서 호스트명/IP에 엔드포인트를 입력하고, 사용자와 암호는 DB를 생성하면서 입력했던 것을 입력한다.
초기에 생성한 데이터베이스 'project'가 있다. 잘 연결된 것을 확인할 수 있다.
4. 스프링부트 연동
application-secret.yml 파일에서 다음과 같이 DB 정보를 입력해준다.
필자는 초기 데이터베이스인 'project'를 생성했으므로 데이터베이스명에 project를 넣어주었다.
spring:
datasource:
url: jdbc:mariadb://엔드포인트:3306/데이터베이스명
username: 마스터사용자이름
password: 마스터사용자비밀번호
driver-class-name: org.mariadb.jdbc.Driver
application.yml 파일에서는 profiles include 해주면 된다.
spring:
profiles:
include: secret
jpa:
database-platform: org.hibernate.dialect.MariaDB103Dialect
properties:
hibernate:
globally_quoted_identifiers: 'true'
format_sql: true
messages:
encoding: UTF-8
logging.level:
org.hibernate.SQL: debug
서버를 실행하고 PostMan으로 확인해봤다.
테이블도 확인해보면 잘 저장된 것을 볼 수 있다.
5. EC2에서 접속
$ mysql -u 마스터유저이름 -p --host 엔드포인트
Enter password: 마스터유저비밀번호
show databases; 를 입력하면 초기 데이터베이스로 생성한 'project'가 있는 것을 볼 수 있다.