정지용
기술스택 목록
백엔드

Pub/Sub

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

발행자와 구독자를 분리해 메시지를 비동기로 전달하는 메시징 패턴이자 서비스

Pub/Sub(Publish/Subscribe)는 메시지를 보내는 쪽(Publisher)과 받는 쪽(Subscriber)이 서로를 직접 알 필요 없이 통신하도록 하는 비동기 메시징 패턴이다. Publisher는 특정 토픽(topic)에 메시지를 보내기만 하고, Subscriber는 관심 있는 토픽을 구독해 메시지를 전달받는다. 컴포넌트 간 직접 호출 대신 메시지 브로커를 중간에 두어, 발신자와 수신자의 수·존재 여부·처리 속도가 서로에게 영향을 주지 않도록 결합도를 낮추기 위해 고안되었다.

이럴 때 사용합니다

  • 여러 서비스가 하나의 이벤트를 동시에 각자의 방식으로 처리해야 할 때
  • 발신자와 수신자를 시간적·구조적으로 분리해 시스템 결합도를 낮추고 싶을 때
  • 수집·생성 속도와 처리 속도가 달라 버퍼링과 비동기 처리가 필요할 때
  • 신규 구독자를 기존 발행 로직 변경 없이 자유롭게 추가하고 싶을 때

핵심 개념

Topic
메시지가 발행되는 논리적 채널로, Publisher는 토픽에 메시지를 보내고 Subscriber는 토픽을 구독해 메시지를 받는다.
Publisher
메시지를 생성해 토픽에 발행하는 주체로, 누가 구독하는지 알 필요 없이 메시지만 보낸다.
Subscriber
관심 있는 토픽을 구독해 발행된 메시지를 비동기로 전달받아 처리하는 주체.
Decoupling(느슨한 결합)
Publisher와 Subscriber가 서로의 존재나 처리 방식을 몰라도 메시지를 주고받을 수 있는 구조적 특성이다.
Message Broker
발행된 메시지를 저장하고 구독자에게 라우팅해주는 중개 인프라로, 전달 보장과 버퍼링 역할을 한다.
Ack(Acknowledgement)
Subscriber가 메시지를 정상적으로 처리했음을 브로커에 알리는 신호로, 중복 처리나 유실을 막는 데 쓰인다.

토픽 발행과 구독 예시

news-crawled 토픽을 만들고 구독을 연결한 뒤, 메시지를 발행하고 구독자가 이를 수신하는 기본 흐름을 보여준다.

Shell
# 토픽 생성
gcloud pubsub topics create news-crawled

# 구독 생성 (해당 토픽에 연결)
gcloud pubsub subscriptions create news-crawled-sub \
  --topic=news-crawled

# 메시지 발행
gcloud pubsub topics publish news-crawled \
  --message='{"id": 123, "title": "example"}'

# 구독자가 메시지 수신 (pull 방식)
gcloud pubsub subscriptions pull news-crawled-sub --auto-ack

처음 쓸 때 흔한 함정

  • 메시지 순서와 정확히 한 번(exactly-once) 처리는 기본으로 보장되지 않는 경우가 많다
  • 구독자가 없거나 처리에 실패한 메시지의 재시도·유실 정책을 별도로 설계해야 한다
  • 동기 API 호출처럼 즉시 응답을 기대하면 비동기 특성 때문에 설계가 어긋난다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.