ZeroMQ를 살펴보며 적어 둔 메시징 패턴

Created Date: Last Updated:

  • Home /
  • Dev Log /
  • ZeroMQ를 살펴보며 적어 둔 메시징 패턴

ZeroMQ 개념과 메시징 패턴 이미지

ZeroMQ는 프로그램 안에서 메시지를 주고받는 데 쓰는 라이브러리다. 별도 브로커를 설치하지 않고 프로세스나 장비 사이를 연결할 수 있다.

처음 살펴볼 때는 소켓 종류부터 보면 이해하기 편하다. 연결된 상대에게 메시지를 어떤 방식으로 보낼지가 소켓 패턴에 따라 달라진다.

메시지를 어떻게 나눠 보낼까

패턴메시지 흐름
REQ/REP요청을 보내고 응답을 받는다.
PUB/SUB발행한 메시지를 구독자들에게 전달한다.
PUSH/PULL작업을 여러 수신자에게 나눠 보낸다.
PAIR두 소켓을 1:1로 연결한다.

요청 하나에 응답 하나가 필요한 통신이라면 REQ/REP, 여러 곳으로 데이터를 내보내려면 PUB/SUB, 작업을 나눠 처리하려면 PUSH/PULL부터 살펴볼 수 있다. 예제와 각 패턴의 제약은 ZeroMQ Guide 첫 장에 나온다.

별도 브로커 없이 시작할 수 있다

메시징 서버를 따로 운영하지 않아도 된다는 점은 작은 구성에서 편하다. 애플리케이션에 라이브러리를 넣고 소켓을 연결해 통신을 시작할 수 있다. 서로 다른 프로세스나 머신을 연결할 수 있고, 여러 언어의 바인딩도 있다.

전송과 큐 처리를 라이브러리에 맡기고 메시지 흐름에 집중할 수 있다. 센서 값을 모으거나, 프로세스끼리 작업을 나누거나, 내부 서비스 사이에 메시지를 전달하는 구성을 생각해 볼 수 있다.

애플리케이션에서 정할 부분도 있다

브로커 설치가 없다고 해서 시스템 설계까지 끝나는 것은 아니다. 상대가 끊겼을 때 어떻게 처리할지, 응답을 얼마나 기다릴지, 메시지를 다시 보낼지 같은 동작은 별도로 정해야 한다.

패턴마다 메시지를 전달하는 방식과 제약이 다르다. PUB/SUB로 보낸 메시지를 모든 구독자가 반드시 받는다고 가정하거나, REQ/REP의 순서를 무시하면 기대와 다르게 동작할 수 있다. 적용 전에 사용할 패턴의 예제를 먼저 실행해 볼 것.

여기에는 기본 패턴만 적었다. 실제 구성에 적용하려면 정상 송수신뿐 아니라 연결이 끊기거나 수신이 늦어지는 경우도 함께 확인해야 한다.