Taeyoung Kim

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. 데이터베이스 생성 시작

  1. AWS 관리 콘솔에서 'RDS'를 검색하여 서비스로 이동합니다.
  2. RDS 대시보드에서 [데이터베이스 생성] 버튼을 클릭합니다.

2. 생성 방식 및 엔진 선택

  1. 데이터베이스 생성 방식 선택: '표준 생성'을 선택하여 모든 구성 옵션을 직접 설정합니다.
  2. 엔진 옵션: 엔진 유형으로 **'MySQL'**을 선택합니다.

3. 템플릿 선택

  • 템플릿: **'프리 티어'**를 선택하여 과금 없이 실습을 진행합니다.

4. 설정

  1. DB 인스턴스 식별자: 데이터베이스의 고유 이름을 입력합니다. (예: my-database)
  2. 자격 증명 설정:
    • 마스터 사용자 이름: 관리자 계정 이름을 입력합니다. (예: admin)
    • 마스터 암호: 암호를 직접 입력하고 확인란에도 동일하게 입력합니다.

5. 인스턴스 구성 및 스토리지

  1. DB 인스턴스 클래스: 프리 티어에서 사용 가능한 '버스터블 클래스'의 db.t2.micro 또는 db.t3.micro를 선택합니다.
  2. 스토리지:
    • 스토리지 유형: '범용 SSD(gp2)'를 선택합니다.
    • 할당된 스토리지: 20 GiB로 설정합니다.
    • 스토리지 자동 조정: 비활성화 상태로 둡니다.

6. 연결 설정

  1. 컴퓨팅 리소스 연결: 'EC2 컴퓨팅 리소스에 연결 안 함'을 선택합니다.
  2. 네트워킹:
    • VPC: 기본 VPC(Default VPC)를 선택합니다.
    • 퍼블릭 액세스: **'예'**를 선택하여 외부(예: 로컬 PC의 MySQL Workbench)에서 접근할 수 있도록 설정합니다.
  3. VPC 보안 그룹(방화벽):
    • '새로 생성'을 선택하고 새 VPC 보안 그룹 이름을 입력합니다. (예: rds-my-database)
  4. 가용 영역: '기본 설정 없음'으로 둡니다.

7. 데이터베이스 인증 및 생성

  1. 데이터베이스 인증: '암호 인증'을 선택합니다.
  2. 월별 추정 요금을 확인한 후 [데이터베이스 생성] 버튼을 클릭합니다.

8. 생성 확인 및 엔드포인트 확인

  1. 데이터베이스 목록에서 생성된 인스턴스의 상태가 '생성 중'에서 '백업 중'을 거쳐 **'사용 가능'**으로 변경될 때까지 기다립니다.
  2. 생성된 데이터베이스를 클릭하여 세부 정보 페이지로 이동합니다.
  3. '연결 & 보안' 탭에서 데이터베이스에 접속할 때 필요한 엔드포인트 주소와 포트(기본값 3306)를 확인합니다.

실습: DB 인스턴스 다중 AZ 배포로 전환

주의: 다중 AZ 배포는 프리 티어에 포함되지 않으므로 약간의 과금이 발생할 수 있습니다.

1. 다중 AZ로 전환

  1. 생성한 DB 인스턴스의 세부 정보 페이지에서 [작업] 드롭다운 메뉴를 클릭하고 **'다중 AZ 배포로 변환'**을 선택합니다. (또는 [수정] 버튼을 통해 '가용성 및 내구성' 섹션에서 변경)
  2. 팝업 창에서 **'즉시 적용'**을 선택하고 [다중 AZ로 변환] 버튼을 클릭합니다.
  3. 인스턴스 상태가 '수정 중'으로 변경되며, 완료되면 '구성' 탭의 '다중 AZ' 항목이 '예'로 표시됩니다.

