--- kind: CONCEPT slug: messaging-outbox-jdbc-postgresql-c02 title: starter가 만들지 않는 셋은 애플리케이션이 직접 등록해야 한다 topic: transaction-and-consistency-models project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-outbox-jdbc-postgresql-c02 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-outbox-jdbc-postgresql-c02 file: ../../../final/evidence/rendered/messaging-outbox-jdbc-postgresql-c02.svg evidence: - ../../../final/evidence/raw/messaging-outbox-jdbc-postgresql-c02.txt source: - 원본 분석 절은 analysis/messaging/messaging-outbox-jdbc-postgresql.md#L102 이다. module: messaging-outbox-jdbc-postgresql --- # starter가 만들지 않는 셋은 애플리케이션이 직접 등록해야 한다 `JdbcOutboxRepository`, `OutboxEnvelopeFactory`, `JdbcAdminOperationJournal` 셋은 starter가 만들지 않는다. 애플리케이션이 `DataSource`/`ProducerId`를 알고 직접 등록해야 한다. ## 본문 testcontainers 주석이 이 리프의 성격을 요약한다 — "신뢰성 패턴은 트랜잭션 경계와 유일성 제약에 대한 주장이고, 그것을 결판낼 수 있는 것은 실제 데이터베이스뿐이다." 그리고 그 레인이 **실제로 돈다**(§10). ## JdbcOutboxRepository 참조 위치 :::evidence key="messaging-outbox-jdbc-postgresql-c02" alt="코드베이스에서 JdbcOutboxRepository 를 검색한 출력 5줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="JdbcOutboxRepository 코드베이스 검색 — 5줄 · exit 0" zoom="true" ::: ## starter가 만들지 않는 셋 `JdbcOutboxRepository`, `OutboxEnvelopeFactory`, `JdbcAdminOperationJournal`(`EVD-312`). 셋 다 애플리케이션이 `DataSource`/`ProducerId` 를 알고 직접 등록해야 한다. ## 기본 저널이 프로덕션에서 거부되는 이유 `AdminOperationJournal` 의 기본값은 `InMemoryAdminOperationJournal` 이며, 프로덕션 프로파일에서는 `MessagingAdminDurabilityValidator` 가 그것을 거부한다(`analysis/messaging/messaging-admin-runtime.md` §4.4 참조).