AZ-204에서 메시지 서비스는 분산 시스템 통합의 핵심입니다. 시스템 간 안정적인 비동기 통신을 구현하는 방법을 다룹니다.
메시지 서비스가 필요한 이유
온라인 쇼핑몰에서 주문이 들어왔을 때 결제, 재고 감소, 배송 예약, 이메일 발송을 동시에 처리해야 한다고 상상해보세요. 모든 작업을 직접 연결하면 하나가 느려지면 전체가 막힙니다.
메시지 큐는 이 문제를 해결하는 우편함입니다. 주문 시스템은 "주문 완료" 메시지를 큐에 넣고 바로 다음 작업으로 넘어갑니다. 결제, 재고, 배송 시스템은 각자 큐에서 메시지를 꺼내 처리합니다. 서로 독립적으로, 서로의 속도에 맞춰서요.
Azure Service Bus
Service Bus는 대기업의 사내 우편 시스템과 같습니다. 단순히 편지를 전달하는 것을 넘어, 배달 확인, 우선순위 처리, 분류 배송, 실패 시 재시도까지 갖춘 엔터프라이즈급 메시지 브로커입니다.
큐 (Queue) — 1:1 메시지
발신자 하나가 수신자 하나에게 메시지를 보냅니다. 메시지는 FIFO(선입선출) 방식으로 처리됩니다.
| 특성 | 내용 | |------|------| | 메시지 크기 | 최대 256KB (Standard 티어) ~ 100MB (Premium 티어) | | 중복 검색 | 동일 메시지가 두 번 전송되면 자동으로 한 번만 처리 | | TTL (Time-To-Live) | 메시지 만료 시간 설정 가능 | | 잠금 기반 처리 | 수신자가 처리 중인 동안 다른 수신자가 못 가져감 |
토픽과 구독 (Topics & Subscriptions) — 1:N 메시지
발신자 하나가 여러 수신자에게 메시지를 보냅니다. 구독 필터를 사용해 수신자마다 다른 메시지를 받을 수 있습니다.
SQL 필터: 같은 SQL 조건으로 필터링 상관 관계 필터 (Correlation Filter): 특정 속성 값으로 필터링 (SQL 필터보다 성능 우수)
예를 들어 주문 이벤트 토픽에 구독이 3개 있다면: 구독 A (결제팀): 모든 주문 수신 구독 B (VIP팀): 조건에 맞는 주문만 수신 구독 C (대용량팀): 조건에 맞는 주문만 수신
고급 기능
| 기능 | 설명 | 언제 사용? | |------|------|----------| | 배달 못한 편지 큐 (DLQ) | 처리 실패한 메시지가 쌓이는 별도 큐 | 실패 메시지 분석, 재처리 | | 메시지 세션 (Session) | 동일 세션 ID를 가진 메시지를 순서대로 처리 | 주문 순서가 중요한 경우 | | 지연 메시지 (Scheduled) | 특정 시간에 메시지가 처리되도록 예약 | 예약 발송, 지연 처리 | | 자동 전달 (Auto-forward) | 큐/구독에서 다른 큐로 자동 전달 | 메시지 라우팅 | | 트랜잭션 (Transaction) | 여러 메시지 작업을 원자적으로 처리 | 보내기/받기를 하나의 단위로 |
Service Bus SDK 사용
PeekLock vs ReceiveAndDelete
| 방식 | 동작 | 언제 사용? | |------|------|----------| | PeekLock (기본) | 메시지를 잠근 상태로 가져옴, 처리 후 명시적으로 완료 처리 | 메시지 손실 허용 안 됨 (안전, 권장) | | ReceiveAndDelete | 가져오는 즉시 큐에서 삭제 | 처리 중 오류 발생해도 괜찮은 경우 (빠르지만 위험) |
Azure Queue Storage
Queue Storage는 동네 우체통과 같습니다. 기본적인 편지 보관 기능만 있고, 부가 서비스는 없지만 저렴하고 누구나 쉽게 사용할 수 있습니다.
| 특성 | 내용 | |------|------| | 메시지 크기 | 최대 64KB | | 저장 가능 수 | 무제한 (스토리지 계정 용량까지) | | 가시성 타임아웃 | 수신자가 메시지 처리 중 다른 수신자가 못 보게 숨기는 시간 | | 보존 기간 | 최대 7일 | | 접근 방식 | HTTP/HTTPS REST API |
Queue Storage는 Azure Storage 계정의 일부로, Blob Storage와 같은 계정에서 사용할 수 있습니다.
Service Bus vs Queue Storage 비교
| 항목 | Service Bus | Queue Storage | |------|------------|--------------| | 메시지 크기 | 최대 100MB (Premium) | 최대 64KB | | 메시지 순서 보장 | FIFO 세션 지원 | 보장 없음 | | 중복 제거 | 지원 | 미지원 | | 토픽/구독 (1:N) | 지원 | 미지원 | | DLQ | 지원 | 미지원 | | 트랜잭션 | 지원 | 미지원 | | 비용 | 상대적으로 높음 | 저렴 | | 적합한 시나리오 | 엔터프라이즈, 복잡한 워크플로 | 단순 큐, 대량 저장, 저비용 |
!Service Bus vs Queue Storage
시험 핵심 정리
"엔터프라이즈급 안정적 메시지 전달, 복잡한 워크플로" -- Azure Service Bus
"1:1 메시지 전달, FIFO" -- Service Bus 큐 (Queue)
"1:N 메시지 전달, 구독별 필터" -- Service Bus 토픽 (Topic) + 구독 (Subscription)
"SQL 조건으로 메시지 필터링" -- SQL 필터
"특정 속성으로 필터링, SQL 필터보다 성능 우수" -- 상관 관계 필터
"처리 실패 메시지 보관 장소" -- 배달 못한 편지 큐 (DLQ)
"같은 세션 ID 메시지를 순서대로 처리" -- 메시지 세션 (Session)
"메시지 수신 후 처리 완료까지 잠금 유지 (안전)" -- PeekLock
"수신 즉시 삭제 (빠르지만 손실 위험)" -- ReceiveAndDelete
"단순 큐, 저비용, 64KB 이하 메시지" -- Azure Queue Storage
"가시성 타임아웃: 처리 중 다른 수신자가 같은 메시지를 못 가져가게" -- Queue Storage 가시성 타임아웃