Skip to content
Published on

AWS 핵심 서비스 완전 가이드 2025: EC2, S3, RDS, Lambda, VPC, IAM 총정리

Authors

목차

1. AWS 글로벌 인프라

Amazon Web Services(AWS)는 전 세계에 걸친 방대한 인프라를 운영하고 있다. 2025년 기준으로 33개 이상의 리전(Region), 105개 이상의 가용 영역(Availability Zone), 600개 이상의 엣지 로케이션(Edge Location)을 보유하고 있다.

1.1 리전(Region)

리전은 지리적으로 분리된 독립적인 데이터 센터 클러스터다. 각 리전은 최소 3개의 가용 영역으로 구성된다.

주요 리전:

리전 코드위치특징
us-east-1미국 버지니아가장 오래되고 서비스가 가장 많음
ap-northeast-2한국 서울한국 사용자 대상 최적
ap-northeast-1일본 도쿄아시아 태평양 주요 거점
eu-west-1아일랜드유럽 주요 거점
ap-southeast-1싱가포르동남아시아 커버리지

1.2 리전 선택 기준

리전을 선택할 때 고려해야 할 4가지 핵심 기준이 있다.

  1. 지연 시간(Latency): 사용자와 가장 가까운 리전 선택
  2. 규정 준수(Compliance): 데이터 주권법, GDPR 등 법적 요구사항
  3. 서비스 가용성: 모든 AWS 서비스가 모든 리전에서 제공되지는 않음
  4. 비용: 리전마다 가격이 다르며, us-east-1이 일반적으로 가장 저렴

1.3 가용 영역(Availability Zone)

가용 영역은 리전 내의 독립적인 데이터 센터다. 각 AZ는 독립된 전원, 냉각, 네트워킹을 갖추고 있으며, AZ 간에는 저지연 네트워크로 연결된다.

리전: ap-northeast-2 (서울)
├── AZ: ap-northeast-2a
├── AZ: ap-northeast-2b
├── AZ: ap-northeast-2c
└── AZ: ap-northeast-2d

1.4 엣지 로케이션과 로컬 존

  • 엣지 로케이션: CloudFront CDN 캐시 서버가 위치한 곳. 전 세계 600개 이상
  • 로컬 존(Local Zone): 대도시에 위치한 AWS 인프라 확장. 극도로 낮은 지연 시간이 필요한 경우 사용
  • Wavelength Zone: 5G 네트워크 엣지에 위치한 AWS 인프라

2. EC2 (Elastic Compute Cloud)

EC2는 AWS에서 가장 기본이 되는 컴퓨팅 서비스다. 가상 서버(인스턴스)를 생성하여 다양한 워크로드를 실행할 수 있다.

2.1 인스턴스 타입

EC2 인스턴스는 사용 목적에 따라 여러 패밀리로 분류된다.

패밀리대표 타입용도vCPU:메모리 비율
범용(General)t3, m6i, m7g웹 서버, 개발 환경1:4
컴퓨팅 최적화c7g, c6i배치 처리, HPC1:2
메모리 최적화r6g, r6i, x2idn인메모리 DB, 캐시1:8 이상
스토리지 최적화i3, i3en, d3데이터 웨어하우스높은 IOPS
GPU 인스턴스p4d, p5, g5ML 학습, 그래픽GPU 포함

인스턴스 네이밍 규칙:

m6i.xlarge
│││  └─── 크기 (nano, micro, small, medium, large, xlarge, 2xlarge...)
│││
││└───── 추가 기능 (i=Intel, g=Graviton, a=AMD, n=네트워크 강화)
│└────── 세대 (숫자가 클수록 최신)
└─────── 패밀리 (t=버스트, m=범용, c=컴퓨팅, r=메모리...)

2.2 AMI, User Data, Key Pairs

**AMI (Amazon Machine Image)**는 인스턴스를 시작하는 데 필요한 정보를 담은 템플릿이다.

# AWS CLI로 최신 Amazon Linux 2023 AMI 조회
aws ec2 describe-images \
  --owners amazon \
  --filters "Name=name,Values=al2023-ami-2023.*-x86_64" \
  --query "sort_by(Images, &CreationDate)[-1].ImageId" \
  --output text

User Data는 인스턴스 시작 시 자동으로 실행되는 스크립트다.

#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "Hello from EC2" > /var/www/html/index.html

Key Pairs는 SSH 접속에 사용되는 퍼블릭/프라이빗 키 쌍이다. EC2 인스턴스에는 퍼블릭 키가 저장되고, 사용자는 프라이빗 키로 접속한다.

2.3 요금 모델

EC2는 4가지 주요 요금 모델을 제공한다.

