
프로젝트를 하면서 데이터베이스를 클라우드에 올리기에는 로드 밸런싱이 되지 않고, 메모리를 많이 잡아 먹는것이 문제 였다. 이를 해결하기 위해 RDS를 써보자
AWS RDS란 관계형 데이터베이스(RDB) 를 간편하게 클라우드에서 설정, 운영, 확장이 가능하도록 지원하는 웹 서비스이다.
| 영역 | EC2에 직접 설치 | AWS RDS |
|---|---|---|
| 앱 최적화 | 직접 관리 | 직접 관리 |
| 스케일링 | 직접 관리 | 자동 관리 |
| 고가용성 처리 | 직접 관리 | 자동 관리 |
| DB 백업 | 직접 관리 | 자동 관리 |
| DB S/W 패치 | 직접 관리 | 자동 관리 |
| OS 패치/설치 | 직접 관리 | 자동 관리 |
| 서버 설치 및 정비 | 직접 관리 | 자동 관리 |
| 랙 & 스택 | 직접 관리 | 자동 관리 |
| 전력, 냉/난방 제어 | 직접 관리 | 자동 관리 |
즉, RDS는 EC2에 RDB를 직접 구축·운영할 때보다 훨씬 많은 부분을 자동으로 관리해주기 때문에 많이 애용된다.
RDS의 가장 큰 특징
Tip: AWS 프리티어로는 RDS를 12개월 동안 단일 AZ, db.t2.micro 인스턴스를 750시간 무료 사용할 수 있다.
RDS에서는 총 6개의 데이터베이스 엔진 중에서 원하는 DBMS를 선택할 수 있다.
| DB 엔진 | 특징 |
|---|---|
| Amazon Aurora | MySQL/PostgreSQL 호환, 표준 MySQL보다 5배, PostgreSQL보다 3배 빠름. 상용 DB 보안/가용성/안전성을 1/10 비용으로 제공 |
| PostgreSQL | 오픈 소스 RDB 중 기능과 성능이 가장 좋은 거의 원탑의 데이터베이스 |
| MySQL | 세계적으로 가장 많이 사용되는 오픈 소스 RDB |
| MariaDB | MySQL 개발자가 만든 오픈 소스 RDB, MySQL 업그레이드 판 |
| Oracle | 오라클사의 유료 RDB |
| MS SQL Server | Microsoft의 RDB |
또한 AWS Database Migration Service를 사용하여 기존 데이터베이스를 Amazon RDS로 손쉽게 마이그레이션 또는 복제할 수 있다.
original인 반면, 복원된 것은 앞에 restored가 붙는다.원본: original.ap-northeast-2.rds.amazonaws.com
복원: restored.ap-northeast-2.rds.amazonaws.com
복구 시에는 새로운 DB를 만들고 기존 DB 연결을 끊고 새로 만든 DB에 연결해주는 작업이 필요하다.
AWS RDS는 데이터베이스를 효율적으로 관리할 수 있게 하는 인프라 아키텍처 3가지를 제공한다.
| 구분 | Multi-AZ | Multi-Region | Read Replica |
|---|---|---|---|
| 목적 | 고가용성 | DR / 로컬 퍼포먼스 | 확장성 / 성능 |
| 복제 방식 | Sync (동기) | Async (비동기) | Async (비동기) |
| 액티브 | Primary DB만 읽기/쓰기 가능 | Read만 가능 | Read만 가능 |
| 백업 | 자동 백업(Standby 기준) | 자동 백업 가능 | 기본적으로 백업 X |
| 엔진 업데이트 | Primary만 업데이트 | 각 리전별로 다른 업데이트 | DB별로 다른 업데이트 |
| FailOver | 자동으로 Standby로 Failover | 수동으로 Failover | 수동으로 Failover |
RDS Multi-AZ는 2개 이상의 AZ에 걸쳐 데이터베이스를 구축하고 원본과 다른 DB(Standby) 를 자동으로 동기화(Sync) 하는 구조이다.
[User]
↓
[VPC]
├── Availability Zone 1
│ └── AWS RDS (Primary) - Instance + EBS
│ ↓ Sync 복제
└── Availability Zone 2
└── AWS RDS (Standby) - Instance + EBS

