Guider/Infra/InfraDevGuide0004
Infra#04· 38분 읽기

InfraDevGuide0004

클라우드 AWS 완전 정복

list목차(48)
 
Infra Dev Guide Series · 4단계

⛅ 클라우드 AWS 완전 정복 A-Z

EC2·S3·RDS·IAM·VPC·Lambda·CloudWatch·ELB·Auto Scaling까지
현업 인프라 엔지니어가 반드시 알아야 할 AWS 핵심 서비스 완전 마스터

🎯 대상: AWS 입문 ~ 중급자🕐 학습 기간: 3~4주⭐ 난이도: ★★★☆☆📊 실습 예제 35+

📚 Infra Dev Guide 시리즈 전체 로드맵

단계 가이드 주제 상태
1단계 InfraDevGuide0001 인프라 개념 완전 정복 (서버·네트워크·스토리지) ✅ 완료
2단계 InfraDevGuide0002 Linux 기초 완전 정복 (터미널·권한·서비스·스크립트) ✅ 완료
3단계 InfraDevGuide0003 네트워크 기초 완전 정복 (OSI·TCP/IP·DNS·VPC) ✅ 완료
4단계 InfraDevGuide0004 👉 클라우드 AWS 완전 정복 ← 현재 학습 중 🔥 학습 중
5단계 InfraDevGuide0005 Docker & 컨테이너 완전 정복 ⏱ 예정
6단계 InfraDevGuide0006 CI/CD & 자동화 완전 정복 ⏱ 예정
7단계 InfraDevGuide0007 실전 프로젝트 & 취업 전략 ⏱ 예정

📝 전체 학습 목차

챕터 제목 핵심 내용 난이도
Ch01 AWS란? — 클라우드의 모든 것 AWS 구조·리전·AZ·글로벌 인프라 ★☆☆
Ch02 IAM — 권한과 보안 관리 사용자·그룹·역할·정책·MFA·최소권한 ★★☆
Ch03 EC2 — 가상 서버 완전 정복 인스턴스 타입·AMI·키페어·EBS·배치 전략 ★★★
Ch04 VPC — 네트워크 완전 정복 서브넷·라우팅·IGW·NAT·보안그룹·NACL ★★★
Ch05 S3 — 오브젝트 스토리지 완전 정복 버킷·정책·버전관리·Lifecycle·정적 웹호스팅 ★★☆
Ch06 RDS — 관리형 데이터베이스 MySQL·PostgreSQL·백업·Multi-AZ·Read Replica ★★★
Ch07 ELB & Auto Scaling — 고가용성 ALB·NLB·ASG·Launch Template·헬스체크 ★★★
Ch08 Lambda & 서버리스 함수 생성·트리거·API Gateway·EventBridge ★★★
Ch09 CloudWatch — 모니터링 & 알림 메트릭·로그·알람·대시보드·X-Ray ★★★
Ch10 AWS CLI & 비용 관리 CLI 설정·주요 명령·Cost Explorer·절약 전략 ★★★
Ch11 현업 면접 Q&A TOP 10 AWS 현업 면접 핵심 질문 & 완벽 답변 ★★★

⛅ Chapter 01

AWS란? — 클라우드의 모든 것

왜 전 세계 기업들이 AWS를 선택하는가? AWS 구조·리전·가용영역·글로벌 인프라 완전 이해

🌐
33%

클라우드 시장점유율 1위

📊
200+

제공 서비스 수

📍
30+

전 세계 리전 수

👤
수백만

활성 고객사

📍 1-1. AWS 글로벌 인프라 — 리전 & 가용영역

AWS 글로벌 인프라 계층 구조
🌎 글로벌 (Global)
  └── 📍 리전 (Region) — 지리적으로 독립된 데이터센터 클러스터
        예: ap-northeast-2 (서울), us-east-1 (버지니아), eu-west-1 (아일랜드)
        └── 🏢 가용영역 AZ (Availability Zone) — 물리적으로 분리된 데이터센터
               서울 리전: ap-northeast-2a, ap-northeast-2b, ap-northeast-2c
               └── 💻 엣지 로케이션 (Edge Location) — CDN 캐시 포인트
                      CloudFront, Route53 → 전 세계 400+개

🌟 리전 vs 가용영역 이해

  • 리전(Region): 서울·도쿄·싱가포르 등 도시 단위. 각 리전은 완전히 독립. 다른 리전 데이터는 기본적으로 공유 안 됨.
  • 가용영역(AZ): 같은 리전 내 물리적으로 분리된 데이터센터. 전력·네트워크가 독립. 멀티 AZ 배포로 장애 격리.
  • 현업 팁: 서비스를 2개 이상 AZ에 배포해야 고가용성 확보! (ALB는 자동으로 멀티 AZ)

📊 1-2. AWS 핵심 서비스 한눈에 보기

