--- kind: CONCEPT slug: messaging-inbox-jdbc-postgresql-c01 title: 메커니즘 전체가 하나의 SQL 문장에 있다 topic: transaction-and-consistency-models project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-inbox-jdbc-postgresql-c01 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-inbox-jdbc-postgresql-c01 file: ../../../final/evidence/rendered/messaging-inbox-jdbc-postgresql-c01.svg evidence: - ../../../final/evidence/raw/messaging-inbox-jdbc-postgresql-c01.txt source: - 원본 분석 절은 analysis/messaging/messaging-inbox-jdbc-postgresql.md#L57 이다. module: messaging-inbox-jdbc-postgresql --- # 메커니즘 전체가 하나의 SQL 문장에 있다 `messaging-reliability-api`의 `InboxRepository`·`IdempotentMessageHandler` 포트를 PostgreSQL로 구현한다. 중복 제거 메커니즘 전체가 복합 기본키 하나에 있다. ## 관계 - **컬럼 폭은 애플리케이션 검증과 짝을 이룬다** 같은 분석 리프에서 끌어낸 규칙이다. - **같은 안전 규칙은 한 공식과 한 강제 시점을 갖는다** 같은 분석 리프에서 끌어낸 규칙이다. ## 본문 `messaging-reliability-api`의 `InboxRepository`·`IdempotentMessageHandler` 포트를 PostgreSQL로 구현한다. 이름이 기술을 드러낸다 — `docs/messaging/support-matrix.md`가 그 개명 이유를 적는다(MSG-023). **메커니즘 전체가 하나의 SQL 문장에 있다.** ```sql INSERT INTO messaging_inbox (message_id, consumer_id, processed_at) VALUES (?, ?, ?) ON CONFLICT (message_id, consumer_id) DO NOTHING ``` > "Reservation is an `INSERT ... ON CONFLICT DO NOTHING` whose affected-row count is the answer: one means first delivery, zero means already processed. The composite primary key does the work, so there is no read-then-write race — two concurrent deliveries of the same message cannot both see 'not processed' and both proceed." ## InboxRepository 참조 위치 :::evidence key="messaging-inbox-jdbc-postgresql-c01" alt="코드베이스에서 InboxRepository 를 검색한 출력 20줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="InboxRepository 코드베이스 검색 — 20줄 · exit 0" zoom="true" ::: ## 실제로 실행되는 레인 migration이 같은 사실을 반대편에서 적고, `build.gradle` 주석이 테스트 전략을 명시한다. **그리고 실제로 실행된다** — `InboxPostgresIT` 6개가 기본 `test` 태스크에서 통과한다(§10). ## migration이 같은 사실을 적는다 복합 기본키가 중복 제거 메커니즘이고, 예약은 핸들러의 부작용과 같은 트랜잭션 안에서 성공하거나 키를 위반하는 INSERT다.