Infra/Aws

[Aws] 프리티어 Aws RDS를 이용해보자

kth990303 2023. 1. 27. 16:30
반응형

Aws에서는 클라우드에서 간편하게 데이터베이스를 설치, 운영 및 확장할 수 있는 관리형 서비스인 Relational Database Service(이하 RDS)를 제공해준다. 즉, EC2 인스턴스에 DB를 직접 설치하고 운영할 필요 없이 RDS를 사용하여 관리를 클라우드에 위임할 수 있는 것이다. 이번 포스팅에선 프리티어를 이용하여 RDS를 생성하는 방법을 기록해보려 한다.


RDS 사용 이유

1. aws ec2 프리티어 용량이 작아서

가장 큰 이유다. aws ec2 프리티어는 ec2를 최대 1개, 그마저도 용량은 RAM 1GB까지만 지원해준다.

따라서 서버 배포용 ec2 외에 별도로 DB 인스턴스를 생성할 수가 없으며, 서버 ec2에 mysql을 설치하고 운영했다간 서버가 터질 것이 뻔하다. 스토리지 용량은 30Gib 까지 지원해준다 하더라도, mysql이 기본적으로 차지하는 RAM 용량이 좀 크다.

 

심지어 jar 파일을 단순 빌드 및 배포하는 데에도 저 사양으론 부족해서 swap 메모리를 땡겨서 사용하고 있다.

swap 메모리 땡기는 방법은 https://kth990303.tistory.com/361 를 참고하자.

 

그렇기 때문에 aws 프리티어 지원 범위에 포함되는 RDS를 이용하여 DB 관리비용과 메모리 부담을 줄이려 한다.

 

 

2. DB 관리를 자동으로 해주기 때문에

RDS는 위에서도 말했다시피 클라우드 환경 내에서 DB 운영 및 확장, 관리를 할 수 있다.

RDS 설정 화면 일부

RDS 데이터베이스를 생성할 때 백업, 로그 관리, 유지 관리 및 버전 업그레이드 사용 유무를 설정할 수 있다.

관리 생산성 비용이 부담된다면 RDS는 좋은 선택지가 될 수 있다. (다만 프리티어가 아니면 그만큼 경제적 비용이 추가로 든다는 점은 유의하자.)

 

3. RDS 경험을 쌓기 위해

많은 기업들이 Aws RDS를 사용하고 있다.

스타트업 개발자 모집 백엔드 우대사항에 rds가 포함돼있다

나는 RDS 경험이 없기 때문에 학습용으로 RDS 경험을 쌓아보려고 하는 것도 있다.


Aws RDS 데이터베이스 생성

 

EC2 인스턴스 생성 및 인바운드 보안 그룹 설정은 이미 완료됐다고 가정한다.

 

Aws 서비스에서 RDS를 클릭해주면 위 화면이 보인다.

데이터베이스 생성을 눌러주자.

 

RDS 프리티어를 사용하기 위해서는 손쉬운 생성 대신 표준 생성을 눌러주어야 한다.

 

DB 인스턴스명은 자신이 식별할 수 있도록 알아서 잘 작성해주면 된다.

마스터 사용자 이름, 마스터 암호는 RDS에 처음 접속할 때 필요한 루트계정이므로 반드시 기억하거나 따로 메모해주도록 하자.

 

네트워크 CIDR 표기법은 IPv4를 선택해주었다. 웬만해선 IPv4를 사용해주면 된다.

일단 나는 아직까진 IPv6 CIDR 표기법으로 사용하는 경우를 한 번도 못봤다.

 

VPC는 기존에 있던 것을 사용하도록 했다.

 

퍼블릭 엑세스는 YES로 설정해주었다. YES로 해주어야 외부(로컬 외의 다른 PC) 접속이 가능하다.

ec2 인스턴스 역시 로컬이 아닌 별도의 서버이기 때문에 서버 ec2에서 RDS에 접속하려면 퍼블릭 엑세스를 허용해주어야 한다.

 

초기 데이터베이스 이름을 자신이 원하는대로 세팅해주자.

작성 안하면 안내돼있는대로 데이터베이스를 생성해주지 않기 때문에 조금 귀찮아진다.

(근데 작성 안해도, RDS에 접속해서 create schema 또는 create database 해주면 되긴 한다.)

 

나는 aws cloudwatch (모니터링 툴이라 생각하면 된다.) 를 사용하진 않을 거라서 체크 해제된 상태 그대로 냅뒀다.

