들어가기
프로젝트를 진행함에 있어서 가장 중요한 것 중 하나는 데이터베이스이다. 간단히 로컬에서 프로젝트를 진행할 때는 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. 시간 설정
우선 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/ 에서 다운로드할 수 있다.
자세한 설치방법 및 커넥션 방법은 아래를 참고하길 바란다.
https://shinysblog.tistory.com/20
커넥션을 만들때는 아래와 같은 형식이 주어진다.
위에 해당하는 값들을 입력해주고 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
https://velog.io/@u-nij/Spring-Boot-AWS-RDS-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0
'프로젝트 관련' 카테고리의 다른 글
React: react-router-dom:v6에서 경로 설정 및 PathVariable(경로 변수) 가져오기 (0) | 2023.06.10 |
---|---|
sprigboot 프로젝트 진행중 리펙토링 적용 (0) | 2023.04.01 |
Postman API를 통한 API 문서 작성 (0) | 2023.03.12 |
Jenkins를 활용한 React, Springboot CI,CD 구현(2) (0) | 2023.01.21 |
Jenkins를 활용한 React, Springboot CI,CD 구현(1) (0) | 2023.01.18 |