요금 모델할인율약정 기간적합한 워크로드
온디맨드(On-Demand)기준 가격없음단기, 예측 불가
예약 인스턴스(Reserved)최대 72%1년 또는 3년안정적, 예측 가능
스팟 인스턴스(Spot)최대 90%없음 (중단 가능)배치 처리, CI/CD
Savings Plans최대 72%1년 또는 3년유연한 사용 패턴

스팟 인스턴스 사용 예시:

# 스팟 인스턴스 요청
aws ec2 request-spot-instances \
  --instance-count 1 \
  --type "one-time" \
  --launch-specification '{
    "ImageId": "ami-0abcdef1234567890",
    "InstanceType": "c5.xlarge",
    "KeyName": "my-key-pair"
  }'

2.4 Auto Scaling Group

Auto Scaling Group(ASG)은 트래픽 변화에 따라 EC2 인스턴스 수를 자동으로 조절한다.

핵심 구성 요소:

  1. Launch Template: 인스턴스 시작 시 사용할 AMI, 인스턴스 타입, 보안 그룹 등 정의
  2. 스케일링 정책: 언제 확장/축소할지 결정하는 규칙
  3. Cooldown Period: 스케일링 작업 사이의 대기 시간
# CloudFormation으로 ASG 정의 예시
AutoScalingGroup:
  Type: AWS::AutoScaling::AutoScalingGroup
  Properties:
    LaunchTemplate:
      LaunchTemplateId: !Ref LaunchTemplate
      Version: !GetAtt LaunchTemplate.LatestVersionNumber
    MinSize: 2
    MaxSize: 10
    DesiredCapacity: 4
    TargetGroupARNs:
      - !Ref ALBTargetGroup
    VPCZoneIdentifier:
      - !Ref PrivateSubnet1
      - !Ref PrivateSubnet2

스케일링 정책 종류:

  • Target Tracking: CPU 사용률 70% 유지 등 목표 지표를 설정
  • Step Scaling: 지표 값에 따라 단계적으로 확장/축소
  • Scheduled Scaling: 예정된 시간에 인스턴스 수 조절 (예: 매일 오전 9시 확장)
  • Predictive Scaling: ML 기반으로 트래픽 패턴을 예측하여 사전 확장

2.5 배치 그룹(Placement Groups)

전략설명사용 사례
Cluster단일 AZ 내 인스턴스를 밀집 배치HPC, 저지연 네트워크
Spread인스턴스를 서로 다른 하드웨어에 분산고가용성이 중요한 앱
Partition인스턴스를 논리적 파티션으로 분할Hadoop, Cassandra

2.6 EBS (Elastic Block Store)

EBS는 EC2 인스턴스에 연결하는 블록 스토리지 볼륨이다.

볼륨 타입용도최대 IOPS최대 처리량
gp3범용 SSD (기본)16,0001,000 MB/s
io2 Block Express고성능 SSD256,0004,000 MB/s
st1처리량 최적화 HDD500500 MB/s
sc1콜드 HDD250250 MB/s
# EBS 스냅샷 생성
aws ec2 create-snapshot \
  --volume-id vol-0123456789abcdef0 \
  --description "Daily backup"

# 스냅샷에서 볼륨 복원
aws ec2 create-volume \
  --snapshot-id snap-0123456789abcdef0 \
  --availability-zone ap-northeast-2a \
  --volume-type gp3

3. S3 (Simple Storage Service)

S3는 AWS의 객체 스토리지 서비스로, 무제한에 가까운 용량과 99.999999999%(11 나인) 내구성을 제공한다.

3.1 스토리지 클래스

스토리지 클래스가용성최소 보관 기간검색 비용사용 사례
Standard99.99%없음없음자주 접근하는 데이터
Intelligent-Tiering99.9%없음모니터링 비용접근 패턴이 변하는 데이터
Standard-IA99.9%30일GB당 과금월 1회 미만 접근
One Zone-IA99.5%30일GB당 과금재생성 가능한 데이터
Glacier Instant99.9%90일GB당 과금분기 1회 접근, 즉시 검색
Glacier Flexible99.99%90일GB당 + 검색 시간연 1-2회, 분-시간 검색
Glacier Deep Archive99.99%180일GB당 + 검색 시간규정 준수용, 12시간 검색

3.2 수명 주기 정책

수명 주기 정책으로 데이터를 자동으로 저비용 스토리지 클래스로 전환하거나 삭제할 수 있다.

{
  "Rules": [
    {
      "ID": "ArchiveAndDelete",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "logs/"
      },
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD_IA"
        },
        {
          "Days": 90,
          "StorageClass": "GLACIER"
        }
      ],
      "Expiration": {
        "Days": 365
      }
    }
  ]
}

3.3 버전 관리와 복제

버전 관리(Versioning): 객체의 모든 변경 이력을 보존한다. 실수로 삭제하거나 덮어써도 이전 버전으로 복원할 수 있다.