카테고리 서비스 설명 비유
💻 컴퓨팅 EC2 가상 서버 (VM) 월세 서버
Lambda 서버리스 함수 실행 일당 알바
ECS/EKS 컨테이너 오케스트레이션 컨테이너 관리자
💾 스토리지 S3 오브젝트 스토리지 무한 창고
EBS 블록 스토리지 (EC2용 디스크) HDD 연결
📊 데이터베이스 RDS 관리형 관계형 DB DB 전담 관리자
DynamoDB 서버리스 NoSQL DB 자동화 창고
ElastiCache Redis/Memcached 캐시 메모리 메모판
🌐 네트워킹 VPC 가상 사설 클라우드 전용 아파트 단지
CloudFront CDN 서비스 전국 배송 창고
🔒 보안 IAM 권한 관리 출입증 시스템
KMS 암호화 키 관리 금고 열쇠

🔒 Chapter 02

IAM — 권한과 보안 관리 완전 정복

AWS 보안의 시작이자 끝! 사용자·그룹·역할·정책·MFA·최소권한 원칙까지

IAM(Identity and Access Management)은 AWS 리소스에 대한 접근 권한을 제어하는 서비스입니다. "누가(Who), 어떤 리소스에(What), 어떤 작업을(Action) 할 수 있는가"를 정의합니다. AWS에서 가장 먼저 이해해야 하는 핵심 서비스입니다.

📊 2-1. IAM 핵심 구성요소

👤 사용자 (User)

사람 또는 앱에 대응하는 AWS 계정. 각각 고유한 자격증명을 가짐. 콘솔 로그인 또는 액세스 키로 API 호출.

👥 그룹 (Group)

사용자의 모음. 그룹에 정책을 부여하면 그룹 내 모든 사용자에 적용. 개발팀·운영팀·읽기전용 등으로 구분.

🎪 역할 (Role)

사람이 아닌 서비스(EC2, Lambda)나 다른 계정에 부여하는 임시 권한. 액세스 키 불필요 → 보안상 우수.

📋 정책 (Policy)

JSON 문서로 권한 정의. "어떤 서비스의 어떤 작업을 어떤 리소스에 허용/거부". 사용자·그룹·역할에 첨부.

📋 IAM 정책 JSON 구조 읽는 법

{
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",           // Allow(허용) or Deny(거부)
         "Principal": "*",            // 누구에게 (Role에서 사용)
         "Action": [                  // 어떤 작업을
           "s3:GetObject",
           "s3:PutObject"
         ],
         "Resource": "arn:aws:s3:::my-bucket/*",  // 어떤 리소스에
         "Condition": {               // 조건 (선택)
           "StringEquals": {
             "aws:RequestedRegion": "ap-northeast-2"
           }
         }
       }
     ]
    }

🔓 2-2. IAM 실전 설정 — 현업 베스트 프랙티스

# 1. Root 계정 보호 (절대 일상 사용 금지!)
    # Root 계정 → MFA 활성화 → 이후 사용 금지
    
    # 2. IAM 사용자 생성 (AWS CLI)
    aws iam create-user --user-name devops-kim
    aws iam create-group --group-name DevOps
    aws iam add-user-to-group --user-name devops-kim --group-name DevOps
    
    # 3. 관리형 정책 첨부
    aws iam attach-group-policy \
      --group-name DevOps \
      --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess
    
    # 4. EC2 인스턴스에 S3 접근 역할 부여 (현업 필수 패턴)
    # EC2에 IAM Role 연결 → 코드에 키 없이 S3 접근!
    aws iam create-role \
      --role-name ec2-s3-read-role \
      --assume-role-policy-document file://trust-policy.json
    
    aws iam attach-role-policy \
      --role-name ec2-s3-read-role \
      --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
    
    # 5. MFA 강제 정책 (MFA 없으면 모든 작업 차단)
    # Condition: "Bool": {"aws:MultiFactorAuthPresent": "true"}
보안 원칙 설명 실천 방법
Root 계정 잠금 Root는 MFA 후 사용 최소화 Root에 MFA 설정, 일상 작업은 IAM 사용자 사용
최소 권한 원칙 필요한 것만 허용 Administrator 남발 금지, 서비스별 전용 정책
액세스 키 지양 키는 노출 위험 높음 EC2/Lambda는 IAM Role 사용, 키는 정기 교체
MFA 강제 2단계 인증 필수 콘솔 로그인·민감 작업에 MFA 정책 적용
CloudTrail 활성화 모든 API 호출 기록 IAM 활동 감사·이상 행위 탐지

💻 Chapter 03

EC2 — 가상 서버 완전 정복

AWS의 핵심! 인스턴스 타입·AMI·키페어·EBS·보안그룹·탄력적 IP·배치 전략 완전 마스터

📊 3-1. EC2 인스턴스 타입 가이드

패밀리 인스턴스 예시 특징 현업 사용처
범용 (T·M) t3.micro, t3.medium
m5.large, m6i.xlarge
CPU·메모리 균형, T는 버스팅 지원 웹서버, 앱서버, 개발환경
컴퓨팅 최적화 (C) c5.xlarge, c6i.2xlarge 고성능 CPU, 낮은 CPU당 비용 배치 처리, 미디어 인코딩, 게임 서버
메모리 최적화 (R·X) r5.large, r6i.4xlarge
x2idn.32xlarge
대용량 RAM, 메모리 집약 워크로드 RDS, 인메모리 캐시, 대형 DB
스토리지 최적화 (I·D) i3.xlarge, d2.xlarge NVMe SSD, 로컬 고속 스토리지 OLTP DB, NoSQL, 데이터 웨어하우스
가속 컴퓨팅 (P·G) p3.2xlarge, g4dn.xlarge GPU, FPGA, AI/ML 학습 딥러닝, 영상 처리, 과학 계산