2. 장애 조치(Failover) 테스트

  1. 인스턴스 세부 정보 페이지에서 [작업] 메뉴의 **'재부팅'**을 선택합니다.
  2. 팝업 창에서 '장애 조치로 재부팅하시겠습니까?' 옵션을 체크하고 **[확인]**을 클릭합니다.
  3. 재부팅이 완료된 후 '로그 및 이벤트' 탭의 '최근 이벤트'를 확인하면 'Multi-AZ instance failover completed' 로그를 볼 수 있습니다.
  4. 또한 '연결 & 보안' 탭에서 인스턴스의 가용 영역(AZ)이 변경된 것을 확인할 수 있습니다.

실습: 다른 리전에 읽기 전용 복제본 생성

  1. 원본 DB 인스턴스를 선택한 후 [작업] 메뉴에서 **'읽기 전용 복제본 생성'**을 클릭합니다.
  2. 설정:
    • DB 인스턴스 식별자: 복제본의 고유 이름을 입력합니다. (예: my-database-replica-us)
    • AWS 리전: 복제본을 생성할 다른 리전을 선택합니다. (예: US East (N. Virginia))
  3. 연결:
    • 퍼블릭 액세스: **'예'**로 설정합니다.
  4. 나머지 설정은 기본값을 유지하고 [읽기 전용 복제본 생성] 버튼을 클릭합니다.
  5. AWS 콘솔의 리전을 복제본을 생성한 리전으로 변경하면, 새로운 읽기 전용 복제본 인스턴스가 생성되고 있는 것을 확인할 수 있습니다.

실습: MySQL Workbench 설치 및 연결

  1. 웹 브라우저에서 'mysql workbench'를 검색하여 공식 사이트에서 운영체제에 맞는 버전을 다운로드하고 설치합니다.
  2. MySQL Workbench를 실행하고 'MySQL Connections' 옆의 [+] 버튼을 클릭하여 새 연결을 생성합니다.
  3. 'Setup New Connection' 창에서 다음 정보를 입력합니다.
    • Connection Name: 연결을 식별할 이름 (예: my-database-connection)
    • Hostname: AWS RDS 콘솔에서 확인한 DB 인스턴스의 엔드포인트 주소
    • Port: 3306
    • Username: 생성 시 설정한 마스터 사용자 이름 (예: admin)
  4. [Store in Keychain...] 버튼을 클릭하고 DB 마스터 암호를 입력하여 저장합니다.
  5. [Test Connection] 버튼을 클릭하여 'Successfully made the MySQL connection' 메시지가 나타나는지 확인합니다.
    • 연결 실패 시, RDS 보안 그룹의 인바운드 규칙에 현재 사용 중인 PC의 IP 주소가 허용되어 있는지 확인합니다.
  6. *[OK]**를 눌러 연결 설정을 저장하고, 생성된 연결을 클릭하여 데이터베이스에 접속합니다.

실습: WordPress DB 테이블 생성

  1. 제공된 GitHub 링크에서 WordPress DB 생성용 SQL 스크립트(backup.sql) 내용을 전체 복사합니다.
  2. MySQL Workbench의 쿼리 편집기 창에 복사한 스크립트를 붙여넣습니다.
  3. 상단의 번개 모양 아이콘(Execute)을 클릭하여 쿼리를 실행합니다.
  4. 실행 완료 후, 왼쪽의 'SCHEMAS' 패널에서 새로고침을 하면 bitnami_wordpress 데이터베이스와 그 안의 테이블들이 생성된 것을 확인할 수 있습니다.

실습: WordPress의 MySQL 연결 정보 변경

  1. SSH 클라이언트를 사용하여 WordPress가 설치된 EC2 인스턴스에 접속합니다.

  2. vim 편집기를 사용하여 WordPress 설정 파일을 엽니다.Bash

    sudo vim /opt/bitnami/wordpress/wp-config.php
    
  3. 파일 내용 중 다음 항목들을 새로 생성한 RDS 인스턴스 정보에 맞게 수정합니다.

    • DB_USER: 'admin'
    • DB_PASSWORD: RDS 마스터 암호
    • DB_HOST: RDS 엔드포인트 주소와 포트 (예: my-database.xxxx.rds.amazonaws.com:3306)
  4. :wq를 입력하여 파일을 저장하고 종료합니다.