# 버전 관리 활성화
aws s3api put-bucket-versioning \
  --bucket my-bucket \
  --versioning-configuration Status=Enabled

# 특정 버전의 객체 조회
aws s3api list-object-versions \
  --bucket my-bucket \
  --prefix config.json

**교차 리전 복제(CRR)**와 동일 리전 복제(SRR):

  • CRR: 재해 복구, 규정 준수를 위해 다른 리전으로 자동 복제
  • SRR: 로그 집계, 개발/운영 환경 간 데이터 동기화

3.4 Presigned URL과 이벤트 알림

Presigned URL: 인증 없이 임시로 S3 객체에 접근할 수 있는 URL을 생성한다.

import boto3

s3_client = boto3.client('s3')

# 다운로드용 Presigned URL (1시간 유효)
url = s3_client.generate_presigned_url(
    'get_object',
    Params={
        'Bucket': 'my-bucket',
        'Key': 'reports/annual-2025.pdf'
    },
    ExpiresIn=3600
)
print(f"Download URL: {url}")

S3 이벤트 알림: 객체 생성, 삭제 등의 이벤트를 Lambda, SQS, SNS로 전달한다.

# 이벤트 알림 설정 예시 (CloudFormation)
S3Bucket:
  Type: AWS::S3::Bucket
  Properties:
    NotificationConfiguration:
      LambdaConfigurations:
        - Event: 's3:ObjectCreated:*'
          Filter:
            S3Key:
              Rules:
                - Name: prefix
                  Value: uploads/
          Function: !GetAtt ProcessingFunction.Arn

3.5 S3 Select와 Transfer Acceleration

  • S3 Select: SQL 쿼리로 객체 내부의 특정 데이터만 추출. CSV, JSON, Parquet 지원
  • S3 Transfer Acceleration: CloudFront 엣지 로케이션을 활용하여 장거리 업로드 속도 향상

3.6 정적 웹사이트 호스팅

S3를 사용하여 정적 웹사이트를 호스팅할 수 있다.

# 버킷을 정적 웹사이트로 설정
aws s3 website s3://my-website-bucket/ \
  --index-document index.html \
  --error-document error.html

# 웹사이트 파일 동기화
aws s3 sync ./build/ s3://my-website-bucket/ \
  --delete \
  --cache-control "max-age=31536000"

4. VPC (Virtual Private Cloud)

VPC는 AWS 클라우드 내에서 논리적으로 격리된 가상 네트워크를 구성할 수 있게 해준다.

4.1 CIDR 표기법과 서브넷

CIDR(Classless Inter-Domain Routing)로 IP 주소 범위를 정의한다.

10.0.0.0/1665,536IP (10.0.0.0 ~ 10.0.255.255)
10.0.1.0/24256IP   (10.0.1.0 ~ 10.0.1.255)
10.0.1.0/2816IP    (10.0.1.0 ~ 10.0.1.15)

퍼블릭 서브넷 vs 프라이빗 서브넷:

  • 퍼블릭 서브넷: Internet Gateway로의 라우팅이 있는 서브넷. 웹 서버, 로드 밸런서 배치
  • 프라이빗 서브넷: 인터넷에 직접 접근이 불가능한 서브넷. DB, 애플리케이션 서버 배치

4.2 3-Tier 아키텍처 설계

┌─────────────────────────────────────────────────────────┐
VPC: 10.0.0.0/16│                                                          │
│  ┌────────────────────┐  ┌────────────────────┐         │
│  │   Public Subnet     │  │   Public Subnet     │         │
│  │   10.0.1.0/24       │  │   10.0.2.0/24       │         │
   (AZ-a)   (AZ-b)            │         │
│  │                     │  │                     │         │
│  │  ┌──────────────┐  │  │  ┌──────────────┐  │         │
│  │  │  ALB / NAT GW │  │  │  │  ALB / NAT GW │  │         │
│  │  └──────────────┘  │  │  └──────────────┘  │         │
│  └────────────────────┘  └────────────────────┘         │
│            │                        │                    │
│  ┌────────────────────┐  ┌────────────────────┐         │
│  │  Private Subnet     │  │  Private Subnet     │         │
  (App) 10.0.3.0/24  (App) 10.0.4.0/24  │         │
│  │                     │  │                     │         │
│  │  ┌──────────────┐  │  │  ┌──────────────┐  │         │
│  │  │  EC2 / ECS    │  │  │  │  EC2 / ECS    │  │         │
│  │  └──────────────┘  │  │  └──────────────┘  │         │
│  └────────────────────┘  └────────────────────┘         │
│            │                        │                    │
│  ┌────────────────────┐  ┌────────────────────┐         │
│  │  Private Subnet     │  │  Private Subnet     │         │
  (DB) 10.0.5.0/24  (DB) 10.0.6.0/24   │         │
