아키텍처 재설계와 현대화

Lambda, ECS/EKS/Fargate, DynamoDB, Step Functions, SQS/SNS/EventBridge, Strangler Fig 패턴 등 SAP-C02 D4 현대화 핵심을 정리합니다.

아키텍처 현대화는 SAP-C02 D4 도메인의 핵심입니다. 모놀리식 애플리케이션을 서버리스, 컨테이너, 이벤트 기반 아키텍처로 전환하는 방법과 목적별 데이터베이스를 선택하는 능력을 검증합니다.

현대화의 출발점은 "무엇을 바꿔야 하는가?"가 아니라 "현재 아키텍처의 어떤 제약이 비즈니스 목표를 막고 있는가?"입니다. 확장성, 운영 부담, 비용, 개발 속도 중 어떤 제약을 해소해야 하는지를 먼저 파악해야 올바른 현대화 경로를 선택할 수 있습니다.

 

서버리스 — Lambda와 API Gateway

Lambda는 서버 관리 없이 코드를 실행합니다. 요청이 없을 때 비용이 발생하지 않고 자동으로 수평 확장됩니다. 그러나 최대 실행 시간 제한(15분)이 있어 25분 이상의 장시간 작업에는 ECS Fargate나 EC2가 필요합니다.

Lambda 동시성 관리가 시험에서 중요합니다. Reserved Concurrency는 함수별 최대 동시성 상한을 설정해 특정 함수가 리전 동시성 풀을 독점하지 못하게 합니다. 다른 함수를 보호하는 격리 목적의 설정입니다. Provisioned Concurrency는 인스턴스를 미리 초기화해 콜드 스타트를 제거하는 성능 목적의 설정입니다. 격리가 목적이라면 Reserved, 콜드 스타트 제거가 목적이라면 Provisioned를 선택합니다.

완전 서버리스 웹 아키텍처의 표준 패턴은 CloudFront + S3(정적 호스팅) + API Gateway + Lambda + DynamoDB 조합입니다. EC2나 Fargate가 포함되면 완전 서버리스가 아닙니다.

API Gateway는 REST API와 WebSocket API를 모두 지원합니다. WebSocket API는 connectionId를 자동 생성하고 수십만 동시 연결을 처리합니다. 서버 → 클라이언트 능동 푸시가 필요할 때 API로 특정 connectionId에 즉시 메시지를 전송합니다. DynamoDB에 사용자-connectionId 매핑을 저장해 푸시 대상을 조회합니다.

 

컨테이너 — ECS vs EKS, Fargate vs EC2 시작 유형

ECS(Elastic Container Service)는 AWS 네이티브 컨테이너 오케스트레이터입니다. 운영이 단순하고 AWS 서비스와 깊이 통합되어 있습니다. EKS(Elastic Kubernetes Service)는 Kubernetes를 완전관리형으로 제공합니다. Kubernetes 생태계의 고급 기능이 필요하거나 기존 Kubernetes 워크로드를 이전할 때 선택합니다.

Fargate 시작 유형은 클러스터 인프라 관리 없이 컨테이너를 실행합니다. EC2 인스턴스를 프로비저닝하거나 패치할 필요가 없습니다. vCPU와 메모리 사용 시간 기준으로 과금되므로 저활용 EC2 대비 비용이 절감되는 경우가 많습니다. Fargate 시작 유형도 완전 서버리스가 아닙니다(컨테이너 레이어가 존재). 완전 서버리스는 Lambda만 해당됩니다.

Lambda와 Fargate의 선택 기준은 실행 시간입니다. Lambda는 최대 15분 제한이 있고 간헐적 이벤트 기반 처리에 최적입니다. Fargate는 시간 제한이 없어 상시 실행이 필요한 서비스나 장시간 처리에 사용합니다.

!ECS vs EKS

목적별 데이터베이스 — DynamoDB, Aurora Serverless, ElastiCache

현대화의 핵심 원칙은 워크로드에 맞는 데이터베이스를 선택하는 것입니다. 하나의 관계형 DB로 모든 것을 해결하려는 시도는 병목을 만듭니다.

DynamoDB는 완전 서버리스 NoSQL 데이터베이스입니다. 싱글 디지트 밀리초 응답, 자동 스케일링, 완전관리형이라는 특성을 가집니다. On-demand 모드는 사전 용량 프로비저닝 없이 트래픽에 자동 대응합니다. 비정형 데이터, 버스트 트래픽, IoT 디바이스 데이터, 세션 저장소, 실시간 이벤트 처리에 적합합니다.

DynamoDB Streams + Lambda + SNS 패턴은 실시간 이벤트 처리의 표준입니다. DynamoDB Streams는 항목 수준 변경(INSERT/MODIFY/REMOVE)을 최대 24시간 동안 캡처합니다. Lambda가 이벤트 소스 매핑으로 Streams를 자동 폴링하고, 변경이 있을 때 SNS로 알림을 전송합니다.

Aurora Serverless v2는 가변 워크로드에 최적화된 관계형 데이터베이스입니다. 트래픽에 따라 자동으로 용량을 조정합니다. 24시간 항상 실행되는 고정 워크로드에는 Reserved Instance가 더 비용 효율적입니다.