☕ EC2 인스턴스 타입 명칭 읽는 법

m  6  i  .  xlarge
    ^  ^  ^     ^
    |  |  |     └── 크기: nano < micro < small < medium < large < xlarge < 2xlarge ...
    |  |  └──────── 추가 기능: g=Graviton, n=NVMe, d=NVMe SSD, a=AMD, i=Intel
    |  └──────────── 세대: 숫자가 클수록 최신 (6세대가 5세대보다 성능↑, 비용↓)
    └─────────────── 패밀리: t=범용/버스팅, m=범용, c=CPU, r=메모리, i=스토리지

💻 EC2 인스턴스 생성 실전 (AWS CLI)

# 키페어 생성
    aws ec2 create-key-pair \
      --key-name my-prod-key \
      --query "KeyMaterial" \
      --output text > ~/.ssh/my-prod-key.pem
    chmod 400 ~/.ssh/my-prod-key.pem
    
    # EC2 인스턴스 시작
    aws ec2 run-instances \
      --image-id ami-0c9c942bd7bf113a2 \
      --instance-type t3.medium \
      --key-name my-prod-key \
      --security-group-ids sg-12345678 \
      --subnet-id subnet-abcdef12 \
      --iam-instance-profile Name=ec2-s3-read-role \
      --user-data file://init.sh \
      --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=web-prod-01}]"
    
    # 인스턴스 상태 확인
    aws ec2 describe-instances \
      --filters "Name=tag:Name,Values=web-prod-01" \
      --query "Reservations[].Instances[].{ID:InstanceId,IP:PrivateIpAddress,State:State.Name}"
    
    # SSH 접속
    ssh -i ~/.ssh/my-prod-key.pem ubuntu@

💾 3-2. EBS & 스토리지 옵션

볼륨 타입 특징 IOPS 현업 용도
gp3 (SSD) 범용, 기본 선택 3000~16000 🏅 OS, 앱 서버 (대부분 여기)
io2 (SSD) 고성능, 저지연 최대 64000 고성능 DB, SAP HANA
st1 (HDD) 처리량 최적화 40~500 MiB/s 대용량 로그, 빅데이터
sc1 (HDD) 최저 비용 12~250 MiB/s 백업, 아카이브

✅ EC2 구매 옵션 — 비용 절약 전략

  • 온디맨드(On-Demand): 시간당 과금, 유연성 최고. 개발·테스트에 적합. 기준 비용.
  • 예약 인스턴스(Reserved): 1~3년 약정, 최대 75% 할인. 안정적 운영 서버.
  • 스팟 인스턴스(Spot): 최대 90% 할인, 언제든 종료될 수 있음. 배치 처리, ML 학습.
  • 절약 플랜(Savings Plans): 특정 사용량 약정으로 할인. 예약보다 유연.

🌐 Chapter 04

VPC — AWS 네트워크 완전 정복

퍼블릭·프라이빗 서브넷·IGW·NAT·라우팅·보안그룹·NACL — 실무 3-Tier VPC 설계 완성

🎬 4-1. 프로덕션 VPC 아키텍처 (현업 표준)

VPC: 10.0.0.0/16
    |
    ├── [Public Subnet AZ-a] 10.0.1.0/24
    |   └── ALB (Application Load Balancer)
    |   └── Bastion Host (NAT Instance 대체 가능)
    |   └── NAT Gateway (Private 서브넷의 아웃바운드 전용)
    |
    ├── [Public Subnet AZ-b] 10.0.2.0/24 (이중화)
    |   └── ALB (멀티 AZ 필수)
    |
    ├── [Private Subnet AZ-a] 10.0.11.0/24
    |   └── EC2 Web/App 서버 (ALB 타겟 그룹)
    |
    ├── [Private Subnet AZ-b] 10.0.12.0/24
    |   └── EC2 Web/App 서버 (이중화)
    |
    ├── [DB Subnet AZ-a] 10.0.21.0/24
    |   └── RDS Primary
    |
    └── [DB Subnet AZ-b] 10.0.22.0/24
        └── RDS Standby (Multi-AZ)
    
    # 라우팅 테이블
    Public RT: 0.0.0.0/0 → IGW (인터넷 직통)
    Private RT: 0.0.0.0/0 → NAT Gateway (아웃바운드만)

☕ VPC 생성 AWS CLI 실전