│  │                     │  │                     │         │
│  │  ┌──────────────┐  │  │  ┌──────────────┐  │         │
│  │  │  RDS Primary  │  │  │  │  RDS Standby  │  │         │
│  │  └──────────────┘  │  │  └──────────────┘  │         │
│  └────────────────────┘  └────────────────────┘         │
│                                                          │
│  ┌──────────┐                                            │
│  │  IGW      │  ← Internet Gateway│  └──────────┘                                            │
└─────────────────────────────────────────────────────────┘

4.3 Internet Gateway와 NAT Gateway

  • Internet Gateway(IGW): VPC와 인터넷 간의 통신을 가능하게 하는 게이트웨이
  • NAT Gateway: 프라이빗 서브넷의 인스턴스가 인터넷에 접근할 수 있게 하되, 외부에서의 인바운드 접근은 차단
# NAT Gateway 생성
aws ec2 create-nat-gateway \
  --subnet-id subnet-0123456789abcdef0 \
  --allocation-id eipalloc-0123456789abcdef0

4.4 보안 그룹 vs NACL

항목보안 그룹(Security Group)네트워크 ACL(NACL)
적용 범위인스턴스(ENI) 수준서브넷 수준
상태Stateful (응답 자동 허용)Stateless (명시적 허용 필요)
규칙 유형허용 규칙만허용 + 거부 규칙
규칙 평가모든 규칙 평가번호 순서대로 평가
기본 동작모든 아웃바운드 허용, 인바운드 거부모든 트래픽 허용
# 보안 그룹 생성 및 규칙 추가
aws ec2 create-security-group \
  --group-name web-sg \
  --description "Web server security group" \
  --vpc-id vpc-0123456789abcdef0

aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 443 \
  --cidr 0.0.0.0/0

4.5 VPC 피어링과 Transit Gateway

  • VPC Peering: 두 VPC 간 프라이빗 네트워크 연결. 전이적 라우팅 불가(A-B, B-C 연결 시 A-C 직접 통신 불가)
  • Transit Gateway: 중앙 허브를 통해 여러 VPC와 온프레미스 네트워크를 연결. 전이적 라우팅 지원

4.6 VPC 엔드포인트

VPC 엔드포인트를 사용하면 인터넷을 거치지 않고 AWS 서비스에 접근할 수 있다.

타입지원 서비스비용
Gateway EndpointS3, DynamoDB무료
Interface Endpoint대부분의 AWS 서비스시간당 + 데이터 전송 비용

4.7 VPC Flow Logs

VPC Flow Logs는 네트워크 인터페이스에서 송수신되는 IP 트래픽 정보를 캡처한다.

# Flow Log 레코드 예시
# version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status
2 123456789012 eni-abc123 10.0.1.5 52.94.76.1 49761 443 6 12 1024 1625000000 1625000060 ACCEPT OK

5. IAM (Identity and Access Management)

IAM은 AWS 리소스에 대한 접근을 안전하게 제어하는 서비스다.

5.1 IAM 구성 요소

  • 사용자(User): 개별 사람 또는 서비스를 나타내는 엔티티
  • 그룹(Group): 동일한 권한이 필요한 사용자들의 모음
  • 역할(Role): AWS 서비스나 외부 사용자가 임시로 맡을 수 있는 권한 집합
  • 정책(Policy): JSON 형식으로 권한을 정의한 문서

5.2 정책 JSON 구조

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowS3ReadAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket",
        "arn:aws:s3:::my-bucket/*"
      ],
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "203.0.113.0/24"
        }
      }
    }
  ]
}

정책 구성 요소:

  • Effect: Allow 또는 Deny
  • Action: 허용/거부할 API 작업 (예: s3:GetObject)
  • Resource: 대상 리소스의 ARN
  • Condition: 조건부 적용 (IP, 시간, 태그 등)

5.3 EC2용 IAM 역할 (인스턴스 프로파일)

EC2 인스턴스에 IAM 역할을 부여하면 액세스 키 없이 AWS 서비스에 접근할 수 있다.

# 인스턴스 프로파일 생성 및 역할 연결
aws iam create-instance-profile \
  --instance-profile-name EC2-S3-ReadOnly

aws iam add-role-to-instance-profile \
  --instance-profile-name EC2-S3-ReadOnly \
  --role-name S3ReadOnlyRole

# EC2 인스턴스에 프로파일 연결
aws ec2 associate-iam-instance-profile \
  --instance-id i-0123456789abcdef0 \
  --iam-instance-profile Name=EC2-S3-ReadOnly

5.4 교차 계정 접근

다른 AWS 계정의 리소스에 접근할 때는 IAM 역할의 신뢰 관계(Trust Policy)를 활용한다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

