이벤트 수명 주기 처리: 재시도, DLQ, 대상

AWS Lambda로 구축하는 서버리스 애플리케이션

Claudio Canales

Senior DevOps Engineer

이벤트 수명 주기 한눈에 보기

  • Lambda가 핸들러를 호출합니다.
  • 핸들러는 성공하거나 실패합니다.
  • 실패 시, 재시도와 라우팅이 다음 동작을 결정합니다.

이벤트 수명 주기 흐름

AWS Lambda로 구축하는 서버리스 애플리케이션

두 가지 실패 유형

동기(Synchronous)

  • 호출자가 대기하며 오류 응답을 받습니다.

비동기(Asynchronous)

  • 호출자에게 먼저 확인 응답이 전달됩니다.
  • Lambda가 백그라운드에서 재시도합니다.
  • 실패 처리 방식은 호출 모드에 따라 다릅니다.

동기 vs 비동기 실패 경로

AWS Lambda로 구축하는 서버리스 애플리케이션

재시도는 정상입니다

  • 재시도는 버그가 아닌 기능인 경우가 많습니다.
  • 일시적 실패는 다음 시도에서 성공할 수 있습니다.
  • 재시도는 중복 처리를 유발할 수 있으므로 핸들러에서 반드시 고려해야 합니다.

재시도 유추 이미지

AWS Lambda로 구축하는 서버리스 애플리케이션

시간에 따른 재시도

  • 재시도는 일시적 문제를 복구할 수 있습니다.
  • 하지만 동일한 이벤트가 여러 번 실행될 수 있습니다.
  • 멱등성과 명확한 오류 처리가 필수입니다.

재시도 타임라인

AWS Lambda로 구축하는 서버리스 애플리케이션

재시도가 위험한 경우

  • 작업이 멱등성을 갖지 않을 때 재시도는 위험합니다.
  • 예: 카드 결제, 이메일 발송.
  • 멱등성 키와 안전한 업데이트를 사용해 중복이 문제를 일으키지 않도록 하세요.

멱등성 목표 다이어그램

AWS Lambda로 구축하는 서버리스 애플리케이션

DLQ (Dead-Letter Queue)

  • 재시도 후에도 실패한 이벤트를 안전하게 보관하는 장소입니다.
  • 주로 AWS의 관리형 메시지 큐인 SQS 큐를 사용합니다.
  • 페이로드를 검사하고 문제를 수정한 후 재처리합니다.

DLQ 유추 이미지

AWS Lambda로 구축하는 서버리스 애플리케이션

DLQ vs Destinations

DLQ 유추 이미지

  • 재시도 후 실패한 이벤트를 캡처합니다.
  • 원인 조사에 활용합니다.

대상 라우팅 다이어그램

  • 성공 또는 실패에 따라 결과를 라우팅합니다.
  • 명시적인 성공 및 실패 경로를 구성합니다.
AWS Lambda로 구축하는 서버리스 애플리케이션

Destinations: 성공 및 실패 경로

  • 성공 시, onSuccess로 결과를 전송합니다.
  • 실패 시, onFailure로 세부 정보를 전송합니다.
  • 이를 통해 다음 단계를 명확하게 정의할 수 있습니다.

대상 라우팅 다이어그램

AWS Lambda로 구축하는 서버리스 애플리케이션

재시도 정책 조정

  • Lambda의 재시도 횟수를 조정합니다.
  • 이벤트 최대 수명을 제한해 오래된 데이터 처리를 방지합니다.
  • 재시도 횟수가 많을수록 안정성이 높아지지만 중복과 지연도 증가합니다.

재시도 정책 설정

AWS Lambda로 구축하는 서버리스 애플리케이션

최대 이벤트 수명: 만료 기한

  • 최대 이벤트 수명은 만료 정책입니다.
  • 이벤트가 너무 오래된 경우 처리 자체가 무의미할 수 있습니다.
  • 트레이드오프: 지연 이벤트는 줄어들지만 처리 적시성이 높아집니다.

이벤트 수명 만료 유추 이미지

AWS Lambda로 구축하는 서버리스 애플리케이션

관측 가능성: 어디를 확인할까

  • 로그는 무슨 일이 있었는지 알려줍니다.
  • 메트릭은 얼마나 자주 발생하는지 알려줍니다.
  • 알람은 급증 현상을 빠르게 감지하는 데 도움이 됩니다.

로그 vs 메트릭

AWS Lambda로 구축하는 서버리스 애플리케이션

실패한 이벤트 처리 방법

  • 페이로드와 오류를 검사합니다.
  • 근본 원인을 수정합니다.
  • 이벤트를 재처리한 후 오류와 처리량을 모니터링합니다.

실패 이벤트 복구 사이클

AWS Lambda로 구축하는 서버리스 애플리케이션

핵심 정리

  • 안정성은 재시도, 라우팅, 관측 가능성에서 비롯됩니다.
  • 동기 오류는 호출자에게 전달됩니다.
  • 비동기 오류는 재시도와 DLQ 또는 Destinations가 필요합니다.
  • 이를 통해 실패를 가시적으로 관리할 수 있습니다.

안정성 공식 다이어그램

AWS Lambda로 구축하는 서버리스 애플리케이션

연습해 봅시다!

AWS Lambda로 구축하는 서버리스 애플리케이션

Preparing Video For Download...