# VPC 생성
    VPC_ID=$(aws ec2 create-vpc --cidr-block 10.0.0.0/16 \
      --query "Vpc.VpcId" --output text)
    aws ec2 create-tags --resources $VPC_ID \
      --tags Key=Name,Value=prod-vpc
    
    # DNS 지원 활성화
    aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-support
    aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-hostnames
    
    # Public 서브넷 생성
    PUB_SUBNET=$(aws ec2 create-subnet \
      --vpc-id $VPC_ID \
      --cidr-block 10.0.1.0/24 \
      --availability-zone ap-northeast-2a \
      --query "Subnet.SubnetId" --output text)
    
    # Internet Gateway 생성 및 연결
    IGW_ID=$(aws ec2 create-internet-gateway \
      --query "InternetGateway.InternetGatewayId" --output text)
    aws ec2 attach-internet-gateway --vpc-id $VPC_ID --internet-gateway-id $IGW_ID
    
    # 라우팅 테이블 설정
    RT_ID=$(aws ec2 create-route-table --vpc-id $VPC_ID \
      --query "RouteTable.RouteTableId" --output text)
    aws ec2 create-route --route-table-id $RT_ID \
      --destination-cidr-block 0.0.0.0/0 --gateway-id $IGW_ID
    aws ec2 associate-route-table --subnet-id $PUB_SUBNET --route-table-id $RT_ID

📦 Chapter 05

S3 — 오브젝트 스토리지 완전 정복

무제한 스토리지의 비밀! 버킷·정책·버전관리·Lifecycle·정적 웹호스팅·CloudFront 연동까지

📊 5-1. S3 스토리지 클래스 완전 비교

스토리지 클래스 특징 가용성 비용/GB 용도
Standard 자주 접근하는 데이터 99.99% $0.023 🏅 기본값, 웹 자산
Intelligent-Tiering 접근 패턴 자동 최적화 99.9% $0.023+모니터링비 예측 불가한 접근 패턴
Standard-IA 가끔 접근, 빠른 조회 99.9% $0.0125 DR 백업, 30일+ 데이터
Glacier Instant 거의 안 씀, 즉시 조회 99.9% $0.004 분기 접근 데이터
Glacier Deep Archive 거의 안 씀, 12시간 복원 99.99% $0.00099 규정 준수 아카이브 7년+

☕ S3 실전 명령어 & 설정

# 버킷 생성
    aws s3 mb s3://my-company-prod-assets --region ap-northeast-2
    
    # 버전 관리 활성화 (실수로 삭제한 파일 복구 가능!)
    aws s3api put-bucket-versioning \
      --bucket my-company-prod-assets \
      --versioning-configuration Status=Enabled
    
    # 퍼블릭 액세스 차단 (보안 필수!)
    aws s3api put-public-access-block \
      --bucket my-company-prod-assets \
      --public-access-block-configuration \
      "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
    
    # 파일 업로드
    aws s3 cp ./dist/ s3://my-company-prod-assets/frontend/ --recursive
    aws s3 sync ./dist/ s3://my-company-prod-assets/frontend/ --delete
    
    # Lifecycle 정책: 30일 후 IA, 90일 후 Glacier
    aws s3api put-bucket-lifecycle-configuration \
      --bucket my-company-prod-assets \
      --lifecycle-configuration file://lifecycle.json
    
    # 정적 웹호스팅 활성화
    aws s3 website s3://my-site/ \
      --index-document index.html \
      --error-document error.html
Chapter 06
관리형 데이터베이스

RDS & 데이터베이스 완전 정복

MySQL·PostgreSQL 완전 관리형 DB | Multi-AZ | Read Replica | 백업 & 복구

6.1 RDS란? — 왜 관리형 DB를 쓰는가

RDS(Relational Database Service)는 AWS가 DB 설치·패치·백업·복구·페일오버를 모두 자동으로 처리해주는 완전 관리형 관계형 데이터베이스 서비스입니다. EC2에 MySQL을 직접 설치하는 방식과 비교하면 운영 부담이 극적으로 줄어듭니다.

// EC2 직접 설치 vs RDS 비교
항목 EC2 직접 설치 RDS
설치·구성 직접 설치 자동
OS 패치 직접 AWS 담당
자동 백업 직접 구성 기본 제공
Multi-AZ 복잡한 구성 클릭 한 번
스케일링 수동 자동(스토리지)

6.2 지원 엔진 & 선택 가이드

🐬
MySQL
웹 서비스 표준
WordPress·Laravel
🐘
PostgreSQL
고급 기능·JSON
복잡한 쿼리
Aurora
AWS 자체 엔진
MySQL 5배 성능

6.3 Multi-AZ 배포 — 고가용성의 핵심

Multi-AZ는 Primary DB와 Standby DB를 서로 다른 가용영역에 동기 복제하여 장애 시 자동 페일오버합니다. 페일오버 시간은 통상 60~120초이며 엔드포인트 DNS가 자동으로 Standby를 가리키게 됩니다.

# RDS Multi-AZ 생성 (AWS CLI)
aws rds create-db-instance \
  --db-instance-identifier mydb \
  --db-instance-class db.t3.medium \
  --engine mysql \
  --engine-version 8.0 \
  --master-username admin \
  --master-user-password MyPassword123! \
  --allocated-storage 100 \
  --multi-az true \
  --storage-type gp3 \
  --storage-encrypted true \
  --deletion-protection true
# Multi-AZ 확인
aws rds describe-db-instances \
  --db-instance-identifier mydb \
  --query "DBInstances[0].MultiAZ"

6.4 Read Replica — 읽기 성능 수평 확장