실습: 새로운 AMI 생성

  1. EC2 콘솔로 이동하여 WordPress 인스턴스를 선택합니다.
  2. [작업] -> [이미지 및 템플릿] -> **[이미지 생성]**을 클릭합니다.
  3. 이미지 이름을 입력하고(예: MyWordpressAMI-New), [이미지 생성] 버튼을 클릭합니다.
  4. 왼쪽 메뉴에서 **'AMI'**를 클릭하면 이미지 생성 상태를 확인할 수 있습니다. '대기 중'에서 '사용 가능'으로 변경되면 완료된 것입니다.

실습: RDS 보안 그룹 규칙 변경

  1. RDS 콘솔에서 DB 인스턴스를 선택하고 '연결 & 보안' 탭에서 VPC 보안 그룹 링크를 클릭합니다.
  2. 해당 보안 그룹의 '인바운드 규칙' 탭으로 이동하여 **[인바운드 규칙 편집]**을 클릭합니다.
  3. 기존 규칙의 **'소스'**를 WordPress EC2 인스턴스가 사용하는 보안 그룹으로 변경하거나, 모든 IP에서의 접근을 허용하는 'Anywhere-IPv4'(0.0.0.0/0)로 변경합니다. (실습 편의상)
  4. *[규칙 저장]**을 클릭합니다.

실습: 새로운 시작 템플릿 생성

  1. EC2 콘솔의 왼쪽 메뉴에서 **'시작 템플릿'**으로 이동하고 **[시작 템플릿 생성]**을 클릭합니다.
  2. 시작 템플릿 이름을 입력합니다. (예: MyTemplateNew)
  3. 애플리케이션 및 OS 이미지(AMI) 항목에서 **'내 AMI'**를 선택하고, 방금 생성한 MyWordpressAMI-New를 선택합니다.
  4. 인스턴스 유형, 키 페어, 네트워크 설정(보안 그룹) 등 기존 시작 템플릿과 동일하게 설정합니다.
  5. *[시작 템플릿 생성]**을 클릭합니다.

실습: Auto Scaling Group의 시작 템플릿 변경

  1. EC2 콘솔의 왼쪽 메뉴에서 **'Auto Scaling 그룹'**으로 이동하여 기존 그룹을 선택합니다.
  2. '시작 템플릿' 섹션에서 [편집] 버튼을 클릭합니다.
  3. '템플릿' 드롭다운 메뉴에서 새로 생성한 MyTemplateNew를 선택합니다.
  4. [업데이트] 버튼을 클릭하여 변경 사항을 저장합니다.

실습: RDS 정상 작동 테스트

  1. EC2 인스턴스 목록으로 이동하여 Auto Scaling 그룹이 실행 중인 기존 인스턴스를 모두 선택합니다.
  2. 선택한 인스턴스들을 종료(Terminate) 합니다.
  3. 잠시 후 Auto Scaling 그룹이 설정된 최소 용량을 맞추기 위해 새로운 EC2 인스턴스를 자동으로 시작하는 것을 확인할 수 있습니다.
  4. 새로 시작된 인스턴스는 업데이트된 AMI와 시작 템플릿을 기반으로 생성되었으므로, RDS 데이터베이스에 정상적으로 연결하여 WordPress 사이트를 서비스하게 됩니다.

7강 요약

  • RDS (Relational Database Service): AWS에서 제공하는 완전 관리형 관계형 데이터베이스 서비스입니다.
  • 사용 이유: 서버에 직접 DB를 설치하고 운영할 때 발생하는 설치, 구성, 백업, 고가용성 확보 등 복잡한 관리 작업을 AWS가 대신 처리해주어 편리합니다.
  • 기본 구조: 단일 가용 영역(AZ)에 인스턴스를 생성하여 사용하거나, 다중 AZ(Multi-AZ) 구성을 통해 다른 AZ에 복제본을 두어 장애 발생 시 자동으로 Failover 되도록 하여 고가용성을 확보할 수 있습니다.