ElastiCache는 반복 조회 결과를 인메모리에 캐싱해 RDS나 Aurora의 부하를 줄입니다. Redis는 복잡한 데이터 구조, 퍼시스턴스, 클러스터 모드를 지원합니다. Memcached는 단순 키-값 캐싱에 최적화되어 있습니다. DAX는 DynamoDB 전용 캐시로 Aurora에는 적용할 수 없습니다.

 

디커플링 — SQS, SNS, EventBridge

느슨한 결합(Loose Coupling)은 현대화 아키텍처의 핵심 원칙입니다. SQS, SNS, EventBridge는 각각 다른 디커플링 패턴을 제공합니다.

SQS Standard 큐는 최고 처리량을 제공하지만 메시지 순서가 보장되지 않고 최소 1회 전달입니다. SQS FIFO 큐는 메시지 그룹 ID 기반으로 순서를 보장하고 정확히 1회 처리를 제공하지만 최대 처리량이 300 TPS(배치 모드 3,000 TPS)로 제한됩니다.

Dead Letter Queue(DLQ)는 처리에 반복적으로 실패한 메시지를 별도 큐에 격리합니다. DLQ 없이는 실패 메시지가 계속 재처리되어 전체 파이프라인이 차단될 수 있습니다.

SNS는 즉각적인 병렬 팬아웃 패턴에 사용됩니다. 하나의 메시지를 여러 구독자(SQS, Lambda, HTTP, Email)에 동시에 전달합니다. API 속도 제한 문제를 해결하려면 SNS 대신 SQS를 사용해야 합니다. SNS는 즉시 병렬 전달하므로 속도 제한을 악화시킵니다.

EventBridge는 AWS 서비스와 SaaS 애플리케이션의 이벤트를 기반으로 규칙을 정의해 Lambda, SQS, Step Functions 등 다양한 타겟을 트리거합니다. 이벤트 버스 기반 아키텍처로 이벤트 생산자와 소비자를 완전히 분리합니다.

 

Step Functions — 서버리스 워크플로 오케스트레이션

복잡한 멀티스텝 워크플로를 Lambda 함수 체인으로 구현하면 오류 처리와 상태 관리가 어려워집니다. Step Functions는 워크플로를 시각적으로 정의하고 각 단계의 실행, 재시도, 오류 처리를 자동화합니다.

Standard Workflow는 장기 실행(최대 1년)과 감사 추적이 필요한 워크플로에 사용합니다. 정확히 1회 실행을 보장하며 실행 기록이 90일 동안 보존됩니다. Express Workflow는 5분 이내의 고처리량 워크플로에 사용합니다. 이벤트 기반 과금으로 고빈도 호출에 비용 효율적입니다.

Lambda의 15분 실행 시간 제한이 문제가 될 때는 Step Functions + ECS Fargate Task를 사용합니다. Map 상태로 병렬 처리를 오케스트레이션하고, Retry/Catch로 내장 오류 재시도와 예외 처리를 구현합니다.

 

Strangler Fig 패턴과 모놀리식 분해

모놀리식 애플리케이션을 한 번에 마이크로서비스로 전환하는 것은 위험합니다. Strangler Fig 패턴은 새로운 기능을 마이크로서비스로 구현하면서 점진적으로 모놀리식을 교체하는 방법입니다.

모놀리식 디커플링의 표준 패턴은 S3 정적 호스팅(프론트엔드) + API Gateway(REST API) + SQS + Lambda(비동기 처리)입니다. SQS 큐가 프로듀서(API)와 컨슈머(Lambda)를 분리하여 트래픽 급증 시에도 메시지 내구성을 보장합니다. 장애 격리도 달성됩니다. 주문 처리 지연이 프론트엔드나 API 응답에 영향을 미치지 않습니다.

 

시험 핵심 정리

"완전 서버리스 웹 아키텍처" -- CloudFront + S3 + API Gateway + Lambda + DynamoDB (EC2/Fargate 포함 시 제외)

"Lambda 함수 간 격리, 리전 풀 독점 방지" -- Reserved Concurrency

"Lambda 콜드 스타트 제거" -- Provisioned Concurrency

"Lambda 15분 초과 장시간 처리" -- ECS Fargate

"서버 → 클라이언트 실시간 능동 푸시" -- API Gateway WebSocket API + @connections API

"비정형 데이터, 버스트 트래픽, 세션 저장소" -- DynamoDB On-demand

"DynamoDB 항목 변경 실시간 이벤트" -- DynamoDB Streams + Lambda

"DAX는 DynamoDB 전용" -- Aurora/RDS에 적용 불가 (Aurora에는 ElastiCache)

"메시지 순서 보장, 정확히 1회 처리" -- SQS FIFO (Standard는 순서 미보장)

"API 속도 제한 해소, 쓰기 버퍼링" -- SQS (SNS는 속도 제한 악화)

"멀티스텝 워크플로, 장기 실행, 감사 추적" -- Step Functions Standard Workflow

"5분 이내 고처리량 워크플로" -- Step Functions Express Workflow

"점진적 모놀리식 분해" -- Strangler Fig 패턴

블로그 목록으로 돌아가기