앞 글의 SQS는 "한 메시지를 정확히 한 소비자가 가져간다"는 포인트-투-포인트 모델이었다. 그런데 현실의 많은 사건은 "한 번 일어났는데 여러 곳이 반응해야" 한다. 주문 하나가 생기면 재고 시스템도, 결제 시스템도, 알림 시스템도, 데이터 웨어하우스도 동시에 그 사실을 알아야 한다. 이걸 SQS로 하려면 생산자가 큐 4개에 똑같은 메시지를 4번 보내야 하고, 새 구독자가 늘 때마다 생산자 코드를 고쳐야 한다. 발행-구독(publish-subscribe) 모델은 이 문제를 뒤집는다 — 생산자는 "토픽"에 한 번만 발행하고, 누가 듣는지는 신경 쓰지 않는다. Amazon SNS는 이 모델을 완전 관리형으로 구현한 서비스다.
DVA-C02에서 SNS는 SQS와 거의 항상 짝으로 나온다. 단독 출제(필터 정책, FIFO 토픽)도 있지만, 핵심은 "팬아웃(fanout)"—SNS와 SQS를 결합해 한 이벤트를 여러 큐로 안정적으로 퍼뜨리는 패턴—이다. 이번 글은 발행-구독이 왜 생산자와 구독자를 떼어놓는지, SNS의 "푸시·비보존"이 SQS의 "풀·보존"과 어떻게 상호보완하는지, 그리고 필터 정책이 어떻게 "구독자 코드 없이" 메시지를 선별하는지를 깊이 들여다본다.
SNS의 핵심 단어는 토픽(topic) 이다. 생산자는 토픽에 메시지를 publish하고, 그걸로 끝이다. 토픽은 등록된 모든 구독자에게 그 메시지를 즉시 푸시(push) 한다