메시징 & 이벤트 기반 설계

발행: (2026년 1월 18일 오전 12:20 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

이벤트‑드리븐 아키텍처 (EDA)

이벤트‑드리븐 아키텍처는 작은, 분리된 서비스들이 이벤트를 게시, 소비 또는 라우팅하는 현대적인 패턴입니다.

  • 이벤트: 상태 변화 또는 업데이트를 나타냅니다 (예: 쇼핑 카트에 아이템이 추가됨, 파일이 업로드됨, 주문이 배송 준비 완료).
    • 이벤트는 전체 상태(아이템 이름, 가격, 수량)를 포함하거나 식별자만 포함할 수 있습니다(예: “주문 #8942가 배송됨”). 식별자는 관련 정보를 조회하는 데 사용됩니다.

전통적인 요청‑드리븐 모델과 달리, EDA는 생산자와 소비자 서비스 간의 느슨한 결합을 촉진하여 확장, 업데이트 및 독립적인 배포를 쉽게 합니다.

Amazon SQS (Simple Queue Service)

  • 완전 관리형 메시지 큐
  • 애플리케이션 구성 요소의 결합을 해제하는 데 사용

큐 유형

유형전달 보장정렬
Standard최소 한 번 전달최선 노력 정렬
FIFO정확히 한 번 처리엄격한 정렬

Amazon SNS (Simple Notification Service)

  • Pub/Sub 메시징 서비스
  • 하나의 메시지를 여러 구독자에게 전달 가능

일반 구독자

  • SQS
  • Lambda
  • Email / HTTP 엔드포인트

SNS vs. SQS

  • SNS는 구독자에게 메시지를 푸시합니다.
  • SQS는 메시지를 폴링합니다.

Fan‑out 패턴: SNS → 여러 SQS 큐.

Amazon EventBridge

Amazon EventBridge는 서버리스 이벤트 버스로, 이벤트‑드리븐 아키텍처를 지원합니다. AWS 서비스, 사용자 정의 애플리케이션, 타사 소프트웨어와 같은 소스에서 이벤트를 라우팅하여 AWS Lambda, Amazon SNS, Amazon SQS 등과 같은 대상에 전달합니다.

EventBridge는 구성 요소가 독립적으로 동작하고 실시간으로 이벤트에 반응하도록 하여 확장성, 유연성 및 복원력을 향상시킵니다.

언제 어떤 서비스를 사용할까

서비스일반적인 사용 사례
SQS비동기 처리, 버퍼링
SNSFan‑out 알림
EventBridge서비스 간 이벤트 라우팅

Lab 7: Amazon SQS를 이용한 메시징

목표

  • SQS를 사용해 애플리케이션 구성 요소를 분리합니다.
  • Lambda로 메시지를 비동기 처리합니다.
  • 실패 처리를 위해 Dead‑Letter Queue (DLQ)를 구성합니다.

아키텍처 개요

Producer (Lambda / CLI) → Amazon SQS → Consumer (Lambda)
                                 ↳ Dead Letter Queue

단계

  1. 표준 큐 생성

    • SQS → Create queue 로 이동합니다.
    • 유형: Standard
    • 가시성 타임아웃: 60 seconds
    • Create queue 를 클릭합니다.
  2. Dead Letter Queue (DLQ) 생성

    • order-processing-dlq 라는 이름의 SQS 큐를 하나 더 생성합니다.
    • 메인 큐 설정에서 DLQ를 구성합니다:
      • Max receives: 3
  3. Lambda Consumer 생성

    • Lambda → Create function 로 이동합니다.
    • 런타임: Python 3.12
    • 단계 1에서 만든 큐를 대상으로 하는 SQS 트리거를 추가합니다.
    • 다음 샘플 코드를 사용합니다:
    def lambda_handler(event, context):
        for record in event['Records']:
            print(record['body'])
  4. 큐에 메시지 전송

    aws sqs send-message \
        --queue-url <QUEUE_URL> \
        --message-body "Test message"

검증

  • Lambda 함수가 메시지를 처리하는지 확인합니다.
  • 최대 수신 횟수를 초과한 후 처리에 실패한 메시지가 DLQ로 이동하는지 확인합니다.
Back to Blog

관련 글

더 보기 »

도메인 이벤트에서 웹훅으로

도메인 이벤트는 다음 인터페이스를 구현합니다: php interface DomainEvent { public function aggregateRootId: string; public function displayReference: st...