새발블로그

[AWS SAA] 서버리스 본문

자격증/SAA

[AWS SAA] 서버리스

EUG 2026. 6. 22. 00:07

서버리스 아키텍처 개요

핵심 개념

  • 서버리스는 사용자가 서버를 직접 프로비저닝하거나 관리하지 않고 애플리케이션을 실행하는 방식
  • 서버가 없다는 의미가 아니라, 서버 운영과 확장 관리를 AWS가 담당한다는 의미
  • 개발자는 인프라 관리보다 코드, 이벤트 흐름, 데이터 처리 로직에 집중할 수 있음
  • 트래픽 변화에 따라 자동 확장되는 서비스가 많음
  • 사용량 기반 과금 모델을 제공하는 경우가 많아, 트래픽이 적거나 불규칙한 워크로드에 적합
  • 단, 모든 서버리스 서비스가 “트래픽이 없으면 비용이 0원”인 것은 아님
  • 예를 들어 DynamoDB 온디맨드, Lambda, API Gateway는 요청 기반 과금에 가깝지만, S3는 저장 용량에 따라 비용이 발생하고 Aurora Serverless는 최소 용량 설정에 따라 비용이 발생할 수 있음
  • 서버 관리 부담을 줄이고 이벤트 기반 아키텍처를 구성할 때 서버리스 서비스를 우선 고려

대표 서버리스 서비스

서버리스 서비스 설명
Lambda 서버 관리 없이 함수 실행
API Gateway REST, HTTP, WebSocket API 관리
DynamoDB 서버리스 NoSQL 데이터베이스
S3 객체 스토리지
SNS Pub/Sub 알림 서비스
SQS 메시지 큐 서비스
EventBridge 이벤트 버스와 스케줄링
Step Functions 워크플로 오케스트레이션
Aurora Serverless 자동 확장 관계형 데이터베이스
Fargate 서버 관리 없는 컨테이너 실행
AppSync GraphQL API
Cognito 애플리케이션 사용자 인증
SAM 서버리스 애플리케이션 IaC 프레임워크

Lambda

핵심 개념

  • Lambda는 서버를 직접 관리하지 않고 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스
  • 이벤트가 발생하면 Lambda 함수가 실행됨
  • 요청 수와 실행 시간에 따라 과금
  • 짧고 독립적인 이벤트 기반 작업에 적합
  • API 처리, 파일 처리, 데이터 변경 후속 처리, 스트리밍 이벤트 처리, 스케줄 작업 등에 사용
  • Lambda는 상태를 오래 유지하는 서버보다는 Stateless 함수 실행 모델에 적합
  • 장기 실행 작업이나 OS 수준 제어가 필요한 작업에는 적합하지 않을 수 있음

Lambda 핵심 스펙

항목 내용
최대 실행 시간 15분
최대 메모리 10,240MB
메모리 설정 범위 128MB ~ 10,240MB
언어 지원 Node.js, Python, Java, Go, Ruby, .NET 등
과금 요청 횟수 + 실행 시간 기준
실행 모델 이벤트 기반 실행
기본 동시성 계정/리전 단위 동시성 한도 내에서 자동 확장
  • Lambda 메모리는 10,000MB가 아니라 10,240MB까지 설정 가능
  • 메모리를 늘리면 CPU 성능도 함께 증가
  • 단일 호출은 최대 15분까지만 실행 가능
  • 15분 이상 실행이 필요한 작업은 ECS/Fargate, AWS Batch, Step Functions를 함께 고려

Lambda 동시성

예약된 동시성

  • Reserved Concurrency는 특정 Lambda 함수가 사용할 수 있는 최대 동시 실행 수를 예약하고 제한하는 기능
  • 특정 함수가 계정 전체 동시성을 모두 사용하지 못하게 제한할 수 있음
  • 동시에 해당 함수에 최소한의 동시성 용량을 보장하는 효과도 있음
  • 하지만 예약된 동시성은 콜드 스타트 자체를 줄이는 기능은 아님

