본문 바로가기

Stack/AWS

[AWS DEA] 문제로 공부하기 14 - SQS 대기열 메시지 제거

반응형
AWS DEA-C01 SQS 대기열에서 메시지를 제거하는 이벤트 | DeleteMessage · maxReceiveCount · 대기열 삭제 완전 정리

SQS 대기열에서 메시지를 제거하는 이벤트 3가지 — DeleteMessage · maxReceiveCount · 대기열 삭제

AWS DEA-C01 시험에 자주 나오는 SQS 메시지 지속성 문제입니다. SQS에서 메시지를 영구 제거하는 이벤트는 DeleteMessage API 호출, maxReceiveCount 도달(DLQ 이동), 대기열 자체 삭제 세 가지입니다. ReceiveMessage 호출과 가시성 시간 제한 만료가 메시지를 삭제하지 않는 이유를 함께 비교 정리합니다.

📋 문제

한 데이터 엔지니어가 변환할 데이터를 Amazon SQS 대기열에 추가하는 애플리케이션을 설계 중이다. 마이크로서비스는 대기열에서 메시지를 수신한다. 데이터 엔지니어는 메시지 지속성이 유지되기를 바란다.

다음 중 SQS 대기열에서 메시지를 제거할 수 있는 이벤트는 무엇인가? (3개 선택)

🔑 핵심 개념 — SQS 메시지 상태 3가지

SQS 메시지는 항상 아래 세 가지 상태 중 하나입니다. 영구 삭제는 특정 이벤트에서만 발생합니다.

대기 중 (Active)
소비자가 읽기 가능
비가시 (Invisible)
ReceiveMessage 후
가시성 시간 제한 동안
처리 완료
DeleteMessage 호출 시
영구 삭제
비가시 (Invisible)
대기 중 (Active) 복귀
가시성 시간 제한 만료 시 — 삭제 아님!
⚠️ 핵심 원칙: SQS는 명시적으로 삭제 요청이 있어야만 메시지를 제거합니다. ReceiveMessage(읽기)나 가시성 시간 제한 만료는 메시지를 삭제하지 않습니다. 이것이 메시지 지속성(Durability)의 핵심입니다.

✅ 메시지를 제거하는 이벤트 vs 유지하는 이벤트

🗑️
A. DeleteMessage API
소비자가 처리 완료 후 DeleteMessage를 명시적으로 호출 → 즉시 영구 삭제
❌ 메시지 제거
🔁
B. maxReceiveCount 도달
처리 실패 횟수가 한도 초과 → DLQ로 이동 (원본 대기열에서 제거)
❌ 원본 대기열에서 제거
💥
C. 대기열 삭제
대기열 자체를 삭제하면 내부 모든 메시지 함께 영구 삭제
❌ 모든 메시지 제거
👁️
D. ReceiveMessage API
메시지를 읽어 처리 중 상태로 전환 (비가시). 처리 완료 후 Delete 필요
✅ 메시지 유지 (읽기만)
E. 가시성 시간 제한 만료
시간 초과 시 메시지가 다시 Active 상태로 복귀. 다른 소비자가 재처리 가능
✅ 메시지 유지 (복귀)
⚙️
F. 대기열 구성 편집
유지 기간·가시성 설정 등 변경. 기존 메시지 내용·존재에는 영향 없음
✅ 메시지 유지

🔁 maxReceiveCount 도달 → DLQ 이동 상세 흐름

메시지 수신 시도 1회
처리 실패 · 미삭제
대기 복귀 (재시도)
위 사이클이 maxReceiveCount 횟수만큼 반복된 후
maxReceiveCount 초과
DLQ로 이동
원본 대기열에서 제거 💀
💡 DLQ 미설정 시: maxReceiveCount 초과 후 메시지가 DLQ 없이 그냥 삭제됩니다. 메시지 지속성을 위해 DLQ를 항상 설정하는 것을 권장합니다.

📝 선택지 해설

