Cloud & Platform
7강. RDS
7강. RDS 학습 내용을 정리한 백필 노트입니다.
이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.
목차
- RDS
- RDS를 사용하는 이유
- RDS 기본 구조
- (실습) RDS 인스턴스 생성
- (실습) DB 인스턴스 다중 AZ 배포로 전환
- (실습) 다른 리전에 읽기 전용 복제본 생성
- (실습) MySQL Workbench 설치 및 연결
- (실습) WordPress DB 테이블 생성
- (실습) WordPress의 MySQL 연결 정보 변경
- (실습) 새로운 AMI 생성
- (실습) RDS 보안 그룹 규칙 변경
- (실습) 새로운 시작 템플릿 생성
- (실습) Auto Scaling Group의 시작 템플릿 변경
- (실습) RDS 정상 작동 테스트
AWS 서비스의 3대장
AWS의 대표적인 3가지 핵심 서비스는 다음과 같습니다.
- EC2: 가상 서버
- RDS: 관계형 데이터베이스
- S3: 스토리지
RDS란?
Relational Database Service
RDS는 완전 관리형(Fully Managed) 관계형 데이터베이스 서비스입니다.
주요 특징
- 완전 관리형 서비스: 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같은 작업을 자동화하여 관리가 용이합니다.
- 다양한 DB 엔진 제공: ORACLE, MySQL, PostgreSQL, MariaDB, Aurora 등 널리 사용되는 데이터베이스 엔진을 지원합니다.
- DB 이중화 (Multi-AZ): 여러 가용 영역(AZ)에 걸쳐 데이터를 복제하여 고가용성을 확보하고 장애 발생 시 자동으로 Failover를 수행합니다.
- 읽기 전용 복제본 (Read Replica): 읽기 워크로드의 부하를 분산시켜 데이터베이스 성능과 확장성을 향상시킵니다.
- 인스턴스 확장: 필요에 따라 DB 인스턴스의 컴퓨팅 및 스토리지 용량을 쉽게 확장할 수 있습니다.
RDS를 사용하는 이유
DBA(Database Administrator)의 역할
일반적으로 데이터베이스 관리자(DBA)는 다음과 같은 다양한 작업을 수행합니다.
- 설치, 구성, 업그레이드 및 마이그레이션
- 백업 및 복구
- 데이터베이스 보안
- 스토리지 및 용량 계획
- 성능 모니터링 및 튜닝
- 문제 해결(Troubleshooting)
- 고가용성(High Availability) 환경 구축
- ETL(데이터 추출, 변환, 로드)
EC2에 직접 설치 vs RDS 사용
EC2 인스턴스에 직접 데이터베이스(예: MySQL)를 설치하면 위에서 언급된 모든 관리 작업을 사용자가 직접 처리해야 합니다. 이는 Scale Up/Out, 마이그레이션, 재해 복구(DR), 백업, 고가용성(HA), 장애 조치(Failover) 등 복잡한 과정을 포함합니다.
반면, RDS를 사용하면 AWS가 이러한 복잡하고 반복적인 관리 작업을 대부분 자동화하여 사용자는 애플리케이션 개발에 더 집중할 수 있습니다.
RDS 기본 구조
RDS는 고가용성과 확장성을 위해 다중 AZ 및 읽기 전용 복제본 구성을 지원합니다.
다중 AZ(Multi-AZ)와 읽기 전용 복제본(Read Replica)
- 기본(Master) DB: 가용 영역(AZ) #1에 위치하며, 애플리케이션의 모든 쓰기(Write) 및 일부 읽기(Read) 요청을 처리합니다.
- 대기(Standby) DB: 가용 영역(AZ) #2에 위치하며, 기본 DB와 동기식(Synchronous) 으로 복제됩니다. 평소에는 비활성 상태이다가 기본 DB에 장애 발생 시 자동으로 활성화되어 서비스 중단을 최소화합니다(Failover).
- 읽기 전용 복제본(Read Replica): 별도의 리전(Region) 또는 다른 가용 영역에 생성될 수 있으며, 기본 DB와 비동기식(Asynchronous) 으로 복제됩니다. 애플리케이션의 읽기 요청을 분산 처리하여 기본 DB의 부하를 줄입니다.
다중 AZ와 읽기 전용 복제본 비교
| 구분 | 다중 AZ 배포 | 읽기 전용 복제본 | | --- | --- | --- | | 복제 방식 | 동기식 복제 (높은 안정성) | 비동기식 복제 (높은 확장성) | | 활성 상태 | 기본 인스턴스만 활성 상태 | 모든 복제본이 접근 가능하며 읽기 확장 가능 | | 백업 | 자동 백업은 대기(Standby) 인스턴스에서 수행 | 기본 제공된 백업 구성 없음 | | 배포 위치 | 단일 리전 내 2개의 다른 가용 영역에 배포 | 동일 AZ, 교차 AZ 또는 교차 리전에 배포 가능 | | 버전 업그레이드 | 기본 DB 버전 업그레이드가 대기 DB에도 적용 | 원본 인스턴스와 독립적으로 버전 업그레이드 가능 | | 장애 조치 | 문제 감지 시 대기 인스턴스로 자동 Failover | 독립형 데이터베이스로 수동 승격 가능 |
실습: RDS 인스턴스 생성
1. 데이터베이스 생성 시작
- AWS 관리 콘솔에서 'RDS'를 검색하여 서비스로 이동합니다.
- RDS 대시보드에서 [데이터베이스 생성] 버튼을 클릭합니다.
2. 생성 방식 및 엔진 선택
- 데이터베이스 생성 방식 선택: '표준 생성'을 선택하여 모든 구성 옵션을 직접 설정합니다.
- 엔진 옵션: 엔진 유형으로 **'MySQL'**을 선택합니다.
3. 템플릿 선택
- 템플릿: **'프리 티어'**를 선택하여 과금 없이 실습을 진행합니다.
4. 설정
- DB 인스턴스 식별자: 데이터베이스의 고유 이름을 입력합니다. (예:
my-database) - 자격 증명 설정:
- 마스터 사용자 이름: 관리자 계정 이름을 입력합니다. (예:
admin) - 마스터 암호: 암호를 직접 입력하고 확인란에도 동일하게 입력합니다.
- 마스터 사용자 이름: 관리자 계정 이름을 입력합니다. (예:
5. 인스턴스 구성 및 스토리지
- DB 인스턴스 클래스: 프리 티어에서 사용 가능한 '버스터블 클래스'의
db.t2.micro또는db.t3.micro를 선택합니다. - 스토리지:
- 스토리지 유형: '범용 SSD(gp2)'를 선택합니다.
- 할당된 스토리지: 20 GiB로 설정합니다.
- 스토리지 자동 조정: 비활성화 상태로 둡니다.
6. 연결 설정
- 컴퓨팅 리소스 연결: 'EC2 컴퓨팅 리소스에 연결 안 함'을 선택합니다.
- 네트워킹:
- VPC: 기본 VPC(Default VPC)를 선택합니다.
- 퍼블릭 액세스: **'예'**를 선택하여 외부(예: 로컬 PC의 MySQL Workbench)에서 접근할 수 있도록 설정합니다.
- VPC 보안 그룹(방화벽):
- '새로 생성'을 선택하고 새 VPC 보안 그룹 이름을 입력합니다. (예:
rds-my-database)
- '새로 생성'을 선택하고 새 VPC 보안 그룹 이름을 입력합니다. (예:
- 가용 영역: '기본 설정 없음'으로 둡니다.
7. 데이터베이스 인증 및 생성
- 데이터베이스 인증: '암호 인증'을 선택합니다.
- 월별 추정 요금을 확인한 후 [데이터베이스 생성] 버튼을 클릭합니다.
8. 생성 확인 및 엔드포인트 확인
- 데이터베이스 목록에서 생성된 인스턴스의 상태가 '생성 중'에서 '백업 중'을 거쳐 **'사용 가능'**으로 변경될 때까지 기다립니다.
- 생성된 데이터베이스를 클릭하여 세부 정보 페이지로 이동합니다.
- '연결 & 보안' 탭에서 데이터베이스에 접속할 때 필요한 엔드포인트 주소와 포트(기본값 3306)를 확인합니다.
실습: DB 인스턴스 다중 AZ 배포로 전환
주의: 다중 AZ 배포는 프리 티어에 포함되지 않으므로 약간의 과금이 발생할 수 있습니다.
1. 다중 AZ로 전환
- 생성한 DB 인스턴스의 세부 정보 페이지에서 [작업] 드롭다운 메뉴를 클릭하고 **'다중 AZ 배포로 변환'**을 선택합니다. (또는 [수정] 버튼을 통해 '가용성 및 내구성' 섹션에서 변경)
- 팝업 창에서 **'즉시 적용'**을 선택하고 [다중 AZ로 변환] 버튼을 클릭합니다.
- 인스턴스 상태가 '수정 중'으로 변경되며, 완료되면 '구성' 탭의 '다중 AZ' 항목이 '예'로 표시됩니다.
2. 장애 조치(Failover) 테스트
- 인스턴스 세부 정보 페이지에서 [작업] 메뉴의 **'재부팅'**을 선택합니다.
- 팝업 창에서 '장애 조치로 재부팅하시겠습니까?' 옵션을 체크하고 **[확인]**을 클릭합니다.
- 재부팅이 완료된 후 '로그 및 이벤트' 탭의 '최근 이벤트'를 확인하면 'Multi-AZ instance failover completed' 로그를 볼 수 있습니다.
- 또한 '연결 & 보안' 탭에서 인스턴스의 가용 영역(AZ)이 변경된 것을 확인할 수 있습니다.
실습: 다른 리전에 읽기 전용 복제본 생성
- 원본 DB 인스턴스를 선택한 후 [작업] 메뉴에서 **'읽기 전용 복제본 생성'**을 클릭합니다.
- 설정:
- DB 인스턴스 식별자: 복제본의 고유 이름을 입력합니다. (예:
my-database-replica-us) - AWS 리전: 복제본을 생성할 다른 리전을 선택합니다. (예:
US East (N. Virginia))
- DB 인스턴스 식별자: 복제본의 고유 이름을 입력합니다. (예:
- 연결:
- 퍼블릭 액세스: **'예'**로 설정합니다.
- 나머지 설정은 기본값을 유지하고 [읽기 전용 복제본 생성] 버튼을 클릭합니다.
- AWS 콘솔의 리전을 복제본을 생성한 리전으로 변경하면, 새로운 읽기 전용 복제본 인스턴스가 생성되고 있는 것을 확인할 수 있습니다.
실습: MySQL Workbench 설치 및 연결
- 웹 브라우저에서 'mysql workbench'를 검색하여 공식 사이트에서 운영체제에 맞는 버전을 다운로드하고 설치합니다.
- MySQL Workbench를 실행하고 'MySQL Connections' 옆의 [+] 버튼을 클릭하여 새 연결을 생성합니다.
- 'Setup New Connection' 창에서 다음 정보를 입력합니다.
- Connection Name: 연결을 식별할 이름 (예:
my-database-connection) - Hostname: AWS RDS 콘솔에서 확인한 DB 인스턴스의 엔드포인트 주소
- Port:
3306 - Username: 생성 시 설정한 마스터 사용자 이름 (예:
admin)
- Connection Name: 연결을 식별할 이름 (예:
- [Store in Keychain...] 버튼을 클릭하고 DB 마스터 암호를 입력하여 저장합니다.
- [Test Connection] 버튼을 클릭하여 'Successfully made the MySQL connection' 메시지가 나타나는지 확인합니다.
- 연결 실패 시, RDS 보안 그룹의 인바운드 규칙에 현재 사용 중인 PC의 IP 주소가 허용되어 있는지 확인합니다.
- *[OK]**를 눌러 연결 설정을 저장하고, 생성된 연결을 클릭하여 데이터베이스에 접속합니다.
실습: WordPress DB 테이블 생성
- 제공된 GitHub 링크에서 WordPress DB 생성용 SQL 스크립트(
backup.sql) 내용을 전체 복사합니다. - MySQL Workbench의 쿼리 편집기 창에 복사한 스크립트를 붙여넣습니다.
- 상단의 번개 모양 아이콘(Execute)을 클릭하여 쿼리를 실행합니다.
- 실행 완료 후, 왼쪽의 'SCHEMAS' 패널에서 새로고침을 하면
bitnami_wordpress데이터베이스와 그 안의 테이블들이 생성된 것을 확인할 수 있습니다.
실습: WordPress의 MySQL 연결 정보 변경
-
SSH 클라이언트를 사용하여 WordPress가 설치된 EC2 인스턴스에 접속합니다.
-
vim편집기를 사용하여 WordPress 설정 파일을 엽니다.Bashsudo vim /opt/bitnami/wordpress/wp-config.php -
파일 내용 중 다음 항목들을 새로 생성한 RDS 인스턴스 정보에 맞게 수정합니다.
DB_USER: 'admin'DB_PASSWORD: RDS 마스터 암호DB_HOST: RDS 엔드포인트 주소와 포트 (예:my-database.xxxx.rds.amazonaws.com:3306)
-
:wq를 입력하여 파일을 저장하고 종료합니다.
실습: 새로운 AMI 생성
- EC2 콘솔로 이동하여 WordPress 인스턴스를 선택합니다.
- [작업] -> [이미지 및 템플릿] -> **[이미지 생성]**을 클릭합니다.
- 이미지 이름을 입력하고(예:
MyWordpressAMI-New), [이미지 생성] 버튼을 클릭합니다. - 왼쪽 메뉴에서 **'AMI'**를 클릭하면 이미지 생성 상태를 확인할 수 있습니다. '대기 중'에서 '사용 가능'으로 변경되면 완료된 것입니다.
실습: RDS 보안 그룹 규칙 변경
- RDS 콘솔에서 DB 인스턴스를 선택하고 '연결 & 보안' 탭에서 VPC 보안 그룹 링크를 클릭합니다.
- 해당 보안 그룹의 '인바운드 규칙' 탭으로 이동하여 **[인바운드 규칙 편집]**을 클릭합니다.
- 기존 규칙의 **'소스'**를 WordPress EC2 인스턴스가 사용하는 보안 그룹으로 변경하거나, 모든 IP에서의 접근을 허용하는 'Anywhere-IPv4'(0.0.0.0/0)로 변경합니다. (실습 편의상)
- *[규칙 저장]**을 클릭합니다.
실습: 새로운 시작 템플릿 생성
- EC2 콘솔의 왼쪽 메뉴에서 **'시작 템플릿'**으로 이동하고 **[시작 템플릿 생성]**을 클릭합니다.
- 시작 템플릿 이름을 입력합니다. (예:
MyTemplateNew) - 애플리케이션 및 OS 이미지(AMI) 항목에서 **'내 AMI'**를 선택하고, 방금 생성한
MyWordpressAMI-New를 선택합니다. - 인스턴스 유형, 키 페어, 네트워크 설정(보안 그룹) 등 기존 시작 템플릿과 동일하게 설정합니다.
- *[시작 템플릿 생성]**을 클릭합니다.
실습: Auto Scaling Group의 시작 템플릿 변경
- EC2 콘솔의 왼쪽 메뉴에서 **'Auto Scaling 그룹'**으로 이동하여 기존 그룹을 선택합니다.
- '시작 템플릿' 섹션에서 [편집] 버튼을 클릭합니다.
- '템플릿' 드롭다운 메뉴에서 새로 생성한
MyTemplateNew를 선택합니다. - [업데이트] 버튼을 클릭하여 변경 사항을 저장합니다.
실습: RDS 정상 작동 테스트
- EC2 인스턴스 목록으로 이동하여 Auto Scaling 그룹이 실행 중인 기존 인스턴스를 모두 선택합니다.
- 선택한 인스턴스들을 종료(Terminate) 합니다.
- 잠시 후 Auto Scaling 그룹이 설정된 최소 용량을 맞추기 위해 새로운 EC2 인스턴스를 자동으로 시작하는 것을 확인할 수 있습니다.
- 새로 시작된 인스턴스는 업데이트된 AMI와 시작 템플릿을 기반으로 생성되었으므로, RDS 데이터베이스에 정상적으로 연결하여 WordPress 사이트를 서비스하게 됩니다.
7강 요약
- RDS (Relational Database Service): AWS에서 제공하는 완전 관리형 관계형 데이터베이스 서비스입니다.
- 사용 이유: 서버에 직접 DB를 설치하고 운영할 때 발생하는 설치, 구성, 백업, 고가용성 확보 등 복잡한 관리 작업을 AWS가 대신 처리해주어 편리합니다.
- 기본 구조: 단일 가용 영역(AZ)에 인스턴스를 생성하여 사용하거나, 다중 AZ(Multi-AZ) 구성을 통해 다른 AZ에 복제본을 두어 장애 발생 시 자동으로 Failover 되도록 하여 고가용성을 확보할 수 있습니다.