프로비저닝된 동시성

  • Provisioned Concurrency는 Lambda 실행 환경을 미리 초기화해두는 기능
  • 콜드 스타트 지연을 줄이고 싶을 때 사용
  • 지연 시간에 민감한 API나 사용자 요청 처리에 적합
  • 단, 미리 준비된 실행 환경에 대한 비용이 발생할 수 있음

동시성 관련 선택

요구사항 적합한 기능
특정 함수의 최대 동시 실행 수 제한 Reserved Concurrency
특정 함수에 동시성 용량 보장 Reserved Concurrency
콜드 스타트 지연 감소 Provisioned Concurrency
트래픽 급증 시 백엔드 완충 SQS + Lambda
처리량 제어 SQS 이벤트 소스 매핑, Reserved Concurrency

Lambda@Edge

  • Lambda@Edge는 CloudFront 엣지 로케이션에서 Lambda 함수를 실행하는 기능
  • CloudFront 요청/응답 흐름 중 특정 시점에 코드를 실행할 수 있음
  • Viewer Request, Viewer Response, Origin Request, Origin Response 단계에서 요청 또는 응답 수정 가능
  • 인증, URL 리다이렉트, A/B 테스트, 헤더 조작, 응답 변환 등에 사용
  • 글로벌 사용자에게 가까운 엣지에서 로직을 처리할 수 있음
  • 가벼운 헤더 수정이나 리다이렉트는 CloudFront Functions가 더 적합한 경우도 있음
  • Lambda@Edge는 일반 Lambda와 배포 방식, 리전, 제약 조건이 다르므로 구분 필요

Lambda 주요 이벤트 소스 패턴

패턴 설명
API Gateway + Lambda REST/HTTP 서버리스 API 구성
S3 Event + Lambda 객체 업로드 후 이미지 처리, 파일 변환, 썸네일 생성
DynamoDB Streams + Lambda 테이블 변경 이벤트 기반 후속 처리
Kinesis Data Streams + Lambda 실시간 스트리밍 데이터 처리
SQS + Lambda 안정적인 비동기 메시지 처리
EventBridge + Lambda 이벤트 기반 스케줄링 또는 서비스 이벤트 처리
SNS + Lambda 알림 이벤트 후속 실행
Cognito + Lambda Trigger 사용자 인증 흐름 중 커스텀 로직 실행
  • API Gateway + Lambda는 서버리스 API 구성에 자주 사용
  • S3 Event + Lambda는 이미지 리사이징, 썸네일 생성, 파일 변환 등에 적합
  • DynamoDB Streams + Lambda는 CDC 패턴으로 테이블 변경에 대한 후속 처리를 구현할 때 사용
  • SQS + Lambda는 실패 재처리와 트래픽 완충이 필요한 비동기 처리에 적합
  • EventBridge + Lambda는 특정 시간 또는 AWS 서비스 이벤트 기반 자동화에 적합

Lambda 실패 처리와 재처리

  • Lambda 호출 방식에 따라 실패 처리 방식이 달라짐
  • 동기 호출은 호출한 클라이언트가 오류 응답을 받음
  • 비동기 호출은 Lambda가 내부적으로 재시도할 수 있음
  • SQS 이벤트 소스 매핑에서는 Lambda가 SQS 큐를 폴링하고, 성공적으로 처리된 메시지를 큐에서 삭제함
  • Lambda가 SQS 메시지 처리를 실패하면 메시지는 가시성 타임아웃 이후 다시 큐에 나타나 재처리 가능
  • 반복 실패 메시지는 SQS DLQ로 보내 분석할 수 있음
  • Lambda 처리 실패로 인한 데이터 유실이 걱정되면 SQS를 앞단에 두어 재처리 가능한 구조를 고려
  • SQS를 사용할 때는 Lambda timeout과 SQS visibility timeout을 함께 설계해야 함
  • AWS는 SQS 이벤트 소스 매핑에서 큐의 visibility timeout을 Lambda 함수 timeout보다 충분히 길게 설정하도록 권장함

API Gateway + Lambda 패턴

