--- kind: CONCEPT slug: grpc-admin-c02 title: 배수 순서 topic: delivery-and-settlement-models project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:grpc-admin-c02 evidenceCapturedOn: 2026-09-01 assets: - key: grpc-admin-c02 file: ../../../final/evidence/rendered/grpc-admin-c02.svg evidence: - ../../../final/evidence/raw/grpc-admin-c02.txt source: - 원본 분석 절은 final/document.md#a20-grpc-admin#L65 이다. module: grpc-admin --- # 배수 순서 beginDrain 이 앞의 둘을 한 번에 수행하고, 그 전에 rejectNewAdmission 을 부르면 던진다. 조정자는 잠들지 않는다. ## 본문 배수 순서가 여섯 단계로 고정돼 있다. ```text READINESS_FALSE → HEALTH_DRAINING → REJECT_NEW_ADMISSION → DRAIN_UNARY → SIGNAL_STREAMS → FORCE_CANCEL ``` ## beginDrain 이 앞의 둘을 한 번에 한다 그 전에 `rejectNewAdmission` 을 부르면 던진다. > "refusing calls before readiness has flipped produces errors for traffic that routing is still sending" ## 이 기록이 다루는 범위 :::evidence key="grpc-admin-c02" alt="코드베이스에서 파일 목록을 만든 출력 13줄. 이 기록이 다루는 범위가 그 목록이다." caption="코드베이스 파일 목록 — 13줄 · exit 0" zoom="true" ::: ## 조정자는 잠들지 않는다 > "It is given the current moment and the counts, and returns whether the phase is done; the waiting belongs to the caller, which is what makes every branch of this testable without a clock." ## 예산은 누적이다 스트림 신호 완료 판정이 `unaryDrainBudget + streamSignalBudget` 을 기준으로 한다.