AWS (RDS)

엄경문·2026년 1월 17일

AWS

목록 보기
4/10

들어가며

이번시간에는 RDS에 대해 실습을 할 예정이다. 원래 프로젝트를 하면서 비용때문에 RDS 대신 EC2 서버에 DB를 설치해서 사용했었는데 이번 기회에 RDS 에 대해 공부하고 직접 설계하는 실습을 진행하였다.

RDS

RDS

RDS 는 Database Service이다.
AWS RDS 는 관계형 데이터베이스를 완전 관리형으로 제공하는 서비스(SaaS) 이다.
또한 RDS 서버 시스템에 직접 접속은 불가능하다.

그럼 왜 EC2 안에 DB를 설치하지않고 RDS 라는 기능이 있나?

  • 장애조치를 위한 다양한 기능들은 AWS 에서 제공한다.
  • 하드웨어 프로비저닝, OS & DB 설치 및 패치, 백업 등 운영관리를 지원한다.

대부분 VPC 내부에서 배치해서 사용하며 VPC 환경을 이용한 보안 환경 구성 외에도 IAM, Secret Manager 등의 서비스를 통해 DB 보안이 가능하다.


백업

또한 DB의 경우는 데이터가 중요하기때문에 혹시 모를 상황을 대비해서 백업을 하는것이 정말 중요하다.
AWS 에서는 백업 방식이 2가지가 있다.

자동 백업

  • 스냅샷과 트랜잭션 로그를 참고해서 데이터를 백업하는 방식
  • 자동 백업 기능은 Default 로 활성화
  • Retention Period 기간 내 특정 시점 데이터 상태로 복구가 가능
  • 원본 DBMS 가 삭제되면 같이 삭제된다
  • 백업 프로세스 시작 시 단일 AZ 환경은 일시적인 중단, 다중 AZ 환경은 무중단

수동 백업

  • 사용자가 수동으로 원하는 시점에 스냅샷을 생성하는 방식
  • 원본 DBMS가 삭제되도 스냅샷은 삭제 되지 않고 S3에 보관
  • 백업 프로세스 시작 시 단일 AZ 환경은 몇초에서 몇분정도 중단, 다중 AZ 환경은 일시적인 중단
  • 스냅샷은 다른 리전으로 복제하거나 다른 계정에게 공유 가능

상황에 맞는 백업 방식을 사용해야 데이터를 안전하게 저장할 수 있다.


또한 실제로 DB는 읽기 작업이 가장 많이 사용된다. 그래서 AWS 에서는 대규모 트래픽에서 읽기 작업만 지원해주는 복제 데이터 베이스 RDS Read Replica 기능 있다.

RDS Read Replica

  • 대규모 서비스 트래픽을 분산하기 위해 읽기 작업만 지원(select 만 가능)
  • 최대 15개의 읽기 전용 복제 본을 리전, 가용영역에 걸쳐 구성
  • 읽기 전용 복제본은 원본 DB 시스템이 다운될 경우 독립된 DB 인스턴스로 수동 승격 가능

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


AWS RDS Multi AZ

  • Write 데이터베이스 Active-StandBy 형태 이중화 구성으로 장애 대비 자동 복구 대응
  • Read Replica의 쓰기 전용 데이터베이스 승격과 유사하지만 다운타임 없음
  • 예비용 인스턴스를 하나더생성해두기때문에 실제 서비스되고 있지않은 StandBy 시스템이지만 기존대비 비용이 2배 로증가
  • Multi AZ를 구성하면Read Replica 처럼 성능향상의 이점을보지는못하며 고가용성을 확보하기 위한 옵션

AWS RDS Storage Auto-Scaling

  • 운영관리 과정에 디스크가 부족해지는 경우 자동으로 용량을 확장할 수 있도록 지원하는 기능
  • 전체 용량 중 여유 공간이 10% 미만인 상태가 5분간 지속되고 지난6시간 동안 저장소가 변경된 이력이 없을 경우 자동으로 확장

실습

위에 구성과 같이 DB 를 만들고 테스트 해볼 것이다.


DB 서브넷 그룹 생성
RDS → 서브넷 그룹 → DB 서브넷 그룹 생성

  • 이름: lab-edu-subgroup-aurora
  • VPC: lab-edu-vpc-ap-01
  • 가용영역:
    • ap-northeast-2a
    • ap-northeast-2c
  • 서브넷:
    • lab-edu-sub-db-01

    • lab-edu-sub-db-02


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

  • Aurora PostgreSQL 15.12
  • 템플릿: 개발/테스트
  • DB 클러스터 식별자: database-1
  • 마스터 사용자 이름: postgres
  • 자체 관리 항목 선택
  • 마스터 암호:
  • 마스터 암호 확인:

  • 인스턴스 구성: 버스터블 클래스(t 클래스 포함) → db.t3.medium
  • 다중 AZ 배포: Aurora 복제본 생성하지 않음 (비용)
  • VPC: lab-edu-vpc-ap-01
  • DB 서브넷 그룹: lab-edu-subgroup-aurora
  • 퍼블릭 액세스: 아니오
  • 보안그룹: lab-edu-sg-aurora
  • 성능 개선 도우미: Performance 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 으로 구분할 수 있다.

  • Default Parameter Group : RDS에서 기본 제공하며 수정 불가
  • Custom Parameter Group : 사용자가 생성하고 커스터마이징 가능

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 정보 확인

  • RDS 메인 콘솔 화면 → 데이터베이스 탭 → 데이터 베이스 클릭
  • writer reader 주소 찾아서 Vscode server에서 검색 (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 등 다른 디비 서비스를 사용해서 실습하는것도 진행해 볼 예정이다.

0개의 댓글