[Client] → [API Gateway] → [Lambda] → [DynamoDB / S3 / RDS]
  • 완전한 서버리스 API 아키텍처를 구성할 수 있음
  • API Gateway는 클라이언트 요청을 받고 인증, 권한 부여, 요청 제한, 로깅 등을 처리
  • Lambda는 비즈니스 로직을 실행
  • DynamoDB, S3, RDS, Aurora Serverless 등과 연동 가능
  • API Gateway 캐싱을 사용하면 동일 요청에 대한 Lambda 호출 횟수를 줄일 수 있음
  • 실시간 양방향 통신이 필요하면 API Gateway WebSocket API를 고려

S3 Event + Lambda 패턴

[S3 업로드] → [S3 Event] → [SQS] → [Lambda]
  • 객체 업로드 시 자동으로 Lambda를 트리거할 수 있음
  • 이미지 리사이징, 썸네일 생성, 파일 변환, 메타데이터 추출, 데이터 처리 등에 적합
  • S3 이벤트를 Lambda에 직접 연결할 수도 있음
  • 안정적인 재처리와 완충이 중요하면 S3 Event → SQS → Lambda 구조를 고려
  • SQS를 사이에 두면 이벤트를 큐에 보관하고, Lambda 실패 시 재처리하기 쉬움
  • 대량 업로드나 갑작스러운 이벤트 증가가 예상되면 SQS를 통해 Lambda 처리량을 완충하는 구조가 유용

DynamoDB Streams + Lambda

[DynamoDB INSERT/UPDATE/DELETE] → [DynamoDB Streams] → [Lambda] → [후속 시스템]
  • DynamoDB Streams는 테이블 변경 이벤트를 기록하는 기능
  • INSERT, MODIFY, REMOVE 이벤트를 기반으로 Lambda를 트리거할 수 있음
  • CDC, 즉 Change Data Capture 패턴에 사용
  • 테이블 변경 후 알림 발송, 검색 인덱스 갱신, 집계 테이블 업데이트, 다른 시스템 동기화 등에 적합
  • DynamoDB Streams 레코드는 24시간 동안 보관됨
  • 장기간 이벤트 보관이나 재처리가 필요하면 별도 저장소나 스트리밍 서비스를 함께 고려

Kinesis Data Streams + Lambda

[Producer] → [Kinesis Data Streams] → [Lambda] → [후속 처리]
  • 실시간 스트리밍 데이터를 서버리스로 처리할 때 사용
  • 로그, 클릭스트림, IoT 이벤트, 실시간 분석 이벤트 처리에 적합
  • Lambda는 Kinesis 샤드에서 레코드를 배치 단위로 읽어 처리
  • 여러 소비자가 같은 스트림을 독립적으로 처리해야 하는 경우 Kinesis Data Streams가 적합
  • 단순 작업 큐와 재처리 중심이면 SQS가 더 적합

EventBridge + Lambda

[AWS 서비스 이벤트 / SaaS 이벤트 / 스케줄] → [EventBridge] → [Lambda]
  • AWS 서비스 이벤트, 사용자 애플리케이션 이벤트, SaaS 이벤트를 규칙 기반으로 Lambda에 전달 가능
  • 특정 시간 또는 주기 기반 작업 실행에 사용
  • EC2 상태 변경, 보안 이벤트, 배포 이벤트 등에 반응하는 운영 자동화에 적합
  • EventBridge Scheduler를 사용하면 크론 표현식 또는 비율 기반으로 작업 예약 가능

SNS + Lambda

[Publisher] → [SNS Topic] → [Lambda]
  • SNS Topic에 발행된 메시지를 Lambda가 구독하여 후속 처리 가능
  • 알림 이벤트를 기반으로 여러 Lambda 또는 SQS 큐에 동시에 전달 가능
  • 하나의 이벤트를 여러 서비스가 병렬로 처리해야 하면 SNS Fan-out 패턴을 고려

Cognito + Lambda Trigger

  • Cognito User Pool은 사용자 가입, 로그인, 인증 흐름을 관리
  • Lambda Trigger를 사용하면 Cognito 인증 흐름 중 커스텀 로직을 실행할 수 있음
  • 예를 들어 회원가입 전 검증, 가입 후 사용자 프로필 생성, 토큰 커스터마이징, 사용자 마이그레이션 등에 사용
  • 애플리케이션 사용자 인증 로직을 확장해야 할 때 유용

