--- kind: CONCEPT slug: messaging-transport-spi-c05 title: 포기가 조용하지 않다는 것이 설계다 topic: state-machines-and-ownership project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-transport-spi-c05 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-transport-spi-c05 file: ../../../final/evidence/rendered/messaging-transport-spi-c05.svg evidence: - ../../../final/evidence/raw/messaging-transport-spi-c05.txt source: - 원본 분석 절은 analysis/messaging/messaging-transport-spi.md#L338 이다. module: messaging-transport-spi --- # 포기가 조용하지 않다는 것이 설계다 이 leaf가 직접 던지는 예외는 하나다. 나머지는 IllegalArgumentException(생성자 인자 검증)과 NullPointerException(Objects.requireNonNull)이다. ## 관계 - **멱등 종료를 보장하는 컴포넌트는 종료 이후의 등록도 정의한다** 같은 분석 리프에서 끌어낸 규칙이다. - **같은 개념의 sentinel은 계층을 넘어 하나로 정한다** 같은 분석 리프에서 끌어낸 규칙이다. ## 본문 이 leaf가 직접 던지는 예외는 **하나**다. 나머지는 `IllegalArgumentException`(생성자 인자 검증)과 `NullPointerException`(`Objects.requireNonNull`)이다. ## IllegalArgumentException 참조 위치 :::evidence key="messaging-transport-spi-c05" alt="코드베이스에서 IllegalArgumentException 를 검색한 출력 2줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="IllegalArgumentException 코드베이스 검색 — 2줄 · exit 0" zoom="true" ::: ## 실패의 대부분이 예외가 아니라 상태다 드레인 마감 초과는 `abandonedWorkAtDeadline(now)`가 true를 반환하는 것이고, 세대 강제 종료는 `closeExpiredDraining`의 반환 계수다. ## 포기가 조용하지 않다 마감에 도달한 작업은 정산되지 않은 채 버려지고, 브로커가 재전달한다. `GracefulShutdownCoordinator` javadoc — "rather than the platform pretending it completed."