서비스 사이를 잇는 법, 이벤트 버스와 워크플로우
· 약 3분
서비스를 비동기로 잇는 두 도구(NATS 이벤트 버스, Temporal 워크플로우)를 살펴보고, 메시지 보관 기간을 잘못 잡아 데인 사고를 정리합니다.
지난 편까지 서비스를 나누고, 거기에 로그인을 붙였습니다. 이번에는 나뉜 서비스들이 서로 어떻게 이야기를 주고받는지를 다뤄 보겠습니다.
직접 부르면 함께 넘어집니다
서비스 A가 일을 끝낸 뒤 B에게 알려야 한다고 해봅시다. 가장 단순한 방법은 A가 B를 직접 호출하는 것입니다. 하지만 직접 호출에는 함정이 있습니다.
전화에 비유하면 이렇습니다. A가 B에게 전화를 걸면, B가 받을 때까지 A는 수화기를 들고 기다려야 합니다. B가 바쁘거나 잠시 죽어 있으면, A도 함께 멈춥니다. 한 서비스의 장애가 전화선을 타고 옆으로 번지는 것이지요.
게다가 "결제가 끝났다"는 사실 하나에 관심 있는 서비스가 여럿일 수 있습니다. 알림도 보내야 하고, 통계도 쌓아야 하고, 영수증도 발급해야 합니다. 그때마다 A가 세 곳에 전화를 돌리는 것은 번거롭고, 한 곳이라도 안 받으면 A가 멈춥 니다.
사실은 게시판에 붙입니다 (이벤트 버스, NATS)
그래서 직접 전화 대신 게시판을 두었습니다. A는 "결제가 끝났다"를 게시판에 붙이기만 합니다. 누가 보는지는 신경 쓰지 않습니다. 관심 있는 서비스가 알아서 와서 읽습니다.

이 게시판 역할을 하는 것이 이벤트 버스(NATS)입니다. 핵심은 발행하는 쪽은 수신자를 모른다는 점입니다.
- A는 게시판에 사실을 붙이고 자기 일을 계속합니다. B가 죽어 있어도 A는 멈추지 않습니다.
- 알림·통계·영수증 서비스가 각자 필요한 글만 골라 읽습니다.
- 수신자가 새로 늘어도 A의 코드는 바뀌지 않습니다. 게시판만 보면 되니까요.
서로 모르기 때문에 서로 묶이지 않습니다. 이것이 비동기로 잇는 첫 번째 도구입니다.