SAM

핵심 개념

  • SAM은 Serverless Application Model의 약자
  • Lambda, API Gateway, DynamoDB 등 서버리스 애플리케이션을 Infrastructure as Code 방식으로 정의하고 배포하는 프레임워크
  • CloudFormation 위에서 동작하는 서버리스 애플리케이션용 추상화 레이어
  • SAM 템플릿은 CloudFormation 템플릿의 확장이며, 서버리스 리소스를 더 간결하게 정의할 수 있음
  • AWS SAM CLI를 사용해 로컬 테스트, 빌드, 패키징, 배포를 수행할 수 있음
  • sam local invoke를 사용하면 Lambda 함수를 로컬에서 테스트할 수 있음
  • 서버리스 애플리케이션의 개발과 배포 사이클을 빠르게 만들 때 유용

SAM 사용 흐름

SAM Template 작성 → sam build → sam local test → sam deploy
  • 템플릿으로 Lambda, API Gateway, 권한, 이벤트 소스 등을 정의
  • 로컬에서 함수 실행과 이벤트 테스트 가능
  • 배포 시 CloudFormation 스택으로 변환되어 리소스 생성
  • 서버리스 애플리케이션을 반복적으로 배포하고 관리하기에 적합

서버리스 vs 컨테이너 비교

항목 Lambda ECS/Fargate
실행 단위 함수 컨테이너
실행 시간 최대 15분 컨테이너가 실행되는 동안 지속 가능
서버 관리 불필요 Fargate 사용 시 서버 관리 불필요
실행 환경 Lambda 런타임 또는 컨테이너 이미지 사용자가 컨테이너 이미지 정의
콜드 스타트 발생 가능 Lambda와 같은 함수 콜드 스타트 개념은 아니지만, 태스크 시작 시간은 존재
비용 요청 횟수와 실행 시간 기준 vCPU/메모리 실행 시간 기준
적합한 워크로드 짧은 이벤트 기반 처리 장기 실행 작업, 커스텀 런타임, 컨테이너 기반 앱
  • 15분 이상 실행이 필요한 작업은 Lambda보다 ECS/Fargate, AWS Batch 등을 고려
  • 컨테이너 이미지 기반 실행 환경을 세밀하게 제어해야 하면 ECS/Fargate가 적합
  • 이벤트 기반의 짧은 작업은 Lambda가 적합
  • 서버를 직접 관리하고 싶지 않지만 컨테이너를 사용해야 하면 Fargate 고려
  • 장기 실행 배치 작업은 AWS Batch도 함께 고려 가능

서버리스 아키텍처 선택 기준 요약

요구사항 적합한 서비스
짧은 이벤트 기반 코드 실행 Lambda
REST/HTTP API 제공 API Gateway
실시간 양방향 API API Gateway WebSocket API
서버리스 NoSQL 데이터베이스 DynamoDB
객체 저장과 이벤트 트리거 S3
메시지 큐 기반 비동기 처리 SQS
Pub/Sub 알림과 팬아웃 SNS
이벤트 라우팅과 스케줄링 EventBridge
다단계 워크플로 오케스트레이션 Step Functions
서버리스 GraphQL API AppSync
애플리케이션 사용자 인증 Cognito
서버리스 관계형 DB 자동 확장 Aurora Serverless
서버 관리 없는 컨테이너 실행 Fargate
서버리스 IaC 프레임워크 SAM
15분 이상 실행되는 컨테이너 작업 ECS/Fargate 또는 AWS Batch



'자격증 > SAA' 카테고리의 다른 글

[AWS SAA] 재해복구 / 마이그레이션  (0) 2026.06.23
[AWS SAA] 비용 최적화  (0) 2026.06.22
[AWS SAA] 애플리케이션 통합  (0) 2026.06.22
[AWS SAA] 모니터링 / 운영  (0) 2026.06.22
[AWS SAA] 보안 / IAM  (0) 2026.06.22