Multi-AZ는 고가용성(HA) 목적이고, Read Replica는 읽기 성능 향상 목적이라는 점을 명확히 구분해야 한다.


| 템플릿 | 설명 |
|---|---|
| 프로덕션 | 멀티 AZ 지원, 고가용성/성능 |
| 개발/테스트 | 싱글 RDS 인스턴스 |
| 프리 티어 | 무료 사용 (단일 AZ) |
MyDB)admin)
인스턴스 클래스는 3가지 종류가 있다.
| 용도 | 인스턴스 클래스 | 내용 |
|---|---|---|
| 표준 | db.m5 등 | 범용적인 인스턴스 클래스 |
| 메모리 최적화 | db.x1e, db.x1, db.r5 등 | 메모리를 많이 사용하는 애플리케이션에 최적화 |
| 버스트 성능 | db.t3 등 | CPU 최대 사용률까지 버스트 성능으로 사용 가능 |
프리티어는 보통
db.t3.micro(2 vCPUs, 1 GiB RAM) 사용
RDS 인스턴스도 일종의 EC2이기 때문에 EBS 스토리지가 필요하다.
| 스토리지 유형 | 특징 |
|---|---|
| 범용(SSD) | 일반적인 워크로드에 적합 (gp2/gp3) |
| 프로비저닝된 IOPS(SSD) | 고성능 워크로드, IOPS 직접 지정 |
| 마그네틱 | 가장 저렴, 권장되지 않음 |

RDS 인스턴스도 일종의 EC2이기 때문에, 위치할 VPC를 설정해주어야 한다.
| 설정 항목 | 설명 |
|---|---|
| VPC / 서브넷 그룹 | VPC가 구성되어 있다면 선택, Default 사용 가능. EC2와 연동 시 동일한 곳에 설치하는 것이 일반적 |
| 퍼블릭 액세스 가능 | DB 인스턴스에 공인 IP 할당 여부. 외부에서 MySQL Workbench 접속 예정이면 활성화 |
| VPC 보안 그룹 | 인/아웃바운드 규칙이 정의된 보안 그룹 설정 |
| 포트 | MySQL 기본 포트인 3306 사용 |




-다음과 같이 생성이 완료 되는것을 볼수 있다.

RDS는 인스턴스에 직접 SSH로 접속할 수 없기 때문에, 파라미터 그룹을 통해 우회적으로 DB 설정값을 적용한다.
실제 프로젝트에서 자주 변경하게 되는 대표적인 3가지 설정을 정리해본다.
먼저 기본값을 그대로 사용하지 않고, 새로운 파라미터 그룹을 생성해야 한다.
(기본 파라미터 그룹은 수정 불가능하기 때문)
aurora-mysql5.7, mysql8.0)mysql-custom-paramgroup)

