본문 바로가기
프로젝트 관련

AWS RDS를 통한 관계형 데이터베이스 구축 및 springboot 연동

by khds 2023. 2. 22.

 

들어가기

 

프로젝트를 진행함에 있어서 가장 중요한 것 중 하나는 데이터베이스이다. 간단히 로컬에서 프로젝트를 진행할 때는 h2를 사용하였고 배포까지 진행할 때는 배포서버 내부에 mariaDB를 설치하여 데이터를 삽입하였다. 그렇다면 aws 프리티어를 사용하고 있을 때는 어떻게할까?

프리티어로 진행한 서버는 내부 용량이 적기 때문에 데이터베이스 크기도 작을 수 밖에 없고 한눈에 데이터들을 파악하기도 힘들다. 그리고 배포 서버에 문제가 생기면 데이터베이스에 접근할 수 없다는 문제도 있다. 이럴때 유용한 것이  aws rds이다. 

aws rds는 aws에서 rds 전용 서버를 제공을 해주는 서비스이다. 즉, 배포서버에서 데이터를 rds 서버로 저장을 시켜서 데이터를 굳이 배포서버에 저장할 필요가 없어진다. 배포서버와 데이터베이스 서버가 독립되어 존재하는 것이다.

 

그렇다면  aws rds는 어떻게 사용할까?  

이 글에서는 프로젝트 진행을 위해 aws rds를 구축후 springboot에서 데이터베이스를 구축한 rds로 연결하는 과정만을 담는다. 

 

과정은 크게 아래와 같다.

 - RDS 구축(MySQL)
 - 보안그룹 설정
 - 시간/UTF8 설정
 - MySQLWorkBench 연결
 - SpringBoot 프로젝트 연동

 

 

 

RDS 구축(MySQL)

 

먼저 aws RDS에 들어가서 아래 사진과 같이 데이터베이스 생성을 누른다.

 

 

아래와 같이 데이터베이스를 선택할 수 있다. 나는 자주사용하는 MySQL을 선택하였다.

 

 

프리티어를 사용중이기에 프리티어를 선택하였다.

 

 

그 다음 db 설정 정보를 원하는데로 입력해준다.

 

인스턴스와 스토리지는 아래와 같이 입력한다. 스토리지 용량은 프리티어에서는 최대 20GB이다.

 

그 다음 연결 부분에서는 외부에서 데이터베이스에 접속할 수 있도록 퍼블릭 액세스 가능을 '예'로 설정한다.

 

이후 데이터베이스 인증 방식을 선택한다. 

 

추가 구성에서 초기 데이터베이스 이름만 설정하면 완료이고 데이터베이스 생성을 눌러준다. 이후 시간이 지나고 나면 데이터베이스가 생성된다. 

 

데이터베이스가 생성된 이후에 추가적으로 설정해 줘야하는 것들이 있다.

 

 

보안그룹 설정

 

먼저 내 컴퓨터에서만이 아니라 ec2에서도 rds에 접속이 가능하게 해야한다. 그러기 위해서는 생성한 보안그룹으로 들어가서 인바운드 규칙 편집을 클릭한다. 

 

아래 와 같이 뜰 것이다. 첫번째 Id 는 자신의 컴퓨터 IP이고 기본적으로 설정이 되어있다. ec2에서 rds에 접근하기 위해서는 추가적인 규칙을 만들어 줘야 한다. 아래와 같이 보안그룹에서 ec2가 연결되어있는 보안그룹을 클릭하여 적용해주고 규칙 저장을 클릭하면 된다.

 

 

시간/UTF8 설정

 

다음에 해줘야 하는 작업이 시간 및 UTF8 을 설정하는 것이다. 우선 파라미터 그룹으로 들어간다.

 

 

파라미터 그룹 생성을 클릭한다. 

 

이름을 설정하고 생성을 클릭한다. default 그룹은 수정이 불가능하기에 새로 만들어 줘서 수정을 해야한다.

 

이후 생성된 파라미터 그룹내에서 여러 값들을 수정해줘야한다. 

  1. 시간 설정
  2. 한글 설정

 

1. 시간 설정

 

우선 time_zone으로 검색하고 우측에 파라미터 편집을 클릭한다.

 

이후 아래와 같이 Asia/Seoul 로 설정을 해주고 변경사항 저장을 클릭한다. 

 

2. 한글 설정

character_set_client
character_set_connection
character_set_database
character_set_filesystem
character_set_results
character_set_server

 

위의 값들을 모두 UTF8로 바꿔줘야 하기에 character_set로 검색한다.

 