Read Replica는 Primary에서 비동기 복제된 읽기 전용 복사본입니다. SELECT 쿼리를 Read Replica로 분산하면 Primary 부하를 크게 줄일 수 있습니다. 최대 5개(Aurora는 15개)까지 생성 가능하며 다른 리전에도 생성할 수 있습니다.

# Read Replica 생성
aws rds create-db-instance-read-replica \
  --db-instance-identifier mydb-replica \
  --source-db-instance-identifier mydb \
  --db-instance-class db.t3.medium \
  --availability-zone ap-northeast-2b
# 크로스 리전 Read Replica (DR 목적)
aws rds create-db-instance-read-replica \
  --db-instance-identifier mydb-replica-us \
  --source-db-instance-identifier mydb \
  --source-region ap-northeast-2 \
  --region us-east-1

6.5 백업 & 복구 전략

구분 자동 백업 수동 스냅샷
보존 기간 1~35일 설정 무제한(삭제 전까지)
PITR 지원 (5분 단위) 미지원
삭제 시 인스턴스 삭제 시 소멸 별도 유지
비용 DB 크기만큼 무료 스냅샷 크기만큼 과금
현업 RDS 보안 체크리스트
✅ 퍼블릭 접근 비활성화 (Publicly Accessible = false)
✅ 프라이빗 서브넷에 배치 (인터넷 직접 접근 차단)
✅ DB 전용 보안그룹 — 앱 서버 IP/SG만 허용
✅ 저장 암호화 활성화 (at-rest encryption)
✅ SSL/TLS 전송 암호화 강제
✅ Parameter Group: require_secure_transport = ON
✅ 삭제 방지(Deletion Protection) 활성화
✅ 자동 백업 보존 기간 7일 이상 설정
Chapter 07
트래픽 분산 & 자동 확장

ELB & Auto Scaling 완전 정복

ALB·NLB·ASG·Launch Template | 헬스체크 | 스케일링 정책

7.1 ELB(Elastic Load Balancer) 종류 비교

구분 ALB NLB GLB
레이어 L7 (HTTP/S) L4 (TCP/UDP) L3 (IP)
주 용도 웹 앱·마이크로서비스 게임·실시간·IoT 보안 어플라이언스
라우팅 규칙 URL/헤더/쿼리 IP/포트 IP
고정 IP 미지원 지원 미지원

7.2 ALB 경로 기반 라우팅 설정

