원문 캡처 · github.com
원문 캡처 · github.com

같은 은행 거래 처리 앱을 amqplib와 @cloudamqp/amqp-client로 각각 실행할 수 있다. 이 데모는 메시지 재시도와 연결 복구 같은 상황을 시험하려는 사람에게 유용하다.

은행 앱과 LavinMQ 데모는 거래를 발행하는 생산자와 이를 처리하는 작업자로 구성된다. 메시지 재시도, 실패 메시지의 별도 큐 이동(데드 레터링), 수동 확인 응답, 중복 처리 방지, 연결 복구를 다룬다.

무엇을 비교하나?

AMQP(메시지 브로커와 앱이 메시지를 주고받는 통신 방식) 클라이언트 두 종류를 비교한다. 생산자, 작업자, 거래 처리 로직은 공유하고 브로커 구현만 달라진다. broker.js가 사용할 클라이언트를 선택하며, 각 클라이언트 구현은 amqplib/broker.js와 amqp-client/broker.js에 있다. setup.js는 데모에 필요한 큐와 교환기, 연결 규칙을 만들고 shared/에는 은행 로직 등 공유 코드가 들어 있다.

실행하려면 무엇이 필요한가?

먼저 의존성을 설치하고 예시 환경 파일을 복사한다.

sh
npm install
cp .env.example .env

.env에 LavinMQ 연결 URL을 설정한다.

sh
AMQP_URL=your_lavinmq_url

큐와 교환기, 연결 규칙을 만든다.

sh
npm run setup

amqplib로 실행하려면 작업자를 시작한 뒤, 다른 터미널에서 거래를 발행한다.

sh
npm run worker:amqplib
npm run producer:amqplib -- valid

@cloudamqp/amqp-client로 실행할 때는 다음 명령을 사용한다.

sh
npm run worker:amqp-client
npm run produce:amqp-client -- valid

어떤 거래 상황을 시험할 수 있나?

생산자는 정상 거래, 일시적 실패, 잘못된 거래, 검토 대상 거래, 무작위 거래 시나리오를 지원한다.

sh
npm run produce:amqp-client -- valid
npm run produce:amqp-client -- temporary-failure
npm run produce:amqp-client -- invalid
npm run produce:amqp-client -- review
npm run produce:amqp-client -- random

같은 시나리오를 amqplib로 실행하려면 명령의 amqp-client를 amqplib로 바꾸면 된다. 데모는 두 클라이언트에서 메시지 발행과 소비, 확인 응답, 연결 복구를 비교할 수 있도록 구성됐다. 제작자가 강조하는 점은 클라이언트를 바꿔도 앱 로직과 재시도·실패 메시지 처리 전략을 바꾸지 않아도 된다는 것이다.

두 클라이언트의 실제 처리 성능이나 비교 결과는 원문에 제시되지 않는다.

부록: 원문 예시

text
Application      │      ▼   broker.js      │  ┌───┴───────────┐  ▼               ▼ amqplib       amqp-client.js broker           broker      │               │      └───────┬───────┘              ▼           LavinMQ