들어가며
이번시간에는 RDS에 대해 실습을 할 예정이다. 원래 프로젝트를 하면서 비용때문에 RDS 대신 EC2 서버에 DB를 설치해서 사용했었는데 이번 기회에 RDS 에 대해 공부하고 직접 설계하는 실습을 진행하였다.
RDS
RDS 는 Database Service이다.
AWS RDS 는 관계형 데이터베이스를 완전 관리형으로 제공하는 서비스(SaaS) 이다.
또한 RDS 서버 시스템에 직접 접속은 불가능하다.
그럼 왜 EC2 안에 DB를 설치하지않고 RDS 라는 기능이 있나?
대부분 VPC 내부에서 배치해서 사용하며 VPC 환경을 이용한 보안 환경 구성 외에도 IAM, Secret Manager 등의 서비스를 통해 DB 보안이 가능하다.
또한 DB의 경우는 데이터가 중요하기때문에 혹시 모를 상황을 대비해서 백업을 하는것이 정말 중요하다.
AWS 에서는 백업 방식이 2가지가 있다.
자동 백업
수동 백업
상황에 맞는 백업 방식을 사용해야 데이터를 안전하게 저장할 수 있다.
또한 실제로 DB는 읽기 작업이 가장 많이 사용된다. 그래서 AWS 에서는 대규모 트래픽에서 읽기 작업만 지원해주는 복제 데이터 베이스 RDS Read Replica 기능 있다.

다른 문제로는 DB를 만약 하나만 올렸는데 RDS가 고장나면 어떻게 되나이다. DB를 하나만 올렸는데 DB가 고장나면 시스템 자체를 사용할 수 없게 된다. 그래서 AWS 에서는 AWS RDS Multi AZ 라는 개념이 있다.
실습

위에 구성과 같이 DB 를 만들고 테스트 해볼 것이다.
DB 서브넷 그룹 생성
RDS → 서브넷 그룹 → DB 서브넷 그룹 생성

lab-edu-sub-db-01
lab-edu-sub-db-02

Aurora 생성(DB)
RDS → 데이터 베이스 → 데이터 베이스 생성
엔진 유형: Aurora (PostgreSQL Compatible)

자체 관리 항목 선택
버스터블 클래스(t 클래스 포함) → db.t3.mediumPerformance Insights 활성화 체크 해제Enhanced 모니터링 활성화 체크 해제데이터 베이스 생성 버튼 클릭
기본 설정으로 해도 월 예상 요금이 비싼것을 볼 수 있다.
DB 접속
DB도 별도의 접속툴이 필요해 Vscode 서버에서 접속
cd /Workshop/scripts/
sh install_postgresql_in_ubuntu24.04_lts.sh
RW이 가능한 엔드 포인트로 접속(Writer)

이때 일반 RDS 랑 Aurora의 구조가 다른것을 볼 수 있다.
일반 RDS 는 단일 인스턴스지만 Aurora는 클러스터 구조로 Writer endpoint + Reader endpoint 가 생긴다.
DB 접속
postgres@ip-10-0-1-211:~$ psql -U postgres -h (DB주소)
Password for user postgres:
psql (15.15 (Ubuntu 15.15-1.pgdg24.04+1), server 15.12)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=>
데이터 베이스 생성 / 계정 생성 / 권한 할당 / 데이터베이스 소유자 변경을 쿼리문으로 진행
예시)
create database trip_advisor;
create user "user" with password '1234';
grant all privileges on database trip_advisor to "user";
alter database trip_advisor owner to "user";

AWS 에서 RDS 콘솔에 가서 보면 EC2와 연결할 수 있는 기능이 있다.

Custom Parameter Group 생성 (DB 엔진의 설정값을 관리)
이때 파라미터 그룹은 Default와 Custom 으로 구분할 수 있다.
Custom Parameter Group 이용 timezone 설정
Parameter Group 생성
RDS 메인 콘솔 화면 → 파라미터 그룹 탭 → 파라미터 그룹 생성 버튼 클릭

Parameter 값 수정

db 클러스터 접속 → 수정

위 실습은 UTC 시간을 Asia/Seoul 로 바꾼것이다.

시간이 바뀐것을 볼 수 있다.
Read Replica 테스트
RDS 메인 콘솔 화면 → 데이터 베이스 탭 → lab-edu-rds-aurora 선택 → 작업 → 읽기 추가 클릭

기존에 RW가 가능한 엔드포인트로 들어가 DB에서 테이블을 생성 (RO 에서 확인용)
postgres@ip-10-0-1-211:~$ psql -U user -d trip_advisor -h (읽기쓰기DB DNS 주소)
Password for user user:
psql (15.15 (Ubuntu 15.15-1.pgdg24.04+1), server 15.12)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
trip_advisor=> CREATE TABLE attractions (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
location VARCHAR(255) NOT NULL,
average_rating VARCHAR(10),
photo_url VARCHAR(255)
);
CREATE TABLE
trip_advisor=> \dt
List of relations
Schema | Name | Type | Owner
--------+-------------+-------+-------
public | attractions | table | user
(1 row)
trip_advisor=>
new terminal 에서 읽기전용 엔드포인트로 접속해 아래 명령어를 수행
while true; do PGPASSWORD="" psql -h (읽기전용 DB 주소) -U user -d tri
p_advisor -c "select * from attractions;"; sleep 10; done
위 명령어는 while 반복문으로 10초마다 DB에 접속해서 SELECT를 실행하는 명령어이다.

동기화되어 읽기가 수행되는것을 볼 수 있다.
Aurora Cluster Failover 테스트
테스트하기전에 흐름을 알아보면 Aurora는 Writer에 장애가 나면 기존 Writer를 포기하고 Reader 중 하나를 승격해서 새 Writer로 만는것이다.
Writer / Reader Instance IP 정보 확인
데이터베이스 탭 → 데이터 베이스 클릭nslookup (RW DB 주소)
| grep -E "Address: 10\." | awk '{print $2}'
nslookup (읽기전용 DB 주소)
| grep -E "Address: 10\." | awk '{print $2}'
IP 주소를 각각 확인해보면
Writer = 10.0.81.146
Reader -10.0.80.181
while true; do
nslookup database-1.cluster-chk4aoiykvz0.ap-northeast-2.rds.amazonaws.com | grep -E "Address: 10\." | awk '{print $2}';
sleep 1;
done
위 명령어는 Writer 엔드포인트가 가리키는 사설 IP를 1초마다 출력하는것이다.
테스트를 위해 장애조치를 수동으로 해주면

장애 이후 Writer의 IP 주소가 바뀌는것을 볼 수 있다.

마무리
이번 시간에서는 RDS 에 대해 공부하고 실습을 통해 서비스가 어떤 흐름으로 이어지는지 확인할 수 있었다. RDS 가 제공해주는 이러한 기능들은 어떻게 써야할지 감을 잡을 수 있었고 추후에는 AWS DB가 아닌 Mysql, oracle 등 다른 디비 서비스를 사용해서 실습하는것도 진행해 볼 예정이다.