안정적인 메시지 큐 운영을 위한 Heartbeat 시스템 디자인

안정적인 메시지 큐 운영을 위한 Heartbeat 시스템 디자인

2026, Jan 08    

S3 파일 업로드 이벤트를 SQS로 전달하고 ECS에서 처리하는 시스템에서, 일회성 Task 실행 방식의 한계를 Netflix의 Heartbeat 패턴으로 개선한 경험을 공유합니다.

기존 아키텍처의 문제점

Push 모델 흐름

S3 파일 업로드 → Lambda → SQS + ECS Task 실행 → 일회성 처리 후 종료

기존 아키텍처

시퀀스 다이아그램

문제점

문제 설명
일회성 실행 Task가 메시지 처리 후 즉시 종료, 실패 시 재시도 없음
DLQ 미작동 메시지를 한 번만 수신하므로 Receive Count가 증가하지 않음
리소스 낭비 메시지마다 Task 생성/종료 오버헤드, 시작 지연 발생

Heartbeat 패턴으로 개선

Pull 모델 흐름

S3 파일 업로드 → Lambda → SQS → 상시 실행 ECS가 Polling하여 처리

개선된 아키텍처

Heartbeat 패턴

Heartbeat 패턴이란?

Consumer가 지속적으로 실행되며 주기적으로 큐를 polling하는 방식입니다. 심장 박동처럼 일정한 간격으로 메시지를 확인하고 처리합니다.

Heartbeat 패턴

개선 효과

재시도 및 DLQ 정상 작동

  • 처리 실패 시 메시지를 삭제하지 않음
  • Visibility Timeout 후 메시지가 다시 visible → 재수신 → Receive Count 증가
  • 설정 횟수 초과 시 DLQ로 자동 이동

리소스 효율성

  • Task 생성/종료 오버헤드 제거
  • 메모리, DB 연결 등 리소스 재사용

안정성

this.shutdownProvider.subscribeToShutdown(() => {
  this.isRunning = false;
});
  • Graceful Shutdown으로 메시지 유실 방지
  • 개별 메시지 실패가 전체 시스템에 영향 없음

운영 설정

SQS

설정 권장값 비고
Visibility Timeout 300초 처리 시간보다 충분히 길게
maxReceiveCount 3 DLQ 이동 기준
Wait Time 20초 Long polling으로 비용 절감

Application

설정 권장값
Polling Interval 1초
Concurrency 순차 처리 (필요시 병렬 확장)

결론

Heartbeat 패턴 도입으로 자동 재시도, DLQ 정상 작동, 리소스 효율성, 에러 격리를 달성하여 프로덕션 환경에서 안정적인 메시지 처리 시스템을 구축했습니다.

참고