600===Dev AWS/RDS

Amazon RDS - 클라우드 기반 관계형 데이터베이스 완전 정복 🚀

블로글러 2025. 3. 21. 11:04

여러분은 식당을 운영한다고 생각해보세요. 매일 손님들의 주문, 재고 관리, 직원 스케줄, 매출 등 수많은 데이터를 관리해야 합니다. 이 모든 정보를 체계적으로 보관하고 필요할 때 빠르게 조회하려면 어떻게 해야 할까요? 바로 이런 상황에서 관계형 데이터베이스가 필요합니다.

  • 관계형 데이터베이스는 테이블 형태로 데이터를 구조화하여 저장하는 시스템입니다.
  • 하지만 이런 데이터베이스를 직접 설치, 관리, 백업하는 것은 상당한 기술적 지식과 시간이 필요합니다.

Amazon RDS는 이런 복잡한 데이터베이스 관리 작업을 AWS가 대신 처리해주는 서비스입니다. 마치 요리사가 주방 관리보다 요리에만 집중할 수 있게 해주는 것처럼, 개발자는 데이터베이스 관리보다 애플리케이션 개발에 더 집중할 수 있게 됩니다.

왜 필요한가?

Amazon RDS가 해결하는 문제들은 다음과 같습니다:

  1. 복잡한 데이터베이스 관리: RDS는 설치, 패치, 백업, 복구 등 복잡한 데이터베이스 관리 작업을 자동화하여 운영 부담을 줄여줍니다.
  2. 고가용성 확보의 어려움: 다중 AZ(Availability Zone) 배포를 통해 데이터베이스 장애 발생 시 자동으로 대기 인스턴스로 전환하는 기능을 제공합니다.
  3. 확장성 문제: 읽기 전용 복제본 생성과 인스턴스 크기 조정을 통해 데이터베이스 성능을 쉽게 확장할 수 있습니다.
  4. 보안 관리의 복잡성: 암호화, 네트워크 격리, 접근 제어 등 다양한 보안 기능을 제공하여 데이터를 안전하게 보호합니다.

기본 원리

Amazon RDS의 핵심 원리를 알아볼까요?

관리형 데이터베이스 서비스

Amazon RDS는 기본적으로 AWS가 관리하는 데이터베이스 서비스입니다. 내부적으로는 EC2 인스턴스 위에서 데이터베이스가 실행되지만, 사용자는 이를 직접 관리할 필요 없이 높은 수준의 인터페이스를 통해 데이터베이스를 운영할 수 있습니다.

┌─────────────────────────────────────────────────┐
│                   AWS 클라우드                    │
│                                                 │
│  ┌─────────────────────────────────────────┐    │
│  │               Amazon RDS                │    │
│  │                                         │    │
│  │   ┌───────────┐       ┌───────────┐    │    │
│  │   │  Primary  │       │ Standby   │    │    │
│  │   │    DB     │───────│    DB     │    │    │
│  │   │ Instance  │ 복제   │ Instance  │    │    │
│  │   └───────────┘       └───────────┘    │    │
│  │                                         │    │
│  │   ┌───────────┐  ┌───────────────────┐ │    │
│  │   │ Read      │  │ Automated Backup  │ │    │
│  │   │ Replica   │  │ & Patching        │ │    │
│  │   └───────────┘  └───────────────────┘ │    │
│  └─────────────────────────────────────────┘    │
└─────────────────────────────────────────────────┘

다중 AZ 배포(Multi-AZ Deployment)

고가용성을 위해 RDS는 다중 AZ 배포 옵션을 제공합니다. 이 기능을 활성화하면 기본 데이터베이스 인스턴스와 동일한 복제본이 다른 가용 영역에 배치됩니다.

┌───────────────────────┐   ┌───────────────────────┐
│    가용 영역 A         │   │    가용 영역 B         │
│                       │   │                       │
│   ┌───────────────┐   │   │   ┌───────────────┐   │
│   │  Primary DB   │   │   │   │  Standby DB   │   │
│   │  Instance     │───┼───┼──▶│  Instance     │   │
│   └───────────────┘   │   │   └───────────────┘   │
│                       │   │                       │
└───────────────────────┘   └───────────────────────┘
         ▲                            │
         │                            │
         └────────────────────────────┘
               자동 장애 조치

기본 인스턴스에 문제가 발생하면 AWS는 자동으로 대기 인스턴스로 전환하여 서비스 중단을 최소화합니다. 이는 계획된 유지 관리 작업이나 예기치 않은 장애 상황에서도 데이터베이스 가용성을 유지할 수 있게 해줍니다.

읽기 전용 복제본(Read Replica)

읽기 작업이 많은 워크로드를 분산시키기 위해 RDS는 읽기 전용 복제본 기능을 제공합니다.

┌───────────────────┐
│   Primary DB      │
│   Instance        │
└─────────┬─────────┘
          │
          ▼
┌───────────────────┐
│      복제         │
└─────────┬─────────┘
          │
          ▼