✅ 복수 정답 (3개 선택)
💡 정답. SQS에서 메시지를 영구적으로 제거하는 가장 정상적인 방법입니다. 소비자가 ReceiveMessage로 메시지를 가져와 처리를 완료한 후, DeleteMessage API를 명시적으로 호출해야 메시지가 대기열에서 영구 삭제됩니다. 이 단계를 거치지 않으면 가시성 시간 제한이 만료된 후 메시지가 다시 대기열에 나타나 다른 소비자가 재처리합니다. 이것이 SQS의 At-Least-Once 전달 보장 메커니즘입니다.
💡 정답. DLQ(Dead Letter Queue)가 연결된 경우, 메시지가 maxReceiveCount(최대 수신 횟수)에 도달하면 원본 대기열에서 메시지가 제거되고 DLQ로 이동됩니다. DLQ가 없다면 해당 메시지는 단순히 삭제됩니다. 어느 쪽이든 원본 SQS 대기열에서는 메시지가 제거됩니다. 이 기능은 독성 메시지(처리 불가능한 메시지)가 대기열을 계속 점유하지 않도록 보호합니다.
💡 정답. Amazon SQS 대기열을 삭제하면 해당 대기열 내의 모든 메시지가 함께 영구적으로 삭제됩니다. 처리 중인 메시지(비가시 상태), 대기 중인 메시지 모두 복구 불가능하게 제거됩니다. 대기열 삭제는 취소할 수 없으며, 같은 이름으로 대기열을 다시 생성해도 기존 메시지는 복원되지 않습니다.
💡 ReceiveMessage는 대기열에서 메시지를 읽어오는 API이지 삭제하는 API가 아닙니다. ReceiveMessage를 호출하면 메시지는 가시성 시간 제한(Visibility Timeout) 동안 다른 소비자에게 보이지 않는 상태(Invisible)가 됩니다. 이 시간 내에 처리를 완료하고 DeleteMessage를 호출하지 않으면 가시성 시간 제한이 만료되어 메시지가 다시 대기열에 나타납니다. ReceiveMessage 자체는 메시지를 절대 삭제하지 않습니다.
💡 가시성 시간 제한(Visibility Timeout)이 만료되면 메시지가 삭제되는 것이 아니라 다시 Active(대기 중) 상태로 복귀합니다. 이는 SQS의 핵심 메시지 지속성 메커니즘입니다. 소비자가 처리에 실패하거나 다운되더라도 메시지가 사라지지 않고 다른 소비자가 다시 처리할 수 있도록 대기열에 남아 있게 됩니다. 메시지를 실제로 제거하려면 반드시 DeleteMessage API를 호출해야 합니다.
💡 대기열 구성(Configuration) 편집은 대기열의 속성(유지 기간, 가시성 시간 제한, 최대 메시지 크기 등)을 변경하는 것입니다. 이러한 설정 변경은 현재 대기열 내의 기존 메시지에 영향을 주지 않습니다. 메시지는 그대로 대기열에 남아 있습니다. 예를 들어 유지 기간을 4일에서 1일로 줄여도 이미 들어온 메시지가 즉시 삭제되지 않습니다. (단, 변경 후 유지 기간이 지난 메시지는 만료되어 삭제될 수 있습니다.)

정답: A + B + C

SQS 메시지 지속성의 핵심은 "명시적 삭제 요청 없이는 메시지가 제거되지 않는다"입니다. ReceiveMessage(D)는 읽기만, 가시성 만료(E)는 복귀, 구성 편집(F)은 메시지 무관. 메시지가 제거되는 상황은 명시적 삭제(A), 처리 실패 한도 초과(B), 대기열 자체 삭제(C) 세 가지입니다.

# SQS 메시지 생명주기 — 제거 여부 정리 이벤트 메시지 상태 제거? ───────────────────────────────────────────────────── A. DeleteMessage API 호출 → 영구 삭제 ✅ 제거 B. maxReceiveCount 도달 → DLQ 이동 ✅ 원본에서 제거 C. 대기열 삭제 → 모든 메시지 삭제 ✅ 제거 D. ReceiveMessage API 호출 → Invisible 상태 ❌ 유지 (숨겨짐만) E. 가시성 시간 제한 만료 → Active 상태 복귀 ❌ 유지 (재처리 가능) F. 대기열 구성 편집 → 변화 없음 ❌ 유지 # 메시지 지속성 보장 흐름 Producer → SQS 대기열 (Active) ↓ ReceiveMessage 소비자가 처리 중 (Invisible, 가시성 시간 제한 내) ↓ 처리 완료 DeleteMessage 호출 → 영구 삭제 ✅ ↓ 처리 실패 / 시간 초과 가시성 시간 제한 만료 → Active 복귀 → 재처리

📊 선택지 비교 요약

선택지 이벤트 메시지 상태 변화 메시지 제거? 결론
A ⭐ DeleteMessage API Active → 영구 삭제 ✅ 제거 정답
B ⭐ maxReceiveCount 도달 원본 → DLQ 이동 ✅ 원본에서 제거 정답
C ⭐ 대기열 삭제 모든 메시지 삭제 ✅ 전부 제거 정답
D ReceiveMessage API Active → Invisible ❌ 유지 (숨겨짐) 탈락
E 가시성 시간 제한 만료 Invisible → Active 복귀 ❌ 유지 (복귀) 탈락
F 대기열 구성 편집 변화 없음 ❌ 유지 탈락
#AWS_DEA-C01 #AmazonSQS #SQS_DeleteMessage #SQS_ReceiveMessage #maxReceiveCount #가시성시간제한 #VisibilityTimeout #SQS메시지지속성 #DeadLetterQueue #메시지제거이벤트 #AWS자격증 #AWS데이터엔지니어
반응형