feat: jpa, messaging, notification, mongo, graphql 어댑터터 리펙토링

This commit is contained in:
DongHyeonka
2026-08-18 10:59:56 +09:00
parent 2f5d2fc219
commit e98b56eb03
372 changed files with 25131 additions and 20357 deletions
@@ -0,0 +1,60 @@
> **보존 안내** — 이 파일은 저장소 루트 `messaging-superpowers-package/` 에 있던 납품 패키지의 README다.
> 2026-08-15 문서 정리에서 설계서·계획서는 `docs/superpowers/specs/` 와 `docs/superpowers/plans/` 로 통합했고,
> `validate_messaging_docs.py` 와 `MANIFEST.sha256` 은 제거했다.
> 아래 본문은 납품 시점의 기록이므로 제거된 파일을 가리키는 문장은 더 이상 유효하지 않다.
# Messaging Platform Superpowers Package
이 패키지는 `Java/Spring Messaging 플랫폼 심층 리서치`를 구현 기준으로 변환한 설계서와 구현 계획서다.
## 포함 파일
```text
docs/superpowers/specs/2026-08-10-messaging-platform-design.md
docs/superpowers/plans/2026-08-10-messaging-platform-implementation-plan.md
VALIDATION.md
validate_messaging_docs.py
MANIFEST.sha256
```
## 설계 경계
- 자체 `messaging-core`가 공개 계약을 소유한다.
- Kafka 4.2+/4.3.x와 RabbitMQ 4.3.x는 Stable Adapter다.
- Kafka Share Group, Pulsar 4.0 LTS·4.2, NATS JetStream 2.14.x는 Experimental Adapter다.
- 공통 `EXACTLY_ONCE` 또는 전역 순서 옵션을 제공하지 않는다.
- publish 결과는 `CONFIRMED`, `REJECTED`, `AMBIGUOUS`와 broker evidence로 표현한다.
- M1 Typed, M2 Advanced, M3 Native Capability, M4 Admin Plane을 분리한다.
- retry·DLQ·redrive에서 logical `messageId`를 유지한다.
- DLQ publish 확인 전에 source message를 settlement하지 않는다.
- Transactional Outbox, Inbox, Idempotent Consumer, Claim Check를 Reliability 모듈로 분리한다.
## 구현 가정
실제 Backend Skeleton 저장소가 입력에 포함되지 않았기 때문에 계획은 다음 기준을 사용한다.
- Java 21
- Gradle Kotlin DSL
- root package: `io.backend.skeleton.messaging`
- module root: `modules/messaging`
- PostgreSQL 16, Flyway, Spring JDBC/JPA
- JUnit 5, AssertJ, ArchUnit, Testcontainers, Toxiproxy
- Spring Framework 6.2 공통 호환선과 Spring 7.0 호환성 job
실제 저장소 구조가 다르면 파일 경로와 dependency catalog만 매핑한다. 공개 계약, 모듈 의존 방향, 신뢰성 상태 모델과 검증 기준은 그대로 유지한다.
## 문서 검증
패키지 루트에서 다음 명령을 실행한다.
```bash
./validate_messaging_docs.py \
docs/superpowers/specs/2026-08-10-messaging-platform-design.md \
docs/superpowers/plans/2026-08-10-messaging-platform-implementation-plan.md
```
`VALIDATION.md`는 문서 구조, Task 1~44 연속성, TDD 단계, 필수 설계 계약, placeholder, 중복 파일 경로를 확인한 정적 검증 결과다.
## 검증 한계
현재 검증은 설계·계획 문서에 대한 정적 검증이다. 실제 저장소가 제공되지 않아 Gradle compile, broker 통합 테스트, chaos test, 성능 인증은 실행하지 않았다. 구현 계획의 각 Task가 해당 실행 검증을 추가하도록 구성되어 있다.
@@ -0,0 +1,432 @@
# Messaging Superpowers 문서 정적 검증
- 설계서: `messaging-platform-design.md` — 2,608행, 74,649 bytes
- 계획서: `messaging-platform-implementation-plan.md` — 5,056행, 200,320 bytes
- Task 수: 44
- Create 경로 수: 356
- 검증 항목 수: 422
## 결과: PASS
- PASS: 설계서가 2,000행 이상이다
- PASS: 구현 계획서가 4,000행 이상이다
- PASS: 설계서 Markdown 코드 블록이 균형을 이룬다
- PASS: 계획서 Markdown 코드 블록이 균형을 이룬다
- PASS: 설계서에 unresolved todo marker가 없다
- PASS: 계획서에 unresolved todo marker가 없다
- PASS: 설계서에 unresolved tbd marker가 없다
- PASS: 계획서에 unresolved tbd marker가 없다
- PASS: 설계서에 unresolved fix marker가 없다
- PASS: 계획서에 unresolved fix marker가 없다
- PASS: 설계서에 placeholder ADR number가 없다
- PASS: 계획서에 placeholder ADR number가 없다
- PASS: 설계서에 wildcard build path가 없다
- PASS: 계획서에 wildcard build path가 없다
- PASS: 설계서에 deferred implementation phrase가 없다
- PASS: 계획서에 deferred implementation phrase가 없다
- PASS: 설계서가 필수 항목 'M1 Typed Messaging API'을 포함한다
- PASS: 설계서가 필수 항목 'M2 Advanced API'을 포함한다
- PASS: 설계서가 필수 항목 'M3 Native Capability'을 포함한다
- PASS: 설계서가 필수 항목 'M4 Admin Plane'을 포함한다
- PASS: 설계서가 필수 항목 'PublishCompletion'을 포함한다
- PASS: 설계서가 필수 항목 'AMBIGUOUS'을 포함한다
- PASS: 설계서가 필수 항목 'MessageEnvelope'을 포함한다
- PASS: 설계서가 필수 항목 'DeliveryGuarantee'을 포함한다
- PASS: 설계서가 필수 항목 'OrderingScope'을 포함한다
- PASS: 설계서가 필수 항목 'Retry Policy Engine'을 포함한다
- PASS: 설계서가 필수 항목 'DLQ·Parking·Redrive'을 포함한다
- PASS: 설계서가 필수 항목 'Kafka Stable Adapter'을 포함한다
- PASS: 설계서가 필수 항목 'RabbitMQ Stable Adapter'을 포함한다
- PASS: 설계서가 필수 항목 'Transactional Outbox'을 포함한다
- PASS: 설계서가 필수 항목 'Inbox와 Idempotent Consumer'을 포함한다
- PASS: 설계서가 필수 항목 'Claim Check'을 포함한다
- PASS: 설계서가 필수 항목 'Pulsar Experimental Adapter'을 포함한다
- PASS: 설계서가 필수 항목 'NATS JetStream Experimental Adapter'을 포함한다
- PASS: 설계서가 필수 항목 'Spring Cloud Stream Bridge'을 포함한다
- PASS: 설계서가 필수 항목 'Security'을 포함한다
- PASS: 설계서가 필수 항목 'Observability'을 포함한다
- PASS: 설계서가 필수 항목 '호환성 인증 매트릭스'을 포함한다
- PASS: 설계서가 필수 항목 '비지원 범위'을 포함한다
- PASS: 설계서가 필수 항목 '완료 정의'을 포함한다
- PASS: 공통 DeliveryGuarantee가 두 가지 보장만 선언한다
- PASS: 공통 DeliveryGuarantee enum에 EXACTLY_ONCE를 선언하지 않는다
- PASS: 공통 OrderingScope enum에 GLOBAL을 선언하지 않는다
- PASS: DLQ confirm 후 source settlement 순서를 명시한다
- PASS: retry와 reliability에서 동일 message ID를 유지한다
- PASS: Task 번호가 1부터 44까지 연속이다
- PASS: Task 1가 '**Files:**'을 포함한다
- PASS: Task 1가 '**Interfaces:**'을 포함한다
- PASS: Task 1가 'Step 1'을 포함한다
- PASS: Task 1가 'Step 2'을 포함한다
- PASS: Task 1가 'Step 3'을 포함한다
- PASS: Task 1가 'Step 4'을 포함한다
- PASS: Task 1가 'Step 5'을 포함한다
- PASS: Task 1가 'git commit -m'을 포함한다
- PASS: Task 2가 '**Files:**'을 포함한다
- PASS: Task 2가 '**Interfaces:**'을 포함한다
- PASS: Task 2가 'Step 1'을 포함한다
- PASS: Task 2가 'Step 2'을 포함한다
- PASS: Task 2가 'Step 3'을 포함한다
- PASS: Task 2가 'Step 4'을 포함한다
- PASS: Task 2가 'Step 5'을 포함한다
- PASS: Task 2가 'git commit -m'을 포함한다
- PASS: Task 3가 '**Files:**'을 포함한다
- PASS: Task 3가 '**Interfaces:**'을 포함한다
- PASS: Task 3가 'Step 1'을 포함한다
- PASS: Task 3가 'Step 2'을 포함한다
- PASS: Task 3가 'Step 3'을 포함한다
- PASS: Task 3가 'Step 4'을 포함한다
- PASS: Task 3가 'Step 5'을 포함한다
- PASS: Task 3가 'git commit -m'을 포함한다
- PASS: Task 4가 '**Files:**'을 포함한다
- PASS: Task 4가 '**Interfaces:**'을 포함한다
- PASS: Task 4가 'Step 1'을 포함한다
- PASS: Task 4가 'Step 2'을 포함한다
- PASS: Task 4가 'Step 3'을 포함한다
- PASS: Task 4가 'Step 4'을 포함한다
- PASS: Task 4가 'Step 5'을 포함한다
- PASS: Task 4가 'git commit -m'을 포함한다
- PASS: Task 5가 '**Files:**'을 포함한다
- PASS: Task 5가 '**Interfaces:**'을 포함한다
- PASS: Task 5가 'Step 1'을 포함한다
- PASS: Task 5가 'Step 2'을 포함한다
- PASS: Task 5가 'Step 3'을 포함한다
- PASS: Task 5가 'Step 4'을 포함한다
- PASS: Task 5가 'Step 5'을 포함한다
- PASS: Task 5가 'git commit -m'을 포함한다
- PASS: Task 6가 '**Files:**'을 포함한다
- PASS: Task 6가 '**Interfaces:**'을 포함한다
- PASS: Task 6가 'Step 1'을 포함한다
- PASS: Task 6가 'Step 2'을 포함한다
- PASS: Task 6가 'Step 3'을 포함한다
- PASS: Task 6가 'Step 4'을 포함한다
- PASS: Task 6가 'Step 5'을 포함한다
- PASS: Task 6가 'git commit -m'을 포함한다
- PASS: Task 7가 '**Files:**'을 포함한다
- PASS: Task 7가 '**Interfaces:**'을 포함한다
- PASS: Task 7가 'Step 1'을 포함한다
- PASS: Task 7가 'Step 2'을 포함한다
- PASS: Task 7가 'Step 3'을 포함한다
- PASS: Task 7가 'Step 4'을 포함한다
- PASS: Task 7가 'Step 5'을 포함한다
- PASS: Task 7가 'git commit -m'을 포함한다
- PASS: Task 8가 '**Files:**'을 포함한다
- PASS: Task 8가 '**Interfaces:**'을 포함한다
- PASS: Task 8가 'Step 1'을 포함한다
- PASS: Task 8가 'Step 2'을 포함한다
- PASS: Task 8가 'Step 3'을 포함한다
- PASS: Task 8가 'Step 4'을 포함한다
- PASS: Task 8가 'Step 5'을 포함한다
- PASS: Task 8가 'git commit -m'을 포함한다
- PASS: Task 9가 '**Files:**'을 포함한다
- PASS: Task 9가 '**Interfaces:**'을 포함한다
- PASS: Task 9가 'Step 1'을 포함한다
- PASS: Task 9가 'Step 2'을 포함한다
- PASS: Task 9가 'Step 3'을 포함한다
- PASS: Task 9가 'Step 4'을 포함한다
- PASS: Task 9가 'Step 5'을 포함한다
- PASS: Task 9가 'git commit -m'을 포함한다
- PASS: Task 10가 '**Files:**'을 포함한다
- PASS: Task 10가 '**Interfaces:**'을 포함한다
- PASS: Task 10가 'Step 1'을 포함한다
- PASS: Task 10가 'Step 2'을 포함한다
- PASS: Task 10가 'Step 3'을 포함한다
- PASS: Task 10가 'Step 4'을 포함한다
- PASS: Task 10가 'Step 5'을 포함한다
- PASS: Task 10가 'git commit -m'을 포함한다
- PASS: Task 11가 '**Files:**'을 포함한다
- PASS: Task 11가 '**Interfaces:**'을 포함한다
- PASS: Task 11가 'Step 1'을 포함한다
- PASS: Task 11가 'Step 2'을 포함한다
- PASS: Task 11가 'Step 3'을 포함한다
- PASS: Task 11가 'Step 4'을 포함한다
- PASS: Task 11가 'Step 5'을 포함한다
- PASS: Task 11가 'git commit -m'을 포함한다
- PASS: Task 12가 '**Files:**'을 포함한다
- PASS: Task 12가 '**Interfaces:**'을 포함한다
- PASS: Task 12가 'Step 1'을 포함한다
- PASS: Task 12가 'Step 2'을 포함한다
- PASS: Task 12가 'Step 3'을 포함한다
- PASS: Task 12가 'Step 4'을 포함한다
- PASS: Task 12가 'Step 5'을 포함한다
- PASS: Task 12가 'git commit -m'을 포함한다
- PASS: Task 13가 '**Files:**'을 포함한다
- PASS: Task 13가 '**Interfaces:**'을 포함한다
- PASS: Task 13가 'Step 1'을 포함한다
- PASS: Task 13가 'Step 2'을 포함한다
- PASS: Task 13가 'Step 3'을 포함한다
- PASS: Task 13가 'Step 4'을 포함한다
- PASS: Task 13가 'Step 5'을 포함한다
- PASS: Task 13가 'git commit -m'을 포함한다
- PASS: Task 14가 '**Files:**'을 포함한다
- PASS: Task 14가 '**Interfaces:**'을 포함한다
- PASS: Task 14가 'Step 1'을 포함한다
- PASS: Task 14가 'Step 2'을 포함한다
- PASS: Task 14가 'Step 3'을 포함한다
- PASS: Task 14가 'Step 4'을 포함한다
- PASS: Task 14가 'Step 5'을 포함한다
- PASS: Task 14가 'git commit -m'을 포함한다
- PASS: Task 15가 '**Files:**'을 포함한다
- PASS: Task 15가 '**Interfaces:**'을 포함한다
- PASS: Task 15가 'Step 1'을 포함한다
- PASS: Task 15가 'Step 2'을 포함한다
- PASS: Task 15가 'Step 3'을 포함한다
- PASS: Task 15가 'Step 4'을 포함한다
- PASS: Task 15가 'Step 5'을 포함한다
- PASS: Task 15가 'git commit -m'을 포함한다
- PASS: Task 16가 '**Files:**'을 포함한다
- PASS: Task 16가 '**Interfaces:**'을 포함한다
- PASS: Task 16가 'Step 1'을 포함한다
- PASS: Task 16가 'Step 2'을 포함한다
- PASS: Task 16가 'Step 3'을 포함한다
- PASS: Task 16가 'Step 4'을 포함한다
- PASS: Task 16가 'Step 5'을 포함한다
- PASS: Task 16가 'git commit -m'을 포함한다
- PASS: Task 17가 '**Files:**'을 포함한다
- PASS: Task 17가 '**Interfaces:**'을 포함한다
- PASS: Task 17가 'Step 1'을 포함한다
- PASS: Task 17가 'Step 2'을 포함한다
- PASS: Task 17가 'Step 3'을 포함한다
- PASS: Task 17가 'Step 4'을 포함한다
- PASS: Task 17가 'Step 5'을 포함한다
- PASS: Task 17가 'git commit -m'을 포함한다
- PASS: Task 18가 '**Files:**'을 포함한다
- PASS: Task 18가 '**Interfaces:**'을 포함한다
- PASS: Task 18가 'Step 1'을 포함한다
- PASS: Task 18가 'Step 2'을 포함한다
- PASS: Task 18가 'Step 3'을 포함한다
- PASS: Task 18가 'Step 4'을 포함한다
- PASS: Task 18가 'Step 5'을 포함한다
- PASS: Task 18가 'git commit -m'을 포함한다
- PASS: Task 19가 '**Files:**'을 포함한다
- PASS: Task 19가 '**Interfaces:**'을 포함한다
- PASS: Task 19가 'Step 1'을 포함한다
- PASS: Task 19가 'Step 2'을 포함한다
- PASS: Task 19가 'Step 3'을 포함한다
- PASS: Task 19가 'Step 4'을 포함한다
- PASS: Task 19가 'Step 5'을 포함한다
- PASS: Task 19가 'git commit -m'을 포함한다
- PASS: Task 20가 '**Files:**'을 포함한다
- PASS: Task 20가 '**Interfaces:**'을 포함한다
- PASS: Task 20가 'Step 1'을 포함한다
- PASS: Task 20가 'Step 2'을 포함한다
- PASS: Task 20가 'Step 3'을 포함한다
- PASS: Task 20가 'Step 4'을 포함한다
- PASS: Task 20가 'Step 5'을 포함한다
- PASS: Task 20가 'git commit -m'을 포함한다
- PASS: Task 21가 '**Files:**'을 포함한다
- PASS: Task 21가 '**Interfaces:**'을 포함한다
- PASS: Task 21가 'Step 1'을 포함한다
- PASS: Task 21가 'Step 2'을 포함한다
- PASS: Task 21가 'Step 3'을 포함한다
- PASS: Task 21가 'Step 4'을 포함한다
- PASS: Task 21가 'Step 5'을 포함한다
- PASS: Task 21가 'git commit -m'을 포함한다
- PASS: Task 22가 '**Files:**'을 포함한다
- PASS: Task 22가 '**Interfaces:**'을 포함한다
- PASS: Task 22가 'Step 1'을 포함한다
- PASS: Task 22가 'Step 2'을 포함한다
- PASS: Task 22가 'Step 3'을 포함한다
- PASS: Task 22가 'Step 4'을 포함한다
- PASS: Task 22가 'Step 5'을 포함한다
- PASS: Task 22가 'git commit -m'을 포함한다
- PASS: Task 23가 '**Files:**'을 포함한다
- PASS: Task 23가 '**Interfaces:**'을 포함한다
- PASS: Task 23가 'Step 1'을 포함한다
- PASS: Task 23가 'Step 2'을 포함한다
- PASS: Task 23가 'Step 3'을 포함한다
- PASS: Task 23가 'Step 4'을 포함한다
- PASS: Task 23가 'Step 5'을 포함한다
- PASS: Task 23가 'git commit -m'을 포함한다
- PASS: Task 24가 '**Files:**'을 포함한다
- PASS: Task 24가 '**Interfaces:**'을 포함한다
- PASS: Task 24가 'Step 1'을 포함한다
- PASS: Task 24가 'Step 2'을 포함한다
- PASS: Task 24가 'Step 3'을 포함한다
- PASS: Task 24가 'Step 4'을 포함한다
- PASS: Task 24가 'Step 5'을 포함한다
- PASS: Task 24가 'git commit -m'을 포함한다
- PASS: Task 25가 '**Files:**'을 포함한다
- PASS: Task 25가 '**Interfaces:**'을 포함한다
- PASS: Task 25가 'Step 1'을 포함한다
- PASS: Task 25가 'Step 2'을 포함한다
- PASS: Task 25가 'Step 3'을 포함한다
- PASS: Task 25가 'Step 4'을 포함한다
- PASS: Task 25가 'Step 5'을 포함한다
- PASS: Task 25가 'git commit -m'을 포함한다
- PASS: Task 26가 '**Files:**'을 포함한다
- PASS: Task 26가 '**Interfaces:**'을 포함한다
- PASS: Task 26가 'Step 1'을 포함한다
- PASS: Task 26가 'Step 2'을 포함한다
- PASS: Task 26가 'Step 3'을 포함한다
- PASS: Task 26가 'Step 4'을 포함한다
- PASS: Task 26가 'Step 5'을 포함한다
- PASS: Task 26가 'git commit -m'을 포함한다
- PASS: Task 27가 '**Files:**'을 포함한다
- PASS: Task 27가 '**Interfaces:**'을 포함한다
- PASS: Task 27가 'Step 1'을 포함한다
- PASS: Task 27가 'Step 2'을 포함한다
- PASS: Task 27가 'Step 3'을 포함한다
- PASS: Task 27가 'Step 4'을 포함한다
- PASS: Task 27가 'Step 5'을 포함한다
- PASS: Task 27가 'git commit -m'을 포함한다
- PASS: Task 28가 '**Files:**'을 포함한다
- PASS: Task 28가 '**Interfaces:**'을 포함한다
- PASS: Task 28가 'Step 1'을 포함한다
- PASS: Task 28가 'Step 2'을 포함한다
- PASS: Task 28가 'Step 3'을 포함한다
- PASS: Task 28가 'Step 4'을 포함한다
- PASS: Task 28가 'Step 5'을 포함한다
- PASS: Task 28가 'git commit -m'을 포함한다
- PASS: Task 29가 '**Files:**'을 포함한다
- PASS: Task 29가 '**Interfaces:**'을 포함한다
- PASS: Task 29가 'Step 1'을 포함한다
- PASS: Task 29가 'Step 2'을 포함한다
- PASS: Task 29가 'Step 3'을 포함한다
- PASS: Task 29가 'Step 4'을 포함한다
- PASS: Task 29가 'Step 5'을 포함한다
- PASS: Task 29가 'git commit -m'을 포함한다
- PASS: Task 30가 '**Files:**'을 포함한다
- PASS: Task 30가 '**Interfaces:**'을 포함한다
- PASS: Task 30가 'Step 1'을 포함한다
- PASS: Task 30가 'Step 2'을 포함한다
- PASS: Task 30가 'Step 3'을 포함한다
- PASS: Task 30가 'Step 4'을 포함한다
- PASS: Task 30가 'Step 5'을 포함한다
- PASS: Task 30가 'git commit -m'을 포함한다
- PASS: Task 31가 '**Files:**'을 포함한다
- PASS: Task 31가 '**Interfaces:**'을 포함한다
- PASS: Task 31가 'Step 1'을 포함한다
- PASS: Task 31가 'Step 2'을 포함한다
- PASS: Task 31가 'Step 3'을 포함한다
- PASS: Task 31가 'Step 4'을 포함한다
- PASS: Task 31가 'Step 5'을 포함한다
- PASS: Task 31가 'git commit -m'을 포함한다
- PASS: Task 32가 '**Files:**'을 포함한다
- PASS: Task 32가 '**Interfaces:**'을 포함한다
- PASS: Task 32가 'Step 1'을 포함한다
- PASS: Task 32가 'Step 2'을 포함한다
- PASS: Task 32가 'Step 3'을 포함한다
- PASS: Task 32가 'Step 4'을 포함한다
- PASS: Task 32가 'Step 5'을 포함한다
- PASS: Task 32가 'git commit -m'을 포함한다
- PASS: Task 33가 '**Files:**'을 포함한다
- PASS: Task 33가 '**Interfaces:**'을 포함한다
- PASS: Task 33가 'Step 1'을 포함한다
- PASS: Task 33가 'Step 2'을 포함한다
- PASS: Task 33가 'Step 3'을 포함한다
- PASS: Task 33가 'Step 4'을 포함한다
- PASS: Task 33가 'Step 5'을 포함한다
- PASS: Task 33가 'git commit -m'을 포함한다
- PASS: Task 34가 '**Files:**'을 포함한다
- PASS: Task 34가 '**Interfaces:**'을 포함한다
- PASS: Task 34가 'Step 1'을 포함한다
- PASS: Task 34가 'Step 2'을 포함한다
- PASS: Task 34가 'Step 3'을 포함한다
- PASS: Task 34가 'Step 4'을 포함한다
- PASS: Task 34가 'Step 5'을 포함한다
- PASS: Task 34가 'git commit -m'을 포함한다
- PASS: Task 35가 '**Files:**'을 포함한다
- PASS: Task 35가 '**Interfaces:**'을 포함한다
- PASS: Task 35가 'Step 1'을 포함한다
- PASS: Task 35가 'Step 2'을 포함한다
- PASS: Task 35가 'Step 3'을 포함한다
- PASS: Task 35가 'Step 4'을 포함한다
- PASS: Task 35가 'Step 5'을 포함한다
- PASS: Task 35가 'git commit -m'을 포함한다
- PASS: Task 36가 '**Files:**'을 포함한다
- PASS: Task 36가 '**Interfaces:**'을 포함한다
- PASS: Task 36가 'Step 1'을 포함한다
- PASS: Task 36가 'Step 2'을 포함한다
- PASS: Task 36가 'Step 3'을 포함한다
- PASS: Task 36가 'Step 4'을 포함한다
- PASS: Task 36가 'Step 5'을 포함한다
- PASS: Task 36가 'git commit -m'을 포함한다
- PASS: Task 37가 '**Files:**'을 포함한다
- PASS: Task 37가 '**Interfaces:**'을 포함한다
- PASS: Task 37가 'Step 1'을 포함한다
- PASS: Task 37가 'Step 2'을 포함한다
- PASS: Task 37가 'Step 3'을 포함한다
- PASS: Task 37가 'Step 4'을 포함한다
- PASS: Task 37가 'Step 5'을 포함한다
- PASS: Task 37가 'git commit -m'을 포함한다
- PASS: Task 38가 '**Files:**'을 포함한다
- PASS: Task 38가 '**Interfaces:**'을 포함한다
- PASS: Task 38가 'Step 1'을 포함한다
- PASS: Task 38가 'Step 2'을 포함한다
- PASS: Task 38가 'Step 3'을 포함한다
- PASS: Task 38가 'Step 4'을 포함한다
- PASS: Task 38가 'Step 5'을 포함한다
- PASS: Task 38가 'git commit -m'을 포함한다
- PASS: Task 39가 '**Files:**'을 포함한다
- PASS: Task 39가 '**Interfaces:**'을 포함한다
- PASS: Task 39가 'Step 1'을 포함한다
- PASS: Task 39가 'Step 2'을 포함한다
- PASS: Task 39가 'Step 3'을 포함한다
- PASS: Task 39가 'Step 4'을 포함한다
- PASS: Task 39가 'Step 5'을 포함한다
- PASS: Task 39가 'git commit -m'을 포함한다
- PASS: Task 40가 '**Files:**'을 포함한다
- PASS: Task 40가 '**Interfaces:**'을 포함한다
- PASS: Task 40가 'Step 1'을 포함한다
- PASS: Task 40가 'Step 2'을 포함한다
- PASS: Task 40가 'Step 3'을 포함한다
- PASS: Task 40가 'Step 4'을 포함한다
- PASS: Task 40가 'Step 5'을 포함한다
- PASS: Task 40가 'git commit -m'을 포함한다
- PASS: Task 41가 '**Files:**'을 포함한다
- PASS: Task 41가 '**Interfaces:**'을 포함한다
- PASS: Task 41가 'Step 1'을 포함한다
- PASS: Task 41가 'Step 2'을 포함한다
- PASS: Task 41가 'Step 3'을 포함한다
- PASS: Task 41가 'Step 4'을 포함한다
- PASS: Task 41가 'Step 5'을 포함한다
- PASS: Task 41가 'git commit -m'을 포함한다
- PASS: Task 42가 '**Files:**'을 포함한다
- PASS: Task 42가 '**Interfaces:**'을 포함한다
- PASS: Task 42가 'Step 1'을 포함한다
- PASS: Task 42가 'Step 2'을 포함한다
- PASS: Task 42가 'Step 3'을 포함한다
- PASS: Task 42가 'Step 4'을 포함한다
- PASS: Task 42가 'Step 5'을 포함한다
- PASS: Task 42가 'git commit -m'을 포함한다
- PASS: Task 43가 '**Files:**'을 포함한다
- PASS: Task 43가 '**Interfaces:**'을 포함한다
- PASS: Task 43가 'Step 1'을 포함한다
- PASS: Task 43가 'Step 2'을 포함한다
- PASS: Task 43가 'Step 3'을 포함한다
- PASS: Task 43가 'Step 4'을 포함한다
- PASS: Task 43가 'Step 5'을 포함한다
- PASS: Task 43가 'git commit -m'을 포함한다
- PASS: Task 44가 '**Files:**'을 포함한다
- PASS: Task 44가 '**Interfaces:**'을 포함한다
- PASS: Task 44가 'Step 1'을 포함한다
- PASS: Task 44가 'Step 2'을 포함한다
- PASS: Task 44가 'Step 3'을 포함한다
- PASS: Task 44가 'Step 4'을 포함한다
- PASS: Task 44가 'Step 5'을 포함한다
- PASS: Task 44가 'git commit -m'을 포함한다
- PASS: 중복된 Create 파일 경로가 없다
- PASS: Create 파일 경로에 wildcard가 없다
- PASS: 계획서가 필수 작업 'Kafka Producer Adapter와 Publish Evidence'을 포함한다
- PASS: 계획서가 필수 작업 'Kafka Consumer Group, Partition Coordinator'을 포함한다
- PASS: 계획서가 필수 작업 'Kafka Native Transaction Capability'을 포함한다
- PASS: 계획서가 필수 작업 'Kafka Share Group Experimental Adapter'을 포함한다
- PASS: 계획서가 필수 작업 'Rabbit Publisher Confirm·Return Evidence Adapter'을 포함한다
- PASS: 계획서가 필수 작업 'Rabbit Consumer Manual ACK'을 포함한다
- PASS: 계획서가 필수 작업 'Transactional Outbox Repository'을 포함한다
- PASS: 계획서가 필수 작업 'Inbox Transactional Idempotent Consumer'을 포함한다
- PASS: 계획서가 필수 작업 'Debezium Outbox Event Router'을 포함한다
- PASS: 계획서가 필수 작업 'Pulsar Experimental Adapter'을 포함한다
- PASS: 계획서가 필수 작업 'NATS JetStream Experimental Adapter'을 포함한다
- PASS: 계획서가 필수 작업 'Spring Cloud Stream Optional Bridge'을 포함한다
- PASS: 계획서가 필수 작업 'Global Backpressure'을 포함한다
- PASS: 계획서가 필수 작업 'Cross-broker 장애·보안·Reliability Contract Suite'을 포함한다
- PASS: 계획서가 필수 작업 '성능 인증, Compatibility Matrix'을 포함한다
- PASS: 계획서가 필수 작업 '지원 문서, Runbook, ADR, Release Gate'을 포함한다
- PASS: 계획서가 message identity 보존을 명시한다
- PASS: 계획서가 DLQ 실패 시 source ACK 금지를 명시한다
- PASS: 계획서가 credential 분리를 명시한다
- PASS: Stable chaos aggregate task가 계획에 존재한다
- PASS: performance aggregate task가 계획에 존재한다
- PASS: compatibility aggregate task가 계획에 존재한다