┌────────────────────────────────────────────┐
│                                            │
├────────────────┬────────────────┬──────────┤
│ Read Replica 1Read Replica 2 │    ...   │
└────────────────┴────────────────┴──────────┘

읽기 전용 복제본은 기본 데이터베이스 인스턴스의 데이터를 비동기적으로 복제합니다. 애플리케이션의 읽기 쿼리를 이 복제본으로 분산시켜 전체 시스템의 성능을 향상시킬 수 있습니다.

실제 예제

Amazon RDS는 다양한 비즈니스 환경에서 활용될 수 있습니다. 실제 사례를 살펴보겠습니다.

AWS CLI를 이용한 RDS 인스턴스 생성

AWS CLI를 사용하여 RDS 인스턴스를 생성하는 방법입니다:

# MySQL DB 인스턴스 생성
aws rds create-db-instance \
    --db-instance-identifier mydb \
    --db-instance-class db.t3.micro \
    --engine mysql \
    --master-username admin \
    --master-user-password mypassword \
    --allocated-storage 20 \
    --backup-retention-period 7 \
    --multi-az

애플리케이션에서 RDS 연결

Python을 사용하여 RDS MySQL 데이터베이스에 연결하는 예제입니다:

import pymysql

# RDS 연결 정보
rds_host = "mydb.xxxxxxx.ap-northeast-2.rds.amazonaws.com"
username = "admin"
password = "mypassword"
db_name = "mydb"

# 데이터베이스 연결
conn = pymysql.connect(
    host=rds_host,
    user=username,
    password=password,
    database=db_name
)

# 쿼리 실행
try:
    with conn.cursor() as cursor:
        # 테이블 생성
        cursor.execute("CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255))")

        # 데이터 삽입
        cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ("홍길동", "hong@example.com"))
        conn.commit()

        # 데이터 조회
        cursor.execute("SELECT * FROM users")
        results = cursor.fetchall()
        for row in results:
            print(row)
finally:
    conn.close()

다음은 Amazon RDS의 다양한 구성 옵션을 표로 정리한 내용입니다:

항목 설명 주요 옵션
데이터베이스 엔진 RDS에서 지원하는 DB 엔진 MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Aurora
인스턴스 유형 DB 서버의 컴퓨팅 및 메모리 용량 t3(범용), r5(메모리 최적화), m5(균형적) 등
스토리지 유형 데이터 저장 옵션 범용 SSD, 프로비저닝된 IOPS SSD
다중 AZ 배포 고가용성 옵션 단일 AZ, 다중 AZ 배포
백업 데이터 보호 옵션 자동 백업, 수동 스냅샷
암호화 보안 강화 옵션 저장 데이터 암호화, SSL 연결

주의사항 및 팁 💡

⚠️ 이것만은 주의하세요!

  1. 비용 관리

    • 불필요하게 큰 인스턴스 타입 선택은 비용 증가의 원인이 됩니다.
    • 필요에 따라 적절한 인스턴스 크기를 선택하고, 사용하지 않는 리소스는 정리하세요.
  2. 성능 병목 현상

    • 인스턴스 유형, 스토리지 IOPS, 연결 수 등이 성능에 영향을 미칩니다.
    • 성능 지표를 모니터링하고 필요에 따라 리소스를 조정하세요.
  3. 백업 및 복원 전략

    • 자동 백업만으로는 모든 데이터 손실 시나리오를 방지할 수 없습니다.
    • 중요한 변경 전에는 수동 스냅샷을 생성하는 습관을 들이세요.

💡 꿀팁

  • 개발/테스트 환경에서는 다중 AZ 배포 대신 단일 AZ를 사용하여 비용을 절감하세요.
  • 읽기 작업이 많은 애플리케이션은 읽기 전용 복제본을 활용하여 성능을 향상시키세요.
  • Amazon RDS 예약 인스턴스를 구매하면 온디맨드 가격보다 최대 60% 할인된 가격으로 이용할 수 있습니다.
  • CloudWatch를 활용하여 RDS 인스턴스의 성능 지표를 모니터링하고 알림을 설정하세요.
  • 보안 그룹을 통해 데이터베이스 접근을 필요한 IP와 포트로만 제한하세요.

마치며

지금까지 Amazon RDS에 대해 알아보았습니다. 클라우드 환경에서 관계형 데이터베이스를 관리하는 복잡성을 크게 줄여주는 서비스로, 개발자가 인프라 관리보다 애플리케이션 개발에 집중할 수 있게 해줍니다. 처음에는 어렵게 느껴질 수 있지만, 이 글이 여러분에게 도움이 되었기를 바랍니다!

혹시 궁금한 점이 있으시거나, 더 알고 싶은 내용이 있으시면 댓글로 남겨주세요.

참고 자료 🔖


#AmazonRDS #AWS #클라우드 #데이터베이스 #관계형데이터베이스

728x90

'600===Dev AWS > RDS' 카테고리의 다른 글

Amazon RDS Introduced  (0) 2024.05.29