5.5 IAM 보안 모범 사례

  1. 루트 계정 사용 금지: 루트 계정에는 MFA만 설정하고 일상 작업에는 사용하지 않는다
  2. MFA 활성화: 모든 사용자에게 다중 인증(MFA)을 요구한다
  3. 최소 권한 원칙: 필요한 최소한의 권한만 부여한다
  4. 액세스 키 로테이션: 90일마다 액세스 키를 교체한다
  5. IAM Access Analyzer: 외부 접근 가능한 리소스를 분석하고 모니터링한다
  6. 임시 자격 증명 사용: 장기 자격 증명 대신 STS를 통한 임시 자격 증명을 사용한다

6. RDS (Relational Database Service)

RDS는 관리형 관계형 데이터베이스 서비스로, 패치, 백업, 장애 조치를 자동으로 처리한다.

6.1 지원 엔진

엔진최신 버전특징
Amazon AuroraMySQL 8.0/PostgreSQL 16 호환상용 DB 성능, 오픈소스 가격
MySQL8.0가장 보편적인 오픈소스 DB
PostgreSQL16고급 기능, 확장성
MariaDB10.11MySQL 호환, 커뮤니티 주도
Oracle19c/21c엔터프라이즈 워크로드
SQL Server2022Windows 기반 애플리케이션

6.2 Multi-AZ와 Read Replica

Multi-AZ (고가용성):

┌──────────────────┐     동기 복제      ┌──────────────────┐
Primary (AZ-a)   │ ──────────────── │  Standby (AZ-b)│                   │                   │                   │
│  읽기 + 쓰기      │    자동 장애조치    │  대기 (접근 불가)└──────────────────┘                   └──────────────────┘

Read Replica (읽기 확장):

                    ┌──────────────────┐
Read Replica 1   │  ← 읽기 전용
               ┌──▶│  (같은 리전)               │    └──────────────────┘
┌──────────────┤    ┌──────────────────┐
Primary      │──▶│  Read Replica 2   │  ← 읽기 전용
  (읽기+쓰기)  (같은 리전)└──────────────┤    └──────────────────┘
               │    ┌──────────────────┐
               └──▶│  Read Replica 3   │  ← 교차 리전 복제
                      (다른 리전)                    └──────────────────┘

6.3 Aurora Serverless v2

Aurora Serverless v2는 워크로드에 따라 자동으로 용량을 조절한다.

  • ACU(Aurora Capacity Unit): 0.5~128 ACU 범위에서 자동 스케일링
  • 초 단위 과금: 실제 사용한 ACU만큼만 비용 발생
  • 혼합 구성: 프로비저닝된 인스턴스와 서버리스 인스턴스를 동일 클러스터에 혼합 가능
# Aurora Serverless v2 클러스터 생성
aws rds create-db-cluster \
  --db-cluster-identifier my-aurora-cluster \
  --engine aurora-postgresql \
  --engine-version 16.1 \
  --serverless-v2-scaling-configuration MinCapacity=0.5,MaxCapacity=16 \
  --master-username admin \
  --master-user-password MySecurePassword123

6.4 자동 백업과 파라미터 그룹

  • 자동 백업: 매일 자동 스냅샷 생성 (최대 35일 보관)
  • 특정 시점 복원(PITR): 5분 단위로 특정 시점의 데이터를 복원
  • 파라미터 그룹: DB 엔진 설정을 커스터마이즈

6.5 RDS Proxy

RDS Proxy는 데이터베이스 연결을 풀링하여 관리한다. Lambda와 같이 짧은 수명의 연결이 많은 서버리스 환경에서 특히 유용하다.

Lambda 함수들 ──▶ RDS Proxy ──▶ RDS 인스턴스
(수천 개 연결)    (커넥션 풀링)   (소수의 연결)

7. Lambda (서버리스 컴퓨팅)

Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스다.

7.1 이벤트 기반 아키텍처

Lambda는 다양한 AWS 서비스의 이벤트에 의해 트리거된다.

┌─────────────┐     ┌──────────┐     ┌─────────────┐
API Gateway  │────▶│          │────▶│ DynamoDB└─────────────┘     │          │     └─────────────┘
                    │          │
┌─────────────┐     │  Lambda  │     ┌─────────────┐
S3 Event     │────▶│ Function │────▶│ S3└─────────────┘     │          │     └─────────────┘
                    │          │
┌─────────────┐     │          │     ┌─────────────┐
SQS / SNS    │────▶│          │────▶│ SQS / SNS└─────────────┘     │          │     └─────────────┘
                    │          │
┌─────────────┐     │          │     ┌─────────────┐
EventBridge  │────▶│          │────▶│ Step Func.  
└─────────────┘     └──────────┘     └─────────────┘