RDS는 기본적으로 UTC 기준으로 동작하기 때문에, 한국 서비스라면 반드시 Asia/Seoul로 변경해줘야 한다.
파라미터: time_zone
값: Asia/Seoul
time_zone 입력Asia/Seoul 선택타임존을 설정하지 않으면
CREATED_AT,UPDATED_AT같은 컬럼이 9시간 차이가 나서 디버깅 시 큰 혼란을 준다.
한글 데이터가 깨지지 않고 잘 출력되게 하려면 utf-8 인코더를 설정해줘야 한다.
char 검색 후 나오는 모든 부분의 값을 utf8mb4 로 설정한다.
| 파라미터 | 값 |
|---|---|
character_set_client | utf8mb4 |
character_set_connection | utf8mb4 |
character_set_database | utf8mb4 |
character_set_results | utf8mb4 |
character_set_server | utf8mb4 |
character_set_filesystem | utf8mb4 |
💡 Tip - utf8 vs utf8mb4
utf8과utf8mb4모두 한글이 깨지지 않게 인코딩해주지만 차이가 있다.utf8은 이모지를 저장할 수 없지만,utf8mb4는 이모지를 저장할 수 있다.utf8은 가변 3바이트를 사용하는 반면,utf8mb4는 내부적으로 한 문자를 표현하는데 4바이트를 사용한다.- 따라서 3바이트만 사용하는
utf8은 이모지를 저장할 수 없다.
collation을 검색하여 collation 부분을 모두 utf8mb4_general_ci 로 바꿔준다.
| 파라미터 | 값 |
|---|---|
collation_connection | utf8mb4_general_ci |
collation_server | utf8mb4_general_ci |
collation_connection: connection character set의 collationcollation_server: server의 default collation새로 만든 파라미터 그룹은 자동으로 적용되지 않는다. RDS 인스턴스에 명시적으로 연결해줘야 한다.
default.mysql8.0 → mysql-custom-paramgroup
최하단 [계속] 버튼을 누르면 수정 사항 요약이 나온다.
여기서 반영 시점을 선택해야 한다.
| 옵션 | 설명 |
|---|---|
| 예약된 다음 유지 관리 기간에 적용 | 새벽 유지 관리 시간대에 진행 (서비스 운영 중일 때 권장) |
| 즉시 적용 ✅ | 지금 바로 반영 (개발/구축 단계에서 사용) |
주의: 즉시 적용 시 데이터베이스가 잠시 작동하지 않을 수 있기 때문에 운영 환경에서는 예약 적용을 권장한다.
다만 아직 서비스가 오픈되지 않은 구축 단계라면 즉시 적용을 선택해도 무방하다.
적용이 완료되면 상단에 "파라미터 그룹 ○○○ 수정 완료" 메시지와 함께 인스턴스 상태가 사용 가능으로 표시된다.
RDS는 기본적으로 VPC 내부에서만 접근 가능하지만, 개발 중에는 로컬 PC에서 MySQL Workbench로 직접 접속해서 데이터를 확인하는 일이 많다.
먼저 방금 생성한 데이터베이스에 들어가서 연결 & 보안 탭의 엔드포인트 DNS 주소를 복사해둔다.
예시: mydb.cauufra5fcmt.ap-northeast-2.rds.amazonaws.com
포트: 3306
이 엔드포인트를 통해서 워크벤치에서 AWS로 데이터베이스를 연결하여 마치 원격 조작을 행할 수 있다.
외부에서 접속하려면 두 가지 설정이 모두 켜져 있어야 한다.

EC2 → 보안 그룹 → 해당 RDS 보안 그룹 선택 → 인바운드 규칙 편집
| 유형 | 프로토콜 | 포트 범위 | 소스 |
|---|---|---|---|
| MySQL/Aurora | TCP | 3306 | 내 IP (예: 211.214.138.103/32) |
⚠️ 주의: 내 IP를 지정해주어야 한다. IP가 유동적으로 변하니 이 점을 유의하도록 하자.
(공유기/통신사에 따라 IP가 바뀔 수 있어, 접속 안 되면 IP를 다시 확인해야 한다.)
+ 버튼 클릭Rds-recycleDB)3306admin)파라미터 그룹에서 utf8mb4로 설정한 것이 잘 적용되었는지 테스트해본다.
use testDB;
create table test (
id bigint(20) NOT NULL auto_increment,
content varchar(255) default NULL,
primary key(id)
) engine = innoDB;
insert into test(content) values('한글 테스트');
select * from test;
결과로 한글 테스트가 깨지지 않고 정상 출력되면 성공이다.

기존에 로컬에서 개발하던 DB를 그대로 RDS로 옮기는 작업이다.
가장 쉬운 방법은 MySQL Workbench의 Export/Import 기능을 사용하는 것이다.
먼저 내 컴퓨터에 있는 데이터를 SQL 파일로 추출해야 한다.
Export to Self-Contained File 선택하고 저장 경로 기억.sql 파일 생성 완료예시 경로: C:\Users\saeyu\Documents\dumps\Dump20260222.sql

이제 방금 만든 SQL 파일을 클라우드 위(RDS)로 쏘아 올릴 차례이다.
Import from Self-Contained File 선택하고, 1단계에서 만든 SQL 파일을 불러오기
| 단계 | 위치 | 메뉴 | 옵션 |
|---|---|---|---|
| 1. Export | Local Instance MySQL80 | Server → Data Export | Export to Self-Contained File (.sql 저장) |
| 2. Import | RDS Connection | Server → Data Import | Import from Self-Contained File (.sql 불러오기) |