CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
  • Week 1
    • 1.개발자 시점에서 본 AWS: 리전, 인프라, 그리고 책임의 경계
    • 2.IAM의 4대 엔터티: User, Group, Role, Policy
    • 3.STS와 정책 조건: 임시 자격증명의 깊은 세계
    • 4.AWS CLI와 SDK: 자격증명 체이닝부터 SigV4까지
    • 5.Week 1 종합: 인프라와 IAM이 만드는 신뢰의 사슬
  • Week 2
  • Week 3
    • 1.Lambda Execution Model: Firecracker MicroVM이 함수를 실행하는 방법
    • 2.Lambda 이벤트 소스 매핑: SQS·Kinesis·DynamoDB Streams 내부 폴링 메커니즘
    • 3.Lambda 버전·별칭·레이어: Immutable 배포와 의존성 분리의 원리
    • 4.Lambda 동시성 제어: Token Bucket 알고리즘과 에러 처리 계층
    • 5.Week 3 복습: Lambda 종합 시나리오로 실전 감각 다지기
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
  • Week 13
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← DVA-C02/Week 3/Day 5

기준: DVA-C02 시험 가이드·오류 제보

DVA-C02· AssociateWeek 3 · Day 5읽기 약 18분

Day 5 - Week 3 복습: Lambda 종합 시나리오로 실전 감각 다지기

Week 3에서 다룬 Lambda는 단순한 "서버리스 함수"가 아니다. Firecracker MicroVM의 실행 모델, 세 가지 호출 방식의 신뢰성 모델, 버전·별칭·레이어의 배포 라이프사이클, 동시성 제어의 네 계층 — 이 모든 것이 유기적으로 연결된 시스템이다.

오늘은 암기로 외우는 것이 아니라, "왜 이렇게 설계됐는가"라는 질문을 가지고 전체 지도를 다시 그려본다. 그런 다음 시험에서 실제로 나오는 형태인 시나리오 문제 12개로 실전 감각을 확인한다.

Lambda 핵심 사양 한눈에 보기

실행 환경
├── 런타임: Python 3.12/3.11/3.10, Node.js 20/18, Java 21/17/11/8
│          Go(provided.al2023 OS 전용 런타임), .NET 8/6, Ruby 3.3, Custom Runtime
├── 메모리: 128MB ~ 10,240MB (1MB 단위, 1,769MB = 1 vCPU)
├── 타임아웃: 1초 ~ 900초 (15분)
├── /tmp: 512MB ~ 10,240MB
├── 환경 변수: 4KB 전체
└── 배포
    ├── ZIP 직접: 50MB
    ├── ZIP S3 경유: 250MB (압축 해제)
    ├── 컨테이너 이미지: 10GB
    └── 레이어: 최대 5개, 코드+레이어 합계 250MB

페이로드
├── 동기 (요청/응답): 6MB
├── 비동기: 1MB (2025년 10월 256KB에서 상향)
└── Response Streaming: 200MB (2025년 7월 20MB에서 상향)

동시성
├── 계정/리전 기본: 1,000 (증가 요청 가능)
└── 스케일링 속도: 함수마다 10초에 +1,000 (2023년 말 변경)

세 가지 호출 방식: 설계 원칙부터 다시

Lambda의 세 가지 호출 방식은 각각 다른 신뢰성 요구에서 탄생했다.

동기 호출은 "즉각적인 응답이 필요한 요청"에서 출발했다. API Gateway가 HTTP 요청을 받으면 클라이언트는 응답을 기다리고 있다. Lambda가 실패하면 API Gateway가 바로 클라이언트에 오류를 반환한다. 재시도는 클라이언트의 결정이다. 단순하지만 내구성 없음.

비동기 호출은 "이벤트를 잃으면 안 되는 경우"에서 탄생했다. S3에 파일이 업로드됐다는 이벤트는 처리될 때까지 Lambda 서비스가 내구적으로 보관한다. 2회 재시도 후에도 실패하면 DLQ로 보내 나중에 분석한다. 내구성 높음, 즉각 응답 없음.

ESM 폴링은 "큐/스트림을 소비하는 워커"에서 나왔다. SQS나 Kinesis는 이미 데이터를 내구적으로 보관하고 있다. Lambda가 능동적으로 폴링해서 처리하는 것이 자연스럽다. 큐/스트림의 내구성을 그대로 활용.

호출 방식 → 사용 사례 매핑

API Gateway → Lambda (동기)
   → RESTful API, 실시간 조회, 동기 처리

S3 이벤트 → Lambda (비동기)
   → 파일 처리, 이미지 리사이즈, 업로드 트리거

SNS → Lambda (비동기, 팬아웃)
   → 여러 처리 함수에 이벤트 분배

EventBridge → Lambda (비동기, 이벤트 버스)
   → 이벤트 패턴 매칭, 스케줄 실행

SQS → Lambda (ESM, 부하 분산)
   → 주문 처리, 이메일 발송, 비동기 작업 큐