7.2 Lambda 함수 예시

import json
import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')

def lambda_handler(event, context):
    """API Gateway에서 호출되는 Lambda 함수"""

    http_method = event['httpMethod']
    path = event['path']

    if http_method == 'GET':
        response = table.scan()
        return {
            'statusCode': 200,
            'headers': {
                'Content-Type': 'application/json',
                'Access-Control-Allow-Origin': '*'
            },
            'body': json.dumps(response['Items'], default=str)
        }

    elif http_method == 'POST':
        body = json.loads(event['body'])
        table.put_item(Item=body)
        return {
            'statusCode': 201,
            'body': json.dumps({'message': 'Created successfully'})
        }

    return {
        'statusCode': 400,
        'body': json.dumps({'message': 'Unsupported method'})
    }

7.3 콜드 스타트 최적화

Lambda 함수가 처음 호출되거나 오랜 시간 후 호출될 때 콜드 스타트가 발생한다.

최적화 방법:

  1. Provisioned Concurrency: 미리 인스턴스를 워밍업하여 콜드 스타트 제거
  2. 메모리 크기 최적화: 메모리를 늘리면 CPU도 비례하여 증가
  3. 패키지 크기 축소: 불필요한 의존성 제거
  4. Lambda SnapStart: Java 함수의 스냅샷 기반 초기화 (최대 10배 빠른 시작)
  5. Lambda Layers: 공통 라이브러리를 Layer로 분리하여 재사용
# Provisioned Concurrency 설정
aws lambda put-provisioned-concurrency-config \
  --function-name my-function \
  --qualifier prod \
  --provisioned-concurrent-executions 10

7.4 Lambda@Edge

Lambda@Edge는 CloudFront 엣지 로케이션에서 Lambda 함수를 실행한다. A/B 테스팅, 헤더 조작, URL 리다이렉트 등에 활용된다.

7.5 요금 모델

  • 요청 수: 월 100만 건 무료, 이후 100만 건당 약 0.20 USD
  • 실행 시간: GB-초 단위 과금 (메모리 x 실행 시간)
  • Provisioned Concurrency: 프로비저닝 용량에 따른 추가 비용

8. DynamoDB

DynamoDB는 완전관리형 NoSQL 데이터베이스로, 밀리초 단위의 일관된 응답 시간을 제공한다.

8.1 데이터 모델

┌─────────────────────────────────────────────┐
Table: Orders│                                              │
Partition Key: userId (String)Sort Key: orderDate (String)│                                              │
│  ┌──────────┬────────────┬────────┬────────┐│
│  │ userId   │ orderDate   │ total  │ status ││
│  ├──────────┼────────────┼────────┼────────┤│
│  │ user-0012025-01-1529900  │ shipped││
│  │ user-0012025-03-2015000  │ pending││
│  │ user-0022025-02-1089000  │ delivered│
│  └──────────┴────────────┴────────┴────────┘│
│                                              │
GSI: StatusIndexPartition Key: status                       │
Sort Key: orderDate                         │
└─────────────────────────────────────────────┘

인덱스:

  • GSI (Global Secondary Index): 다른 파티션 키와 정렬 키로 쿼리 가능
  • LSI (Local Secondary Index): 동일 파티션 키, 다른 정렬 키 (테이블 생성 시에만 추가 가능)

8.2 용량 모드

모드특징적합한 사용 사례
온디맨드자동 스케일링, 사용량 기반 과금예측 불가한 트래픽
프로비저닝RCU/WCU 미리 설정, Auto Scaling 가능예측 가능한 트래픽, 비용 절감

8.3 DynamoDB Streams와 TTL

  • DynamoDB Streams: 테이블 변경 사항을 실시간으로 캡처. Lambda 트리거로 이벤트 처리
  • TTL (Time to Live): 만료 시간을 설정하여 오래된 항목을 자동 삭제

8.4 단일 테이블 설계 패턴

DynamoDB에서는 단일 테이블에 여러 엔티티를 저장하는 패턴이 권장된다.

PK          | SK              | 데이터
------------|-----------------|------------------
USER#001    | PROFILE         | name, email, ...
USER#001    | ORDER#2025-001  | total, status, ...
USER#001    | ORDER#2025-002  | total, status, ...
ORG#ABC     | METADATA        | orgName, plan, ...
ORG#ABC     | MEMBER#001      | role, joinedAt, ...

9. CloudFront (CDN)

CloudFront는 AWS의 CDN(Content Delivery Network) 서비스로, 전 세계 엣지 로케이션에서 콘텐츠를 캐싱하여 빠르게 전달한다.

9.1 배포 구성

사용자 ──▶ CloudFront Edge ──▶ Origin
                │                 │
          캐시 히트 시           캐시 미스 시
          즉시 응답 반환         오리진에서 가져옴

