들어가며: 메시지 큐와 아키텍처 설계

AWS SQS(Simple Queue Service)는 마이크로서비스 아키텍처나 분산 시스템에서 컴포넌트 간 결합도를 낮추고 비동기 통신을 구현할 때 쓰는 완전관리형 메시지 큐 서비스입니다.

SQS는 표준(Standard) 큐FIFO(First-In-First-Out) 큐 라는 두 가지 유형의 큐를 제공합니다. 두 큐는 메시지 처리 방식과 보장 수준이 다르기 때문에, 작업 성격에 맞게 선택해야 합니다. 이 글에서는 두 큐 타입의 특징과 차이를 비교합니다.

1. 표준(Standard) 큐: 최대 처리량을 위한 선택

표준 큐는 SQS의 기본 큐 타입으로, 최대 처리량(Throughput) 에 초점을 맞추어 설계되었습니다.

주요 특징

  • 최소 한 번 이상 전달 (At-Least-Once Delivery) 메시지가 소비자에게 최소 한 번은 전달되는 것을 보장합니다. 하지만 분산 시스템의 특성상 매우 드물게 동일한 메시지가 두 번 이상 전달될 수 있습니다. 따라서 소비자는 동일한 메시지를 여러 번 처리하더라도 결과가 동일하도록, 즉 멱등성(Idempotency) 을 반드시 보장해야 합니다. 예를 들어, 주문 생성 메시지를 여러 번 받아도 주문이 단 한 번만 생성되도록 처리해야 합니다.

  • 최선 노력 순서 지정 (Best-Effort Ordering) SQS는 메시지가 전송된 순서를 최대한 유지하려고 노력하지만, 순서를 보장하지는 않습니다. 높은 처리량을 위해 메시지가 병렬로 처리되면서 순서가 뒤바뀔 수 있습니다. 따라서 메시지 처리 순서가 중요하지 않은 작업에 적합합니다.

  • 거의 무제한에 가까운 처리량 표준 큐의 가장 큰 장점입니다. 초당 매우 많은 API 호출(SendMessage, ReceiveMessage 등)을 처리할 수 있어 대규모 비동기 작업에 잘 맞습니다.

주요 사용 사례

  • 실시간 로그 처리 및 분석
  • 사용자 업로드 이미지 리사이징 및 썸네일 생성
  • 대량의 이메일 또는 푸시 알림 발송
  • 처리 순서와 상관없이 독립적으로 수행될 수 있는 모든 종류의 백그라운드 작업

2. FIFO(First-In-First-Out) 큐: 순서 보장과 정확성을 위한 선택

FIFO 큐는 이름에서 알 수 있듯이, 메시지가 들어온 순서대로 정확히 처리되어야 하는 작업에 특화되어 있습니다.

주요 특징

  • 선입선출 전달 (First-In-First-Out Delivery) 메시지가 전송된 순서가 수신될 때까지 엄격하게 보장 됩니다.

  • 정확히 한 번 처리 (Exactly-Once Processing) 메시지가 소비자에게 정확히 한 번만 전달되도록 보장합니다. 소비자가 메시지를 수신하여 처리하고 삭제하기 전까지 해당 메시지는 다른 소비자에게 전달되지 않으며, 시스템 내에서 메시지 중복이 발생하지 않습니다.

  • 메시지 그룹 ID (Message Group ID) 동일한 MessageGroupId를 가진 메시지들은 그 그룹 안에서 순서가 보장됩니다. 반면 서로 다른 MessageGroupId를 가진 메시지들은 병렬로 처리될 수 있습니다. 예를 들어 특정 고객(CustomerID)의 주문 이벤트는 같은 MessageGroupId로 묶어 순서대로 처리하고, 다른 고객의 주문은 동시에 처리할 수 있습니다.

성능 및 제한 사항

  • 순서와 정확성을 보장하기 위한 오버헤드로 인해, 표준 큐보다 처리량에 제한이 있습니다. (AWS 공식 문서에 따르면, 기본적으로 초당 최대 300개의 메시지, 배치(batch) 처리를 사용하면 초당 최대 3,000개의 메시지를 처리할 수 있습니다.)

주요 사용 사례

  • 은행 거래 처리 (입금 후 출금 순서 보장)
  • 전자상거래 주문 처리 시스템 (주문 생성 → 결제 → 배송 순서 보장)
  • 주식 거래 시스템의 매수/매도 주문 처리
  • 사용자 채팅 메시지 순차적 표시

한눈에 보는 비교: Standard vs. FIFO

구분표준(Standard) 큐FIFO 큐
메시지 순서최선 노력 (보장 안 됨)선입선출 (엄격히 보장)
전달 보장최소 한 번 이상정확히 한 번
처리량거의 무제한높지만, 제한 있음
소비자 멱등성반드시 필요필요 없음 (큐가 보장)
메시지 그룹화없음가능 (MessageGroupId)
주요 장점높은 확장성과 처리량데이터의 순서와 정합성 보장
적합한 작업순서에 무관한 대규모 비동기 작업순서가 매우 중요한 트랜잭션 작업

결론: 어떤 큐를 선택해야 할까?

큐 타입을 선택하는 것은 간단한 결정 규칙으로 귀결됩니다.

“메시지 처리 순서가 중요한가?”

  • “예, 순서가 반드시 지켜져야 합니다.”FIFO 큐 를 선택합니다. 순서가 중요한 비즈니스 로직에 표준 큐를 사용하면 데이터 정합성이 깨질 수 있습니다.

  • “아니오, 순서와 상관없이 독립적으로 처리할 수 있습니다.”표준 큐 를 선택합니다. 처리량과 확장성을 얻는 대신, 소비자 측에서 멱등성을 보장해야 합니다.

정리하면, 순서 보장이 비즈니스 요구사항인지 먼저 판단하면 됩니다. 순서가 중요하면 FIFO 큐, 순서보다 처리량이 중요하고 각 메시지를 독립적으로 처리할 수 있다면 표준 큐가 더 잘 맞습니다.


이 글은 AI의 도움을 받아 교정 및 정리되었습니다.