Kinesis → Lambda (ESM, 순서 보장)
   → 클릭스트림 분석, 실시간 집계, 시계열 처리

DynamoDB Streams → Lambda (ESM, 변경 반응)
   → 검색 인덱스 동기화, 캐시 갱신, 감사 로그

버전·별칭·레이어: Git과의 유사성

Lambda의 배포 모델을 이해하는 가장 쉬운 방법은 Git 비유다.

Git                    Lambda
────────────────────────────────────────
커밋 해시              버전 번호 (불변)
HEAD                  $LATEST (수정 가능)
브랜치 포인터          별칭 (변경 가능 포인터)
Git Tag               버전 + Description
.npmignore            레이어 (공유 의존성)

git checkout feature-branch처럼 별칭을 바꾸면 다른 버전으로 트래픽이 이동한다. git merge --ff-only처럼 카나리 배포로 10%씩 점진적 병합이 가능하다.

동시성 제어: 층위별 정리

계층설정 위치비용콜드 스타트목적
계정 한도AWS Support 티켓--전체 상한
Reserved Concurrency함수없음영향 없음함수별 격리·상한
Provisioned Concurrency버전/별칭있음제거콜드 스타트 해결
버스트 한도리전 고정--스케일아웃 속도 제한

공동 책임 관계:

  • Reserved=300: 이 함수는 최대 300개, 나머지 함수에서 300개가 차감됨
  • Provisioned=20 on Reserved=300: 300개 중 20개는 항상 웜, 나머지 280개는 필요시 콜드 스타트

에러 처리 의사결정 트리

Lambda에서 에러 발생?
    │
    ├── 동기 호출이면?
    │       → 즉시 에러 응답 (HTTP 200 + FunctionError 헤더)
    │       → 재시도: 클라이언트 책임
    │       → DLQ: 없음
    │
    ├── 비동기 호출이면?
    │       → Lambda 서비스가 1분 후 재시도 (1회)
    │       → 2분 후 재시도 (2회)
    │       → 최종 실패 → DLQ 또는 Destinations OnFailure
    │       → 이벤트 나이 최대 6시간
    │
    └── ESM 폴링이면?
            ├── SQS?
            │       → 가시성 타임아웃 후 메시지 복귀
            │       → maxReceiveCount 초과 → SQS DLQ
            │       → ReportBatchItemFailures로 부분 실패 격리
            │
            └── Kinesis/DDB Streams?
                    → 기본 무한 재시도 (샤드 블록 위험)
                    → MaximumRetryAttempts 설정 필수
                    → BisectBatchOnFunctionError로 격리
                    → OnFailure Destination으로 최종 실패 처리

콜드 스타트 최적화 의사결정

콜드 스타트가 문제인가?
    │
    ├── Java 함수?
    │       → SnapStart (무료, 버전 필요)
    │
    ├── 응답 SLA가 엄격한가 (p99 < 100ms)?
    │       → Provisioned Concurrency (비용 발생)
    │
    ├── 패키지 크기가 큰가 (>50MB)?
    │       → 레이어로 분리
    │       → 컨테이너 이미지 (Lambda SnapStart 활용)
    │
    ├── 대용량 라이브러리 import가 느린가?
    │       → 지연 import (필요할 때만 import)
    │       → 메모리 증가 (CPU 비례 증가 → INIT 빨라짐)
    │
    └── VPC Lambda?
            → Hyperplane ENI 이후 크게 개선
            → 여전히 느리면 단일 AZ 서브넷 → 다중 AZ로

시험 함정 집중 복습

함정 1: Provisioned Concurrency는 $LATEST에 설정할 수 없다. → 버전을 발행하거나 별칭을 만든 후 그것에 설정해야 한다.

함정 2: SnapStart는 버전 발행 시 스냅샷이 생성된다. → $LATEST에서는 동작하지 않는다. 코드 변경 후 반드시 버전 발행 필요.

함정 3: Kinesis ESM의 기본 재시도는 무한이다. → MaximumRetryAttempts를 명시적으로 설정하지 않으면 샤드가 영구 블록될 수 있다.

함정 4: VPC 연결 Lambda는 퍼블릭 서브넷이어도 인터넷 직접 접근 불가. → NAT Gateway + 프라이빗 서브넷 필요.

함정 5: Lambda 별칭 가중치는 2개 버전만. → 3분할 불가능.

함정 6: SQS DLQ와 Lambda DLQ는 다른 개념이다. → SQS-Lambda ESM 실패는 SQS DLQ, S3/SNS 비동기 실패는 Lambda DLQ.

함정 7: API 키는 인증이 아니다. → 사용량 추적과 제한 목적.

함정 8: Lambda 컨테이너 이미지는 레이어를 사용할 수 없다.

함정 9: /tmp는 같은 실행 환경의 다음 호출에서 공유된다. → 민감 데이터 주의. 실행 환경이 다르면 공유 안 됨.