오리진 종류:

  • S3 버킷 (정적 콘텐츠)
  • ALB / EC2 (동적 콘텐츠)
  • API Gateway (API)
  • 커스텀 오리진 (온프레미스 서버)

9.2 캐시 정책과 Origin Shield

캐시 정책(Cache Policy): 어떤 요소(헤더, 쿼리 스트링, 쿠키)를 캐시 키에 포함할지 정의한다.

Origin Shield: 오리진 앞에 추가 캐싱 레이어를 두어 오리진 부하를 줄인다.

9.3 Lambda@Edge vs CloudFront Functions

항목Lambda@EdgeCloudFront Functions
실행 위치리전 엣지 캐시엣지 로케이션
최대 실행 시간5~30초1ms
메모리128~10,240 MB2 MB
네트워크 접근가능불가
비용상대적으로 높음매우 저렴
사용 사례A/B 테스팅, 인증URL 리라이트, 헤더 조작

10. 컨테이너 서비스

10.1 ECS (Elastic Container Service)

ECS는 Docker 컨테이너를 실행하고 관리하는 오케스트레이션 서비스다.

Fargate vs EC2 시작 유형:

항목FargateEC2
인프라 관리AWS가 관리사용자가 관리
가격vCPU + 메모리 기반EC2 인스턴스 비용
스케일링태스크 단위인스턴스 + 태스크
GPU 지원불가가능
적합한 상황간편한 운영GPU, 대규모 비용 최적화

10.2 EKS (Elastic Kubernetes Service)

EKS는 관리형 Kubernetes 서비스다. 컨트롤 플레인을 AWS가 관리하며, 워커 노드는 EC2 또는 Fargate로 실행할 수 있다.

10.3 ECR (Elastic Container Registry)

ECR은 Docker 이미지를 저장하는 프라이빗 컨테이너 레지스트리다.

# ECR에 이미지 푸시
aws ecr get-login-password --region ap-northeast-2 | \
  docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com

docker tag my-app:latest 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:latest
docker push 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:latest

11. 기타 핵심 서비스

11.1 메시징 서비스

SQS (Simple Queue Service):

  • 표준 대기열: 무제한 처리량, 최소 1회 전달 (순서 보장 안 됨)
  • FIFO 대기열: 정확히 1회 전달, 순서 보장 (초당 3,000 메시지)

SNS (Simple Notification Service):

  • Pub/Sub 메시징 모델
  • 다수의 구독자에게 동시 알림 (팬아웃 패턴)

EventBridge:

  • 이벤트 기반 아키텍처를 위한 서버리스 이벤트 버스
  • 이벤트 패턴 매칭, 스케줄 기반 트리거
  • 100개 이상의 AWS 서비스 및 SaaS 통합

11.2 Step Functions

Step Functions는 여러 AWS 서비스를 시각적 워크플로로 조합하는 오케스트레이션 서비스다.

{
  "Comment": "주문 처리 워크플로",
  "StartAt": "ValidateOrder",
  "States": {
    "ValidateOrder": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:ap-northeast-2:123456789012:function:validate",
      "Next": "ProcessPayment"
    },
    "ProcessPayment": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:ap-northeast-2:123456789012:function:payment",
      "Next": "ShipOrder",
      "Catch": [
        {
          "ErrorEquals": ["PaymentFailed"],
          "Next": "NotifyFailure"
        }
      ]
    },
    "ShipOrder": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:ap-northeast-2:123456789012:function:ship",
      "End": true
    },
    "NotifyFailure": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:ap-northeast-2:123456789012:function:notify",
      "End": true
    }
  }
}

11.3 모니터링과 감사

CloudWatch:

  • 메트릭 수집 및 대시보드
  • 로그 그룹과 로그 인사이트
  • 경보(Alarm) 설정 및 자동 대응

CloudTrail:

  • 모든 API 호출 기록
  • 보안 감사 및 규정 준수
  • 이벤트 히스토리 90일 기본 저장

11.4 Route 53

Route 53는 AWS의 관리형 DNS 서비스다.

라우팅 정책:

정책설명
Simple단일 리소스로 라우팅
Weighted가중치 기반 트래픽 분배
Latency가장 낮은 지연 시간의 리전으로 라우팅
Failover장애 시 대체 리소스로 전환
Geolocation사용자 위치 기반 라우팅
Multi-Value다수의 건강한 리소스를 반환

12. 비용 최적화 전략

12.1 인스턴스 최적화

  1. Right-sizing: AWS Compute Optimizer를 활용하여 인스턴스 크기 최적화
  2. Reserved Instances: 안정적 워크로드에 1년/3년 예약으로 최대 72% 절감
  3. Spot Instances: 중단 가능한 워크로드에 최대 90% 절감
  4. Savings Plans: 컴퓨팅 사용량 약정으로 유연하게 할인

