ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION1028 / 1500
분산 시스템난이도 중하5분 답변 목표 · 보강본

NATS로 작업을 요청했는데 no responders 또는 timeout이 반환됩니다. 두 결과는 무엇이 다르며, 재시도 전에 작업이 실행됐는지 어떻게 판단하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

NATS request-reply는 요청 subject와 응답 inbox로 responder 결과를 받는 메시지 RPC입니다. 지원 조건에서 no responders는 받을 구독자가 없다는 빠른 신호이고 timeout은 제한 시간 안에 응답이 없다는 뜻일 뿐 수신·처리·응답 유실을 구분하지 못합니다.

결과와 재시도

no responders이면 subject·배포·권한·계정 연결을 확인합니다. timeout이면 correlation ID로 responder 수신·외부 commit·응답 발행을 추적하고, 부수 효과 요청은 같은 작업 ID와 멱등 키로 재시도하거나 결과 조회를 먼저 합니다. 요청자가 포기해도 responder 작업이 자동 취소되지는 않으므로 deadline·취소 subject·durable job 소유권을 정합니다.

inbox는 늦은 응답과 새 요청이 섞이지 않게 correlation ID와 수명을 관리합니다. 여러 responder의 첫 응답 채택은 조회에는 맞아도 모든 변경 결과가 필요한 작업에는 맞지 않습니다. no responders·지연·응답 유실·중복 응답을 시험하며 비밀과 무제한 입력을 로그에 남기지 않습니다.

빠른 부재 신호와 불확정 결과

지원되는 서버·클라이언트 구성에서 no responders는 그 시점에 요청을 받을 구독자가 없음을 빠르게 알려 줄 수 있습니다. 잘못된 subject, responder 배포 누락, 계정 간 연결이나 권한 설정을 확인합니다. 반면 timeout은 요청이 전달되지 않았는지, 처리가 느린지, 처리는 끝났지만 응답이 사라졌는지를 구분하지 못합니다. 두 결과를 같은 '실행 안 됨'으로 처리하면 중복 주문을 만들 수 있습니다.

주문 생성 요청을 받은 responder가 DB commit 뒤 응답 전에 죽었다면 요청자는 timeout을 봅니다. 같은 논리 요청 ID로 상태를 조회하거나 멱등하게 재요청해 이미 생성된 주문을 반환해야 합니다. 요청 ID를 매 재시도마다 새로 만들면 중복 방지 경계를 스스로 없앱니다. 응답에는 상관 ID와 오류 분류를 포함하되 내부 정보·비밀값을 과도하게 노출하지 않습니다.

응답 수와 실행 수

request API가 첫 응답만 채택해도 일반 구독자 여러 개가 요청을 받았다면 여러 responder가 외부 효과를 실행했을 수 있습니다. 같은 서비스 인스턴스는 queue group으로 분배하거나 저장 지점의 멱등성을 사용해야 합니다. 여러 결과를 모두 모으는 집계가 목적이라면 첫 응답 API가 아니라 기대 응답 수·기한·부분 결과 계약이 필요합니다.

inbox는 요청 수명과 연결되며 늦은 응답이 다음 요청에 섞이지 않도록 식별자를 관리합니다. timeout으로 inbox 구독을 정리해도 responder 계산은 계속될 수 있습니다. deadline을 요청에 전달하고 responder가 단계별로 확인하게 하거나 취소 메시지를 설계하되 취소 요청과 실제 종료 확인을 구분합니다. 반드시 끝내야 하는 작업은 내구 작업 ID로 접수하고 결과를 나중 조회하는 비동기 API가 더 맞을 수 있습니다.

관측은 발행·수신·DB commit·응답 발행·요청자 수신의 시각을 같은 작업 ID로 연결합니다. no responders 비율과 처리 timeout을 나누고, 큰 payload나 느린 responder가 공유 연결·큐를 고갈시키지 않도록 크기·동시성·대기 상한도 둡니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • no responders와 timeout 범위를 구분한다.
  • 불확정 timeout을 멱등 키와 연결한다.
  • 취소·inbox·다중 응답을 설명한다.
  • 응답 유실을 검증한다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • timeout이면 실행되지 않았다고 단정한다.
  • 요청 timeout이 responder를 취소한다.
  • 로그에 비밀과 무제한 입력을 남긴다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기