함정 10: 비동기 재시도는 2회, 간격은 1분/2분. → 무한이 아니다.

DVA-C02 출제 도메인과 Lambda 연결

도메인Lambda 관련 키워드
개발(32%)런타임, 핸들러, 이벤트 구조, 컨텍스트 객체, 레이어
보안(26%)Execution Role, Function Policy, VPC, IMDSv2, 환경 변수 암호화
배포(24%)버전, 별칭, CodeDeploy, SnapStart, SAM, CloudFormation
문제 해결(18%)CloudWatch 메트릭, X-Ray 트레이싱, 콜드 스타트 진단

📝 Week 3 종합 시나리오 문제

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

결제 API Lambda 함수가 트래픽 급증 시 높은 레이턴시를 보인다. CloudWatch ConcurrentExecutions는 정상 범위이고, Duration P99이 3,000ms를 넘는 상황이다. 가장 가능성 높은 원인과 해결책은?

문제 2

S3에 이미지가 업로드되면 Lambda가 썸네일을 생성해 같은 버킷의 thumbnails/ 디렉토리에 저장한다. 운영 중 Lambda가 무한 루프에 빠진 것을 발견했다. 원인과 해결책은?

문제 3

주문 처리 시스템에서 Lambda가 SQS를 폴링해 주문을 처리한다. 배치 크기는 100이고, 하나의 주문이 외부 API 타임아웃으로 실패했다. 나머지 99개도 다시 처리되는 문제가 발생했다. 어떻게 해결하는가?

문제 4

Java Spring Boot를 Lambda로 운영 중이다. 콜드 스타트가 3~5초에 달해 API 응답 SLA를 위반한다. 비용 효율적인 해결책은?

문제 5

Lambda 함수의 환경 변수에 DB 비밀번호를 저장했다. 보안팀이 이것이 기본 KMS 관리 키로만 암호화되어 계정 내 다른 팀도 잠재적으로 접근 가능하다고 지적했다. 가장 효과적인 해결책은?

문제 6

한 팀이 Lambda 함수에 Reserved Concurrency 500을 설정했다. 계정 전체 동시성 한도는 1,000이다. 다음 날 다른 팀의 함수가 급격한 트래픽 증가로 스로틀링됐다. 원인은?

문제 7

Lambda 함수가 Kinesis Data Streams를 폴링하는데, CloudWatch에서 IteratorAge 메트릭이 지속적으로 증가하고 있다. 무엇을 의미하며 어떻게 대응하는가?

문제 8

여러 Lambda 함수에서 동일한 pandas, numpy 라이브러리를 사용한다. 각 함수의 ZIP 크기가 200MB에 달해 배포 속도가 느리다. 어떻게 개선하는가?

문제 9

Lambda Destinations와 DLQ를 동시에 설정한 경우 어떻게 동작하는가?

문제 10

Lambda 함수 코드에서 DB 연결을 핸들러 함수 내부에 생성하고 있다. 운영팀이 DB 연결 수 급증으로 RDS Connection Limit 오류가 난다고 보고했다. 가장 효과적인 해결책은?

문제 11

Lambda 비동기 호출의 이벤트 나이(event age) 최대값은?

문제 12

Lambda 함수가 사내 온프레미스 데이터베이스에 접근해야 한다. 이 DB는 VPN 연결을 통해서만 접근 가능하다. 어떻게 구성하는가?

자기 평가

정답 수평가
11-12Lambda 마스터 — DVA 시험 준비 완료
9-10우수 — 틀린 문제 시나리오 재검토
7-8양호 — Day 11-14 재독 후 재도전
5-6보통 — Firecracker MicroVM부터 다시
0-4미흡 — Week 3 전체 처음부터
이전Lambda 동시성 제어: Token Bucket 알고리즘과 에러 처리 계층Week 3 · Day 4다음 API Gateway REST API: 요청이 백엔드에 도달하기까지의 전체 경로Week 4 · Day 1

참고 공식 자료

  • DVA-C02 공식 시험 안내(새 탭에서 열림)
  • AWS Lambda 공식 문서(새 탭에서 열림)
  • Amazon SQS 공식 문서(새 탭에서 열림)
  • Amazon VPC 공식 문서(새 탭에서 열림)
  • Amazon Kinesis 공식 문서(새 탭에서 열림)
  • Amazon S3 공식 문서(새 탭에서 열림)

이 페이지

  • Lambda 핵심 사양 한눈에 보기
  • 세 가지 호출 방식: 설계 원칙부터 다시
  • 버전·별칭·레이어: Git과의 유사성
  • 동시성 제어: 층위별 정리
  • 에러 처리 의사결정 트리
  • 콜드 스타트 최적화 의사결정
  • 시험 함정 집중 복습
  • DVA-C02 출제 도메인과 Lambda 연결
  • Week 3 종합 시나리오 문제
  • 자기 평가