모두 utf8 혹은 utf8mb4로 설정 후 저장한다.  utf8과 utf8mb4는 둘 다 한글이 깨지지 않도록 인코딩해주지만 차이가 있다. utf8은 이모지를 저장할 수 없지만 utf8mb4는 이모지를 저장할 수 있다. 

이후 collation으로 검색하여 utf8_general_ci 혹은 utf8mb4_general_ci로 수정하고 저장한다. 

 

 

이후 생성해둔 데이터베이스 수정창으로 들어가서 파라미터 그룹을 생성한 그룹으로 변경후 저장한다. 그리고 데이터베이스 재부팅을 하면 완료된다. 

 

MySQLWorkBench 연결

 

MySQLWorkBench는 https://dev.mysql.com/downloads/workbench/ 에서 다운로드할 수 있다.

 

MySQL :: Download MySQL Workbench

Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Red Hat Enterprise Linux / Oracle Linux Fedora macOS Source Code Select OS Version: All Windows (x86, 64-bit) Recommended Download: Other Downloads: Windows (x86, 64-bit), M

dev.mysql.com

 

 

자세한 설치방법 및 커넥션 방법은 아래를 참고하길 바란다.

https://shinysblog.tistory.com/20

 

MySQL(workbench) 다운로드 및 설치 방법

MySQL 다운로드와 workbench를 설치하는 방법을 알려드리겠습니다. dev.mysql.com/downloads/windows/installer/8.0.html MySQL :: Download MySQL Installer Select Operating System: Select Operating System…..

shinysblog.tistory.com

 

커넥션을 만들때는 아래와 같은 형식이 주어진다.

 

위에 해당하는 값들을 입력해주고 Test Connection을 클릭하고 설정한 비밀번호를 입력하면 접속할 수 있다.

엔드포인트는 아래의 위치에서 확인할 수 있다. 

 

Test Connection에 성공하면 아래와 같은 창이 떠진다. 

 

이후 OK를 눌러 생성하고 접속하면 아래와 같이 나오는 것을 볼 수 있다.

 

 

SpringBoot 프로젝트 연동

 

gradle 기준으로 진행하겠다. sprintboot mysql 의존성을 추가한 뒤 

runtimeOnly 'com.mysql:mysql-connector-j'

 

application.properties 파일에 아래의 코드를 추가한다.

spring.profiles.active=rds

 

그리고 application-rds 파일을 resouces 폴더내에 생성 후 아래의 코드를 작성한다.

spring.datasource.url=jdbc:mysql://spring.datasource.url=jdbc:mysql://{엔드포인트}:{포트번호}/{(초기)데이터베이스}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username={사용자 이름}
spring.datasource.password={비밀번호}

 

위와 같이 파일을 분리한 이유는 github 같은 곳에 프로젝트를 올릴 때 aws 계정정보는 올리면 안되는 정보이기에 따로 분리시키는 것이다. application-rds는 .gitignore 파일에 아래와 같이 적어주기만 하면 된다. 

application-rds.properties

 

Run(실행)했을 때 잘 돌아가면 연동은 끝이다.

 

 

참고

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱

https://luminitworld.tistory.com/94

 

3. AWS RDS 구축 (MySQL)

(1) 데이터 베이스의 분리 앞서 AWS EC2를 구축했을 때 EC2 안에 데이터 베이스 MySQL을 설치하고, EC2에서 데이터베이스를 사용하였습니다. 물론 EC2의 서버에 데이터 베이스를 구축해도 당장에는 문

luminitworld.tistory.com

 

https://velog.io/@u-nij/Spring-Boot-AWS-RDS-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

 

Spring Boot + AWS RDS (MySQL) 연동하기

Spring Boot + AWS RDS를 연동하고, 시간 및 언어 설정을 하는 과정입니다.

velog.io

 

https://intrepidgeeks.com/tutorial/existing-ipv4cidr-rules-cannot-specify-the-group-id-of-the-reference-target

 

기존 IPv4CIDR 규칙에서는 참조 대상의 그룹 ID를 지정할 수 없습니다.

【AWS CloudFormation 디자이너】 VPC를 만들려고 하면 Property CidrBlock cannot be empty. 에러가 나왔다. GUI 형식으로 AWS CloudFormation 템플릿을 생성, 참조, 변경할 수 있습니다. 템플릿 리소스로 만들고 싶은

intrepidgeeks.com

 

https://stackoverflow.com/questions/30074492/what-is-the-difference-between-utf8mb4-and-utf8-charsets-in-mysql

 

What is the difference between utf8mb4 and utf8 charsets in MySQL?

What is the difference between utf8mb4 and utf8 charsets in MySQL? I already know about ASCII, UTF-8, UTF-16 and UTF-32 encodings; but I'm curious to know whats the difference of utf8mb4 group of

stackoverflow.com