7편. RDS 생성 — 프라이빗 서브넷에 MySQL DB 만들기

시리즈: AWS로 웹 서버 + DB 직접 구축하기 (VPC 완전 정복) | 7편 / 15편

지난 편에서 Nginx를 설치하고 브라우저로 웹 서버 접속까지 확인했어요. 이번 편에서는 프라이빗 서브넷에 RDS(MySQL 데이터베이스) 를 만들어볼 거예요.


RDS란?

RDS(Relational Database Service)는 AWS의 관리형 데이터베이스 서비스 예요.

MySQL, PostgreSQL, MariaDB 등 관계형 DB를 직접 EC2에 설치하고 관리하는 대신, AWS가 대신 관리해줘요.

AWS가 자동으로 해주는 것들:

  • OS 패치 및 업데이트
  • 정기 자동 백업
  • 장애 발생 시 자동 복구
  • 모니터링 및 알람

우리는 그냥 DB를 사용하는 데만 집중하면 돼요!

💡 EC2에 MySQL을 직접 설치하면 안 되나요? 물론 가능해요. 하지만 RDS를 쓰면 관리 부담이 훨씬 줄어들어요. 백업, 업데이트, 장애 복구 등을 직접 챙기지 않아도 되니까요. 비용이 조금 더 들지만 대부분의 경우 RDS가 더 나아요.


RDS를 프라이빗 서브넷에 두는 이유

DB는 절대로 인터넷에 직접 노출되면 안 돼요.

Public access: Yes 로 설정하면 인터넷에서 DB에 직접 접근할 수 있어요. 이렇게 하면 전 세계의 해커들이 3306 포트로 접속을 시도해요. 정말이에요.

그래서:

  • RDS → 프라이빗 서브넷에 위치
  • Public access: No 설정
  • rds-sg로 EC2에서만 접근 허용

DB 서브넷 그룹 만들기

RDS를 만들기 전에 DB 서브넷 그룹 을 먼저 만들어야 해요.

DB 서브넷 그룹은 “RDS가 위치할 수 있는 서브넷 목록” 이에요. 멀티 AZ를 지원하려면 최소 2개 AZ의 서브넷 이 포함돼야 해요.

상단 검색창에 RDS 입력 → RDS 서비스 클릭

왼쪽 사이드바에서 Subnet groups 클릭.

오른쪽 상단 주황색 Create DB subnet group 클릭!


서브넷 그룹 설정

Name        : my-db-subnet-group
Description : Private subnet group for RDS
VPC         : my-vpc

아래 Add subnets 섹션에서 서브넷을 추가해요.

가용 영역 선택:

Availability Zones : ap-northeast-2a, ap-northeast-2c

두 개를 선택하면 아래에 해당 AZ의 서브넷 목록이 나와요.

서브넷 선택:

✅ private-subnet-2a (10.0.3.0/24)
✅ private-subnet-2c (10.0.4.0/24)

⚠️ 반드시 private 서브넷만 선택하세요! public 서브넷을 선택하면 RDS가 퍼블릭 서브넷에 올라갈 수 있어요.

Create 클릭!

성공하면 이런 화면이 나와요.

✅ my-db-subnet-group has been created successfully.

Subnet groups 목록에 my-db-subnet-group 이 Active 상태로 나오면 완성이에요.


RDS 인스턴스 만들기

왼쪽 사이드바 상단 Databases 클릭.

오른쪽 상단 주황색 Create database 클릭!


생성 방식 선택

● Standard create   ← 이걸 선택 (모든 옵션을 직접 설정)
○ Easy create

Standard create 를 선택해야 세부 설정을 직접 할 수 있어요.


엔진 선택

Engine type : MySQL

여러 DB 중에서 MySQL 을 클릭하세요.

Engine version : MySQL 8.0.x   ← 기본으로 선택된 최신 버전 유지

템플릿 선택

○ Production
○ Dev/Test
● Free tier   ← 이걸 선택

Free tier 를 선택하세요.

⚠️ Free tier를 선택하면 일부 옵션이 비활성화돼요. (Multi-AZ, 특정 인스턴스 유형 등) 실습용으로는 충분해요.


기본 설정 (Settings)

DB instance identifier : my-database

이게 DB 인스턴스의 이름이에요.

Master username : admin

DB 관리자 계정 이름이에요. 기본값 admin 그대로 써도 되고, 바꿔도 돼요.

Credentials management : Self managed   ← 선택
Master password        : [직접 입력]
Confirm password       : [동일하게 입력]

⚠️ 비밀번호를 꼭 메모해두세요! 나중에 EC2에서 DB에 접속할 때 필요해요. 잊어버리면 비밀번호를 재설정해야 하는데 번거로워요.

비밀번호 규칙: 영문 대소문자, 숫자, 특수문자 포함 8자 이상


인스턴스 구성 (Instance configuration)

DB instance class : db.t3.micro   ← 프리 티어

Free tier 템플릿을 선택하면 자동으로 설정돼 있을 거예요.


스토리지 (Storage)

Storage type          : gp2
Allocated storage     : 20 GiB
Storage autoscaling   : 체크 해제 (실습용)

실습용이라 자동 스토리지 확장은 꺼도 돼요.


연결 설정 (Connectivity) — 가장 중요한 부분!

Compute resource : Don't connect to an EC2 compute resource

이 옵션은 EC2와 자동으로 연결해주는 기능인데, 여기서는 선택하지 않아도 돼요. EC2 → RDS 연결은 8편에서 직접 해볼 거거든요.

VPC              : my-vpc   ← 반드시 my-vpc!
DB subnet group  : my-db-subnet-group
Public access : No   ← 반드시 No!

⚠️ 이 설정이 제일 중요해요! Yes 로 설정하면 DB가 인터넷에 직접 노출돼요. 반드시 No 로 설정하세요.