# ALB 리스너 규칙 — URL 경로별 라우팅
# /api/* → api-target-group (API 서버)
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:... \
  --priority 10 \
  --conditions "[{"Field":"path-pattern","Values":["/api/*"]}]" \
  --actions "[{"Type":"forward","TargetGroupArn":"arn:...api-tg"}]"
# /static/* → static-target-group (정적 파일 서버)
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:... \
  --priority 20 \
  --conditions "[{"Field":"path-pattern","Values":["/static/*"]}]" \
  --actions "[{"Type":"forward","TargetGroupArn":"arn:...static-tg"}]"

7.3 Auto Scaling Group (ASG) 완전 이해

ASG는 트래픽 변화에 따라 EC2 인스턴스 수를 자동으로 늘리고 줄이는 서비스입니다. 최소(Min)·최대(Max)·원하는 용량(Desired)을 설정하고 스케일링 정책을 지정하면 됩니다.

# Launch Template 생성 (ASG에서 사용)
aws ec2 create-launch-template \
  --launch-template-name web-lt \
  --launch-template-data "{\"ImageId\":\"ami-0c9c942bd7bf113a2\",\"InstanceType\":\"t3.micro\",\"KeyName\":\"my-key\",\"SecurityGroupIds\":[\"sg-0123456789\"],\"UserData\":\"$(base64 -w0 userdata.sh)\"}"
# Auto Scaling Group 생성
aws autoscaling create-auto-scaling-group \
  --auto-scaling-group-name web-asg \
  --launch-template "LaunchTemplateName=web-lt,Version=$Latest" \
  --min-size 2 \
  --max-size 10 \
  --desired-capacity 2 \
  --vpc-zone-identifier "subnet-aaa,subnet-bbb" \
  --target-group-arns arn:aws:elasticloadbalancing:...tg \
  --health-check-type ELB \
  --health-check-grace-period 300

7.4 스케일링 정책 3가지

Target Tracking
CPU 사용률 50% 유지처럼 목표값 설정
가장 권장하는 방식
Step Scaling
CPU 70% 초과 시 2대 추가, 90% 초과 시 4대 추가처럼 단계적 반응
Scheduled Scaling
매일 9시에 4대로 늘리고 18시에 2대로 줄이는 시간 기반 스케줄
현업 ASG 베스트 프랙티스
✅ 최소 2개 AZ에 분산 배포 (Multi-AZ)
✅ 헬스체크 유형: ELB (더 정확한 헬스체크)
✅ Grace Period 300초 이상 (앱 기동 시간 고려)
✅ Target Tracking 정책: CPU 50~60% 목표
✅ Cooldown Period: 300초 (스케일링 루프 방지)
✅ 인스턴스 워밍업 기간 설정으로 조기 스케일인 방지
Chapter 08
서버 없이 코드 실행

Lambda & 서버리스 완전 정복

함수 생성·트리거·API Gateway·EventBridge | Cold Start | 비용 최적화

8.1 Lambda란? — 서버리스 패러다임

Lambda는 서버를 프로비저닝하거나 관리하지 않고 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다. 요청이 들어올 때만 코드가 실행되고, 요청 수에 비례해 자동으로 스케일합니다. 비용은 실제 실행 시간(ms 단위)과 요청 수에 따라 청구됩니다.

항목 EC2 Lambda
서버 관리 필요 불필요
비용 모델 시간당 과금(미사용도) 실행 시간만 과금
최대 실행 시간 무제한 15분
스케일링 수동/ASG 설정 자동 (동시성 1만)

8.2 Lambda 함수 생성 & 배포

# Python Lambda 함수 예시 (S3 이벤트 처리)
# lambda_function.py
import json
import boto3
 
s3 = boto3.client('s3')
 
def lambda_handler(event, context):
  # S3에서 업로드된 파일 정보 추출
  bucket = event['Records'][0]['s3']['bucket']['name']
  key = event['Records'][0]['s3']['object']['key']
  
  print(f"Processing: {bucket}/{key}")
  
  return {
    'statusCode': 200,
    'body': json.dumps('OK')
  }
# CLI로 배포
zip function.zip lambda_function.py
aws lambda create-function \
  --function-name my-s3-processor \
  --runtime python3.11 \
  --role arn:aws:iam::123456789:role/lambda-role \
  --handler lambda_function.lambda_handler \
  --zip-file fileb://function.zip \
  --timeout 30 \
  --memory-size 256

8.3 API Gateway + Lambda REST API 구축

# 아키텍처: 클라이언트 → API Gateway → Lambda → DynamoDB
# 1. HTTP API 생성
aws apigatewayv2 create-api \
  --name my-api \
  --protocol-type HTTP \
  --target arn:aws:lambda:ap-northeast-2:...:function:my-func
# 2. Lambda 권한 부여 (API Gateway가 Lambda 호출 가능하도록)
aws lambda add-permission \
  --function-name my-func \
  --statement-id apigateway-invoke \
  --action lambda:InvokeFunction \
  --principal apigateway.amazonaws.com \
  --source-arn arn:aws:execute-api:.../*

8.4 EventBridge — 이벤트 기반 아키텍처

스케줄 기반 트리거
cron(0 9 * * ? *) — 매일 오전 9시 실행
배치 처리, 리포트 생성, DB 정리 등에 활용
이벤트 패턴 트리거
EC2 인스턴스 상태 변경, S3 업로드, CodePipeline 등 AWS 서비스 이벤트에 반응
Cold Start 문제 & 해결법
⚠️ Cold Start: 일정 시간 미호출 시 컨테이너가 종료되어 다음 호출 시 초기화 지연 발생 (수백ms~수초)
✅ Provisioned Concurrency: 항상 준비된 실행 환경 유지 (유료)
✅ 핑 방식: EventBridge로 5분마다 더미 호출 (저비용)
✅ 경량 런타임: Python/Node.js 사용 (Java보다 Cold Start 빠름)
✅ 패키지 최소화: 의존성 라이브러리 줄이기
Chapter 09
모니터링 & 알림

CloudWatch 완전 정복

메트릭·로그·알람·대시보드 | EC2·RDS·Lambda 모니터링 실전

9.1 CloudWatch 핵심 구성 요소

Metrics (메트릭)
AWS 서비스에서 자동 수집되는 시계열 데이터
CPU, 네트워크, 디스크 I/O 등
커스텀 메트릭 직접 전송 가능
Logs (로그)
애플리케이션·서비스 로그 중앙 수집
로그 그룹/스트림 단위 관리
Insights로 SQL 형태 쿼리 분석
Alarms (알람)
메트릭 임계값 초과 시 SNS/이메일/Slack 알림
ASG 스케일링 트리거
EC2 자동 재시작 연동
Dashboard (대시보드)
여러 메트릭을 한 화면에 시각화
실시간 모니터링 뷰
팀 공유 가능

9.2 EC2 CPU 알람 + SNS 이메일 알림

# 1. SNS 토픽 생성 & 이메일 구독
aws sns create-topic --name alarm-topic
aws sns subscribe \
  --topic-arn arn:aws:sns:ap-northeast-2:...:alarm-topic \
  --protocol email \
  --notification-endpoint admin@mycompany.com
# 2. CPU 알람 생성 (80% 이상 5분 지속 시 알림)
aws cloudwatch put-metric-alarm \
  --alarm-name high-cpu-alarm \
  --alarm-description "EC2 CPU 80% 초과" \
  --metric-name CPUUtilization \
  --namespace AWS/EC2 \
  --statistic Average \
  --period 300 \
  --threshold 80 \
  --comparison-operator GreaterThanThreshold \
  --evaluation-periods 1 \
  --dimensions "Name=InstanceId,Value=i-0123456789" \
  --alarm-actions arn:aws:sns:...:alarm-topic \
  --ok-actions arn:aws:sns:...:alarm-topic

9.3 CloudWatch Agent — 메모리·디스크 수집

기본 EC2 메트릭에는 메모리·디스크 사용률이 포함되지 않습니다. CloudWatch Agent를 설치해야 수집할 수 있습니다.

# CloudWatch Agent 설치 (Amazon Linux 2)
sudo yum install amazon-cloudwatch-agent -y
# 설정 파일 생성
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
# 에이전트 시작
sudo systemctl start amazon-cloudwatch-agent
sudo systemctl enable amazon-cloudwatch-agent
# CloudWatch Logs Insights 쿼리 예시
# 에러 로그 최근 100건 검색
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 100
현업 모니터링 필수 알람 목록
✅ EC2 CPU > 80% (5분)
✅ EC2 메모리 > 90% (Agent 필요)
✅ RDS CPU > 70%, 커넥션 > 임계치
✅ ALB 5xx 에러율 > 1%
✅ Lambda 에러율 > 1%, Duration > Timeout 80%
✅ S3 4xx/5xx 에러
✅ 예상 비용 > 월 예산 80% (Billing Alarm)
Chapter 10
CLI 자동화 & 비용 최적화

AWS CLI & 비용 관리 완전 정복

CLI 설정·핵심 명령어 | Cost Explorer | Savings Plans | 절약 전략

10.1 AWS CLI 설치 & 자격증명 설정

# macOS 설치
brew install awscli
# Linux 설치
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && sudo ./aws/install
# 자격증명 설정 (IAM 액세스키 사용)
aws configure
# AWS Access Key ID: AKIAIOSFODNN7EXAMPLE
# AWS Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# Default region: ap-northeast-2
# Default output format: json
# 다중 프로파일 설정
aws configure --profile production
aws s3 ls --profile production
# EC2 인스턴스 역할 사용 (키 불필요 - 현업 권장)
aws sts get-caller-identity

10.2 현업 필수 CLI 명령어 치트시트

# === EC2 ===
aws ec2 describe-instances --query "Reservations[].Instances[].[InstanceId,State.Name,Tags[?Key=='Name'].Value|[0]]" --output table
aws ec2 start-instances --instance-ids i-0123456789
aws ec2 stop-instances --instance-ids i-0123456789
# === S3 ===
aws s3 ls s3://my-bucket/ --recursive --human-readable
aws s3 cp ./localfile s3://my-bucket/folder/
aws s3 sync ./local-dir s3://my-bucket/backup/ --delete
# === RDS ===
aws rds describe-db-instances --query "DBInstances[].[DBInstanceIdentifier,DBInstanceStatus,Endpoint.Address]" --output table
aws rds create-db-snapshot --db-instance-identifier mydb --db-snapshot-identifier mydb-snap-20250101
# === CloudWatch ===
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 --metric-name CPUUtilization \
  --dimensions Name=InstanceId,Value=i-0123 \
  --start-time 2025-01-01T00:00:00Z --end-time 2025-01-01T01:00:00Z \
  --period 300 --statistics Average

10.3 비용 관리 & 절약 전략

구매 옵션 할인율 적합한 경우
On-Demand 기준 단기·테스트·예측 불가
Reserved Instance 최대 75% 1~3년 안정적 운영 서버
Savings Plans 최대 72% EC2+Lambda+Fargate 유연하게
Spot Instance 최대 90% 배치·빅데이터·중단 허용 작업
# 비용 확인 CLI
aws ce get-cost-and-usage \
  --time-period Start=2025-01-01,End=2025-01-31 \
  --granularity MONTHLY \
  --metrics "BlendedCost" "UsageQuantity" \
  --group-by Type=DIMENSION,Key=SERVICE
# 예산 설정 (월 $100 초과 시 알림)
aws budgets create-budget \
  --account-id 123456789012 \
  --budget "{\"BudgetName\":\"monthly-budget\",\"BudgetLimit\":{\"Amount\":\"100\",\"Unit\":\"USD\"},\"TimeUnit\":\"MONTHLY\",\"BudgetType\":\"COST\"}"
비용 절감 Quick Wins
✅ 미사용 EIP 삭제 (월 $3.6/개)
✅ 중지된 EC2 EBS 스냅샷 정리
✅ S3 Intelligent-Tiering 적용
✅ NAT Gateway 불필요 트래픽 최소화
✅ 개발 환경 야간/주말 자동 중지
비용 모니터링 도구
📊 Cost Explorer: 서비스별 비용 분석
📋 Cost & Usage Reports: 상세 원시 데이터
🔔 Budgets: 예산 초과 알림
💡 Compute Optimizer: 최적 인스턴스 추천
🔍 Trusted Advisor: 비용 최적화 권고
Chapter 11
실전 취업 준비

현업 면접 Q&A TOP 10

AWS 인프라 엔지니어 면접에서 반드시 나오는 핵심 질문과 완벽 답변

Q1. EC2 인스턴스 타입을 어떻게 선택하나요?
워크로드 특성에 따라 결정합니다. CPU 집중 작업은 C계열, 메모리 집중 작업은 R/X계열, 범용 웹 서버는 M/T계열을 사용합니다. 시작은 T3.micro로 테스트 후 CloudWatch 메트릭을 보며 상향 조정하고, Compute Optimizer 추천도 참고합니다.
Q2. Multi-AZ와 Read Replica의 차이는?
Multi-AZ는 고가용성이 목적으로 동기 복제를 통해 장애 시 자동 페일오버합니다. Read Replica는 읽기 성능 향상이 목적으로 비동기 복제를 사용하며, SELECT 쿼리를 분산처리합니다. 두 가지를 함께 사용하는 것이 현업 표준입니다.
Q3. S3와 EBS, EFS의 차이를 설명하세요.
S3는 오브젝트 스토리지로 무제한 용량·인터넷 접근에 적합합니다. EBS는 EC2에 연결하는 블록 스토리지로 단일 인스턴스 전용입니다. EFS는 NFS 기반 공유 파일 시스템으로 여러 EC2에서 동시 마운트 가능합니다.
Q4. VPC에서 퍼블릭/프라이빗 서브넷 차이는?
퍼블릭 서브넷은 Internet Gateway가 연결된 라우팅 테이블을 가져 인터넷 직접 통신이 가능합니다. 프라이빗 서브넷은 NAT Gateway를 통해서만 외부 통신이 가능하고 직접 인바운드 접근은 불가합니다. DB는 반드시 프라이빗에 배치합니다.
Q5. IAM 최소 권한 원칙을 어떻게 적용하나요?
업무에 필요한 최소한의 권한만 부여합니다. 서비스에는 IAM 역할을 사용하고, 개발자는 그룹으로 관리합니다. AWS IAM Access Analyzer와 Permission Boundaries로 과도한 권한을 감사하고, 루트 계정 키는 절대 생성하지 않습니다.
Q6. ALB와 NLB를 어떤 기준으로 선택하나요?
일반 웹/API 서버는 ALB를 사용합니다. URL·헤더 기반 라우팅이 가능하고 Cognito 인증도 지원합니다. 게임 서버나 고정 IP가 필요한 경우, 초저지연 TCP/UDP 서비스는 NLB를 선택합니다.
Q7. Lambda Cold Start를 어떻게 해결하나요?
Provisioned Concurrency로 실행 환경을 미리 준비하거나, EventBridge로 5분마다 워밍 요청을 보내는 핑 방식을 사용합니다. 또한 Python/Node.js 같은 경량 런타임을 사용하고, 의존성 패키지를 최소화하는 것이 효과적입니다.
Q8. EC2 비용을 줄이는 방법은?
예측 가능한 워크로드는 Reserved Instance나 Savings Plans로 최대 75% 절감합니다. 배치/ML 작업은 Spot Instance를 활용합니다. Compute Optimizer 권고에 따라 과다 프로비저닝된 인스턴스를 다운사이징하고, 개발 환경은 업무 시간 외 자동 중지합니다.
Q9. 보안그룹과 NACL의 차이는?
보안그룹은 인스턴스 레벨에서 동작하며 상태 기반(Stateful)으로 아웃바운드 응답이 자동 허용됩니다. NACL은 서브넷 레벨에서 동작하며 상태 비기반(Stateless)으로 인/아웃 규칙을 모두 설정해야 합니다. 둘을 겹쳐 사용하면 심층 방어가 됩니다.
Q10. AWS에서 DR(재해복구) 전략은?
RTO/RPO 요구사항에 따라 전략을 선택합니다. Backup & Restore(저비용, 수시간), Pilot Light(핵심만 운영, 수십분), Warm Standby(축소 버전 운영, 수분), Multi-Site Active-Active(무중단, 고비용) 순으로 비용과 복구 시간이 증가합니다.

InfraDevGuide0004 완료 체크리스트

AWS 기초
AWS 리전·AZ·글로벌 인프라 이해
IAM 사용자·그룹·역할·정책 설정
MFA 활성화 및 최소 권한 원칙 적용
EC2 인스턴스 생성 및 SSH 접속
보안그룹·키페어·EBS 설정
네트워크 & 스토리지
VPC·퍼블릭/프라이빗 서브넷 설계
IGW·NAT Gateway·라우팅 테이블 설정
S3 버킷 생성·정책·버전관리 설정
RDS Multi-AZ·Read Replica 구성
ELB(ALB) 생성 및 타겟 그룹 연결
자동화 & 서버리스
Auto Scaling Group 생성·정책 설정
Lambda 함수 생성·트리거 연결
API Gateway REST API 구축
EventBridge 스케줄 룰 설정
CloudWatch 알람·대시보드 구성
CLI & 비용 최적화
AWS CLI 설치·자격증명 설정
핵심 서비스별 CLI 명령어 숙지
Budgets 예산 알림 설정
Cost Explorer 비용 분석
Reserved/Spot Instance 비교 이해

InfraDevGuide0004 완료!

AWS 클라우드 A-Z를 완주했습니다. 이제 현업에서 AWS를 자신있게 다룰 수 있습니다!

학습 범위
11 Chapters
핵심 서비스
EC2·S3·RDS·IAM·VPC·Lambda·ELB·CloudWatch
다음 단계
InfraDevGuide0005 Docker & 컨테이너

InfraDevGuide 시리즈 전체 로드맵

0001 인프라 기초 ✅
0002 Linux ✅
0003 네트워크 ✅
0004 AWS ✅ (현재)
0005 Docker
0006 CI/CD
0007 실전 프로젝트