01
RDS란 — EC2에 직접 설치와 무엇이 다른가
EC2에 MySQL을 직접 설치해도 DB는 돌아갑니다. 그런데 패치, 백업, 장애 복구, 모니터링을 전부 직접 해야 합니다. RDS는 이걸 AWS가 대신해줍니다.
| 구분 | EC2 직접 설치 | RDS |
|---|---|---|
| OS 패치 | 직접 | AWS 자동 |
| DB 엔진 업그레이드 | 직접 | AWS 관리 (설정 가능) |
| 백업 | 직접 구성 | 자동 백업 (1~35일 보존) |
| 다중 AZ 장애 복구 | 직접 구성 복잡 | Multi-AZ 옵션 클릭 한 번 |
| 스토리지 자동 확장 | 없음 | Storage Auto Scaling |
| 비용 | EC2 요금만 | 인스턴스 + 스토리지 + 백업 |
02
RDS 비용 구조 — 함정 미리 알기
RDS는 중지해도 안전하지 않습니다
RDS 인스턴스를 중지(Stop)하면 최대 7일 후 자동으로 다시 시작됩니다. AWS 정책입니다. 완전히 멈추려면 삭제(Delete)만이 답입니다. 학습 후 삭제 필수.
RDS 인스턴스를 중지(Stop)하면 최대 7일 후 자동으로 다시 시작됩니다. AWS 정책입니다. 완전히 멈추려면 삭제(Delete)만이 답입니다. 학습 후 삭제 필수.
| 과금 항목 | 예시 | 주의 |
|---|---|---|
| 인스턴스 요금 | db.t4g.micro: 시간당 $0.018 | 켜진 시간만큼 |
| 스토리지 | gp2 $0.115/GB·월 | 삭제 전까지 |
| 백업 스토리지 | DB 크기 초과분 $0.095/GB·월 | 자동 백업 보존 기간 동안 |
| Multi-AZ | 인스턴스 요금 2배 | 스탠바이 인스턴스 별도 과금 |
| 스냅샷 | $0.095/GB·월 | 수동 스냅샷은 삭제 시까지 |
03
Aurora — 고성능 관리형 DB
Aurora는 AWS가 직접 만든 DB 엔진으로, MySQL과 PostgreSQL 호환입니다. 스토리지와 컴퓨팅이 분리돼 있어서 구조가 일반 RDS와 다릅니다.
🏗 Aurora 구조 — 클러스터와 인스턴스 분리
Aurora 클러스터
🖊 라이터 인스턴스
읽기·쓰기 모두 가능
📖 리더 인스턴스
읽기 전용 · 여러 개 가능
공유 스토리지 클러스터
3개 AZ × 2벌 = 6벌 복제 · 자동 복구
Aurora Serverless — 학습에 더 안전한 선택
Aurora Serverless v2는 최소 용량을 0 ACU로 설정하면 5분간 활동이 없을 때 자동으로 일시 중지돼 컴퓨팅 요금이 0이 됩니다. 기존 RDS처럼 켜둔 시간만큼 계속 과금되는 구조가 아닙니다.
학습 목적이라면 Aurora Serverless를 추천합니다
일반 RDS는 학습 중 잊어버리면 계속 과금됩니다. Aurora Serverless는 비활성화되면 컴퓨팅이 자동으로 0이 됩니다. 단, 스토리지 요금은 계속 나오니 삭제는 여전히 필요합니다.
일반 RDS는 학습 중 잊어버리면 계속 과금됩니다. Aurora Serverless는 비활성화되면 컴퓨팅이 자동으로 0이 됩니다. 단, 스토리지 요금은 계속 나오니 삭제는 여전히 필요합니다.
04
RDS Proxy — 커넥션 풀 문제 해결
Lambda나 Auto Scaling 환경에서는 동시에 수백 개의 DB 커넥션이 맺어질 수 있습니다. DB는 커넥션 수에 한계가 있어서 too many connections 오류가 납니다.
RDS Proxy는 애플리케이션과 DB 사이에서 커넥션 풀을 관리합니다. 애플리케이션은 Proxy에 연결하고, Proxy가 DB 커넥션을 효율적으로 재사용합니다.
파르나스 HikariCP 커넥션 풀 exhaustion과 연결
Parnas Rewards, TMS API에서 겪으셨던 HikariCP 커넥션 풀 소진 문제는 DB 커넥션 관리 문제입니다. RDS Proxy를 붙이면 애플리케이션 레벨의 HikariCP 설정 없이도 커넥션을 효율적으로 관리할 수 있습니다. 물론 HikariCP maxPoolSize와 DB의 max_connections 설정을 맞추는 것도 병행해야 합니다.
Parnas Rewards, TMS API에서 겪으셨던 HikariCP 커넥션 풀 소진 문제는 DB 커넥션 관리 문제입니다. RDS Proxy를 붙이면 애플리케이션 레벨의 HikariCP 설정 없이도 커넥션을 효율적으로 관리할 수 있습니다. 물론 HikariCP maxPoolSize와 DB의 max_connections 설정을 맞추는 것도 병행해야 합니다.
실습
RDS 생성 · Spring Boot 연결
생성 즉시 과금 시작 · 알람 설정 필수
실습 시작 전 휴대폰 알람을 30분으로 맞추세요. RDS는 생성에 5~10분 걸리고, 그 사이 다른 걸 하다 잊어버립니다. 하룻밤 방치하면 $5 이상 나옵니다.
실습 시작 전 휴대폰 알람을 30분으로 맞추세요. RDS는 생성에 5~10분 걸리고, 그 사이 다른 걸 하다 잊어버립니다. 하룻밤 방치하면 $5 이상 나옵니다.
생성 시 반드시 확인할 옵션
| 설정 | 선택값 | 이유 |
|---|---|---|
| 템플릿 | 프리 티어 (없으면 개발/테스트) | 최소 사양 보장 |
| 인스턴스 클래스 | db.t4g.micro 또는 db.t3.micro | 가장 저렴 |
| Multi-AZ | ❌ 아니요 | 2배 과금 방지 |
| 스토리지 자동 조정 | ❌ 비활성화 | 용량 자동 증가 = 비용 증가 |
| 퍼블릭 액세스 | ❌ 아니요 | 보안 · VPC 내부에서만 접속 |
| 백업 보존 기간 | 0일 (학습용) | 백업 스토리지 과금 방지 |
Spring Boot 연결 설정
⚙️ application.yml — RDS 연결
spring:
datasource:
url: jdbc:mysql://${DB_HOST}:3306/${DB_NAME}?serverTimezone=Asia/Seoul
username: ${DB_USER}
password: ${DB_PASS} # 환경변수로 주입, 절대 하드코딩 금지
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: validate
# HikariCP 설정 — DB max_connections와 맞추기
hikari:
maximum-pool-size: 10
connection-timeout: 30000
idle-timeout: 600000
⚠️ 삭제 체크리스트
순서대로 삭제하세요
- DB 인스턴스 삭제 (Aurora는 인스턴스 먼저, 그다음 클러스터)
- 삭제 시 "최종 스냅샷 생성" 체크 해제
- "자동 백업 보존" 체크 해제
- RDS 콘솔 → 스냅샷 → 수동/자동 탭 모두 확인 후 삭제
📌 CH06 핵심 개념 요약
RDS 장점패치·백업·장애복구 자동화. 운영 부담 감소
중지 ≠ 안전중지 후 7일이면 자동 재시작. 완전 종료는 삭제만
Aurora Serverless비활성 시 컴퓨팅 0. 학습에 더 안전한 선택지
RDS Proxy커넥션 풀 관리. Lambda·ASG 환경에서 too many connections 해결
스냅샷 주의삭제 시 스냅샷 생성 옵션 반드시 해제. 스냅샷도 별도 과금