VPC security group (firewall)
  ○ Create new
  ● Existing VPC security groups   ← 이걸 선택

Existing VPC security groups : rds-sg   ← 4편에서 만든 것

기존 보안 그룹 목록에서 rds-sg 를 선택하세요. default 는 선택에서 제거해도 돼요.

Availability Zone : ap-northeast-2a

💡 왜 2a를 선택하나요? 5편에서 만든 EC2(web-server-1)가 ap-northeast-2a 에 있어요. RDS도 같은 AZ에 두면 EC2 ↔ RDS 통신이 같은 건물 안에서 이뤄져서 조금 더 빠르고, AZ 간 데이터 전송 요금도 없어요.


추가 구성 (Additional configuration)

이 섹션을 클릭해서 펼치세요.

Initial database name : mydb

💡 이 설정을 안 하면? RDS 서버는 만들어지지만 데이터베이스(스키마)는 없는 상태예요. 나중에 MySQL 접속 후 직접 만들어야 해요. 미리 설정해두면 자동으로 만들어져요.

이 아래 Backup, Monitoring 등의 섹션은 기본값 그대로 유지해요.


최종 확인

오른쪽에 예상 비용(Estimated monthly costs) 패널이 보여요.

Free tier 템플릿을 선택했다면 이렇게 표시될 거예요.

Free Tier
  db.t3.micro instance : 0 USD
  20 GiB storage       : 0 USD
  Estimated total      : 0.00 USD/month

설정도 한 번 더 확인해요.

Engine                 : MySQL 8.0.x
Template               : Free tier
DB instance identifier : my-database
Master username        : admin
Instance type          : db.t3.micro
Storage                : 20 GiB, gp2
VPC                    : my-vpc
Subnet group           : my-db-subnet-group
Public accessibility   : No
Security groups        : rds-sg

다 맞으면 주황색 Create database 클릭!


생성 확인

Databases 목록에 방금 만든 DB가 나타나요.

DB identifier   : my-database
Status          : Creating   ← 생성 중 (5~10분 소요)

5~10분 기다리면:

Status : Available   ✅

생성에 시간이 꽤 걸려요. 커피 한 잔 마시고 오세요. ☕


엔드포인트 확인하기

생성이 완료되면 my-database 를 클릭해서 상세 정보를 봐요.

Connectivity & security 탭에 이런 정보가 있어요.

Endpoint : my-database.xxxxxxxxxx.ap-northeast-2.rds.amazonaws.com
Port     : 3306

이 엔드포인트 주소 가 EC2에서 DB에 접속할 때 사용하는 주소예요. 복사해서 어딘가 메모해두세요!

💡 RDS는 IP 주소가 아닌 도메인 이름(엔드포인트) 으로 접속해요. 내부적으로 IP가 바뀔 수 있어서 항상 엔드포인트를 사용해야 해요.


RDS 생성이 안 될 때 체크리스트

① Status가 Creating에서 10분 이상 안 바뀔 때

RDS 생성은 보통 5~10분이지만 상황에 따라 15분까지 걸릴 수 있어요. 조금 더 기다려보세요. 정말로 오래 걸리는 게 정상이에요.

② Status가 Failed로 바뀌었을 때

RDS 콘솔 → Databases → my-database 클릭 → Logs & events 탭

에러 메시지를 확인할 수 있어요. 대부분 다음 중 하나예요.

  • DB 서브넷 그룹에 서브넷이 하나뿐 → my-db-subnet-group 이 2개 AZ를 포함하는지 확인하세요.
  • 보안 그룹 설정 오류 → rds-sg 가 my-vpc 에 속하는지 확인하세요.

③ Create database 버튼이 비활성화돼 있을 때

비밀번호 규칙이 맞지 않은 경우가 많아요.

비밀번호 규칙: 영문 대소문자 + 숫자 + 특수문자 포함, 8자 이상
예: MyPass123!

⚠️ 특수문자 중 /@", 공백은 사용할 수 없어요.


혹시 잘못 만들었다면?

설정이 잘못됐거나 다시 만들고 싶다면:

RDS 삭제:

Databases → my-database 선택 → Actions → Delete

Create final snapshot    : 체크 해제 (실습용이라 백업 필요 없어요)
Retain automated backups : 체크 해제

delete me 를 입력하고 Delete 클릭!

⚠️ RDS 삭제는 몇 분 정도 걸려요. 삭제 중에는 Status가 Deleting 으로 표시돼요.

DB 서브넷 그룹 삭제:

RDS 인스턴스가 완전히 삭제된 뒤에 서브넷 그룹을 삭제할 수 있어요.

Subnet groups → my-db-subnet-group 선택 → Delete


현재 아키텍처 상태

인터넷
  ↓ HTTP(80)
IGW → 퍼블릭 서브넷
  └ EC2 (web-server-1) ✅ Nginx 실행 중
       ↓ MySQL(3306, rds-sg 통해서)
프라이빗 서브넷
  └ RDS (my-database) ✅ Available
       └ rds-sg 적용 (web-sg에서만 3306 허용)
       └ 인터넷 직접 접근 차단 🔒

이번 편 정리

개념설명
RDSAWS 관리형 관계형 데이터베이스 서비스
DB 서브넷 그룹RDS가 위치할 서브넷 목록 (최소 2개 AZ)
Public access: No인터넷에서 DB 직접 접근 차단
엔드포인트EC2에서 DB 접속 시 사용하는 도메인 주소

이번 편에서 만든 것:

  • ✅ my-db-subnet-group
  • ✅ my-database (프라이빗 서브넷, rds-sg 적용, Public access: No)

다음 편 👉 8편. EC2 → RDS 연결 — 웹 서버에서 DB 접속 확인하기