12.2 스토리지 최적화

  • S3 수명 주기 정책으로 자동 아카이빙
  • EBS 볼륨 타입 최적화 (gp2에서 gp3로 전환 시 최대 20% 절감)
  • 사용하지 않는 EBS 스냅샷과 볼륨 정리

12.3 비용 관리 도구

도구기능
Cost Explorer비용 분석 및 예측
Budgets예산 설정 및 알림
Cost Anomaly Detection비정상 비용 자동 감지
Trusted Advisor비용 절감 권고사항 제공

12.4 태깅 전략

모든 리소스에 일관된 태깅을 적용하여 비용을 팀/프로젝트/환경별로 추적한다.

# 필수 태그 예시
aws ec2 create-tags \
  --resources i-0123456789abcdef0 \
  --tags \
    Key=Environment,Value=Production \
    Key=Team,Value=Backend \
    Key=Project,Value=UserService \
    Key=CostCenter,Value=CC-1234

12.5 Well-Architected Framework

AWS Well-Architected Framework의 6가지 기둥:

  1. 운영 우수성(Operational Excellence): 자동화, IaC, 관찰 가능성
  2. 보안(Security): IAM, 암호화, 네트워크 보안
  3. 안정성(Reliability): Multi-AZ, 자동 복구, 재해 복구
  4. 성능 효율성(Performance Efficiency): 적절한 리소스 선택, 모니터링
  5. 비용 최적화(Cost Optimization): 사용한 만큼만 과금, 예약
  6. 지속 가능성(Sustainability): 에너지 효율, 리소스 최적화

13. 실전 퀴즈

아래 퀴즈로 학습 내용을 점검해보자.

Q1. S3 버킷에 저장된 객체가 30일 후 Standard-IA로, 90일 후 Glacier로 이동하고, 365일 후 삭제되도록 하려면 어떤 기능을 사용해야 하는가?

정답: S3 수명 주기 정책(Lifecycle Policy)

수명 주기 정책을 사용하면 Transition 규칙으로 스토리지 클래스를 자동 전환하고, Expiration 규칙으로 객체를 자동 삭제할 수 있다. 이를 통해 비용을 크게 절감할 수 있다.

Q2. Lambda 함수의 콜드 스타트를 완전히 제거하려면 어떤 기능을 사용해야 하는가?

정답: Provisioned Concurrency

Provisioned Concurrency는 Lambda 실행 환경을 미리 초기화된 상태로 유지하여 콜드 스타트를 완전히 제거한다. 다만 프로비저닝된 용량에 대한 추가 비용이 발생한다.

Q3. VPC에서 프라이빗 서브넷의 인스턴스가 인터넷에 접근하되, 외부에서의 인바운드 접근은 차단하려면 어떤 서비스를 사용해야 하는가?

정답: NAT Gateway

NAT Gateway는 프라이빗 서브넷의 인스턴스가 아웃바운드 인터넷 트래픽을 전송할 수 있게 하면서, 인터넷에서의 인바운드 연결은 차단한다. NAT Gateway는 퍼블릭 서브넷에 배치해야 한다.

Q4. DynamoDB에서 특정 속성 값으로 효율적으로 쿼리하려면 어떤 인덱스를 사용해야 하는가?

정답: GSI (Global Secondary Index)

GSI를 사용하면 기존 테이블의 파티션 키와 정렬 키가 아닌 다른 속성으로도 효율적인 쿼리를 수행할 수 있다. GSI는 테이블 생성 후에도 추가할 수 있다.

Q5. Multi-AZ RDS와 Read Replica의 차이점은 무엇인가?

정답:

  • Multi-AZ: 고가용성(HA) 목적. 동기 복제, 자동 장애 조치. Standby에는 읽기 접근 불가.
  • Read Replica: 읽기 확장(Scalability) 목적. 비동기 복제. 읽기 전용으로 접근 가능. 교차 리전 복제도 지원.

Multi-AZ는 장애 시 자동으로 Standby로 전환되어 다운타임을 최소화하고, Read Replica는 읽기 트래픽을 분산하여 성능을 향상시킨다.


참고 자료

  1. AWS 공식 문서
  2. AWS Well-Architected Framework
  3. AWS 비용 최적화 가이드
  4. AWS Solutions Library
  5. AWS re:Invent 2024/2025 발표 자료
  6. AWS Skill Builder
  7. AWS Architecture Blog
  8. Amazon Aurora 사용 가이드
  9. AWS Lambda 개발자 가이드
  10. VPC 네트워킹 모범 사례
  11. DynamoDB 개발자 가이드
  12. AWS Pricing Calculator
  13. AWS Serverless Application Model (SAM)