마이너 버전 자동 업그레이드 사용 - 나는 그대로 놔뒀다. 버전 충돌 이슈를 방지하기 위함이다. 

삭제 방지 활성화는 쫄리기 때문에 체크해주었다.

 

자, 여기까지 하면 RDS database가 생성될 것이다.

상태를 보면 생성 중임을 확인할 수 있다. 나의 경우, 완전히 생성되기까지는 약 5분 정도가 소요됐다.

 

생성되기까지 추가로 해주어야 할 작업이 있다.


RDS 파라미터 그룹 생성 및 설정

아직 끝난 것이 아니다.

DB timezone을 Asia/Seoul, character set을 utf4mb4로 바꿔주는 작업을 해주어야 한다.

한국 시간 기준으로 DB 시간을 세팅해주고 utfmb4로 캐릭터셋을 설정하여 이모지까지 db에 저장될 수 있도록 해주는 것이다.

 

 

파라미터 그룹 생성

왼쪽 메뉴에서 `파라미터 그룹`을 클릭해준 후, 파라미터 그룹을 생성해주자.

위에서 말한 DB timezone, character set 정보를 세팅하는 그룹이라 생각하면 된다.

그룹 이름은 자신이 알아볼 수 있게 잘 지어주면 된다.

 

time_zoneAsia/Seoul로 세팅해주고,

아래 파라미터 정보들을 utf8mb4로 세팅해주자.

  • character_set_client
  • character_set_connection
  • character_set_database
  • character_set_filesystem
  • character_set_results
  • character_set_server

 

이제 다시 RDS 데이터베이스를 클릭하여 우리가 설정한 파라미터 그룹으로 적용하기 위해 데이터베이스를 수정해주자.

데이터베이스 수정을 클릭하여 밑으로 쭉 내리면 `추가 구성`에 DB 파라미터 그룹을 설정하는 부분이 있다.

거기서 우리가 설정한 파라미터 그룹으로 세팅해주고, 아래로 내려서 계속을 눌러주자.

 

즉시 적용을 눌러주어 DB 인스턴스를 수정하자.


RDS 인바운드 보안 그룹 규칙 설정

DB 생성은 무사히 끝이 났다.

이제 데이터베이스에 접속하기 위한 설정들만 하면 된다.

 

아래 설정을 하지 않으면 DB에 접속할 수 있는 IP가 한정되므로 꼭 유의하자.

 

VPC 보안 그룹을 클릭해주자.

 

여기서 우측 하단에 보이는 인바운드 규칙 편집을 클릭해주자.

 

이렇게 규칙을 추가해주고 저장하면 된다.

이 설정을 하지 않으면 처음 데이터베이스를 생성한 IP에서만 접속이 가능하게 된다.

어디에서든 DB에 접속할 수 있도록 0.0.0.0/0 으로 세팅해주었다.

 

IPv4만 세팅해주면 될 것 같긴 한데, 혹시나 해서 IPv6 CIDR에서도 ::/0으로 세팅해주었다.

 

이제 규칙 저장을 해주면 자동으로 해당 RDS DB에 인바운드 규칙이 적용된다.


RDS 데이터베이스 접속

이제 우리가 만든 RDS 데이터베이스에 접속해보자.

접속하기 위해선 DB 엔드포인트, 포트, RDS를 생성하면서 입력했던 마스터 계정 정보 (이름, password)가 필요하다.

엔드포인트는 여기서 볼 수 있다

datasource url이 엔드포인트와 포트로 구성되기 때문이다.

 

url은 아래와 같다.

jdbc:mysql://{엔드포인트}:{포트번호}/{데이터베이스}

 

접속 성공

엔드포인트, port를 설정해주고 루트계정 정보를 입력해주면 로컬 또는 EC2에서 접속이 가능하다.

나의 경우 datagrip IDE에서 접속을 해보았으며, 성공적으로 접속된 것을 확인했다.


확실히 mysql 대신 RDS를 사용하니까 프리티어 ram이 잘 버텨주고 있는 것을 확인할 수 있다.

(프리티어 ram이 진짜 약한게, 나는 docker + spring boot bootJar 및 배포만 해주고 있는데도 불구하고 swap memory가 없으면 뻗기 직전이라는 점...)

 

다음 포스팅은 도커 이미지 배포 및 Spring Boot + Docker + Aws RDS 연동하는 것을 작성할 예정이다.

반응형