feat: grpc 기능 deep 구현

This commit is contained in:
DongHyeonka
2026-08-31 07:28:39 +09:00
parent a24ece9cf7
commit 21234e38cd
400 changed files with 40217 additions and 4 deletions
@@ -0,0 +1,117 @@
# 타입 안전 gRPC 실행 플랫폼 — 실행 계획과 실행 결과
설계 SSOT: [docs/superpowers/specs/2026-08-30-grpc-platform-adaptation-design.md](../specs/2026-08-30-grpc-platform-adaptation-design.md)
원본:
- `docs/2026-08-13-grpc-type-safe-rpc-platform-implementation-plan.md` (Stable, Task 153)
- `docs/2026-08-13-grpc-advanced-capabilities-expansion-plan.md` (Advanced, Task 118)
이 문서는 실행 전 계획이자 실행 결과 기록이다. 각 phase는 leaf 단위로 닫혔고, 닫힘 조건은
`./gradlew <gradle-path>:check` 통과다 — 즉 test + spotless + checkstyle + SpotBugs(HIGH) +
Error Prone/`-Werror` + 저장소 전역 게이트 전이 실행이다.
## Phase 0 — 레지스트리와 스캐폴딩
- [x] `src/config/architecture/modules.json`에 18개 leaf 등록 (`grpc:*` 12, `grpc-advanced:*` 6)
- [x] leaf별 `build.gradle` 18개. io.grpc를 쓰는 leaf는 `grpc-bom`을 module scope로 import
- [x] `src/build.gradle`: `:grpc:` / `:grpc-advanced:` 를 plain JUnit+AssertJ 테스트 분기에 추가
(`messaging:*`와 같은 이유 — core-api가 Spring도 io.grpc도 이름 부르지 않는다는 주장을
검증 가능하게 만든다)
- [x] `./gradlew --write-locks ...resolveAndLockAll` 로 lockfile 18개 생성
- [x] `verifyCleanArchitectureDependencies` 통과
## Phase 1 — Foundation (`grpc-core-api`, Stable Task 17 + ledger port)
- [x] Task 1 `GrpcStableModuleCatalog` / `GrpcStableBuildInvariant`
- [x] Task 2 `GrpcMethodName` / `GrpcServiceName` / `GrpcChannelProfileName` / `RpcType` / `GrpcStatusCode`
- [x] Task 3 `RpcIdempotencyProfile` / `WaitForReadyPolicy` / `GrpcMethodPolicy` / `GrpcMethodPolicyCatalog`
- [x] Task 4 `GrpcTransportEvidence` / `GrpcBusinessEvidence` / `GrpcStreamEvidence` / `GrpcExecutionEvidence`
- [x] Task 5 `GrpcFailureCategory` / `GrpcCompletionOutcome` / `GrpcFailureContext` / `GrpcPlatformException`
- [x] Task 6 `GrpcDeadlineProfile` / `GrpcDeadlineBudget` / `GrpcCancellationToken` / `GrpcDeadlineExceededException`
- [x] Task 7 `GrpcRequestContext` / `GrpcMetadataKey` / `GrpcMetadataBudget` / `GrpcClientIdentity`
- [x] 추가: `dev.caskeleton.grpc.ledger` port (`GrpcOperationLedger` 외 3) — 정책 계층이 DB에 의존하지
않고 durable idempotency를 요구할 수 있게 하기 위해 core-api에 둔다
## Phase 2 — Contract governance (`grpc-proto-contract`, `grpc-codegen`, Task 811)
- [x] Task 8 `.proto` 2개 + `buf.yaml` + `GrpcProtoStyleManifest` / `GrpcProtoRuleViolation` / `GrpcProtoContractValidator`
- [x] Task 9 `GrpcBufPolicy` / `GrpcBreakingCategory` / `GrpcSchemaBaseline`
- [x] Task 10 `GrpcCodegenManifest` / `GrpcGeneratedPackagePolicy` / `GrpcCodegenOutput`
- [x] Task 11 `GrpcDescriptorArtifact` / `GrpcConsumerFixture` / `GrpcSchemaArtifactPublisher`
- 편차: protoc·Buf CLI 미실행. 근거는 ADR-GRPC-002
## Phase 3 — Policy (`grpc-policy`, Task 12·16·17·20·2831·33·34·3743)
- [x] Task 12 validation, Task 16 context propagation, Task 17 status/rich error, Task 20 TLS/credential rotation
- [x] Task 28 deadline calculator, Task 29 cancellation coordinator
- [x] Task 30 service config/retry owner, Task 31 retry eligibility/budget/coordinator, Task 42 wait-for-ready
- [x] Task 33 idempotency interceptor, Task 34 completion reconciliation
- [x] Task 3741 stream envelope·writer·flow control·resume token·lifetime
- [x] Task 43 message size / compression / payload boundary
## Phase 4 — Server boundary (`grpc-server`, Task 1315·1819)
- [x] Task 13 boundary rules + raw API import rule, Task 14 typed service adapter SPI
- [x] Task 15 interceptor 순서 계약, Task 18 Netty profile/executor/admission, Task 19 shaded parity
## Phase 5 — Client / discovery / admin / observability / ledger
- [x] `grpc-client` Task 2427
- [x] `grpc-discovery` Task 3536
- [x] `grpc-admin` Task 2123·45
- [x] `grpc-observability` Task 44
- [x] `grpc-operation-ledger-jpa` Task 32 (entity + repository + migration + port impl)
## Phase 6 — Composition과 인증 (`grpc-spring-boot-starter`, `grpc-testkit`)
- [x] Task 52 properties / auto-configuration / startup validator
- [x] Task 46 in-process fixture, Task 47 실제 Netty + TLS/mTLS fixture
- [x] Task 48 fault point / scenario / evidence classifier
- [x] Task 4950 unary·streaming contract suite, Task 51 performance budget/gate
- [x] Task 53 compatibility matrix / release evidence / release gate
- [x] strict test lane 4개 등록 및 실행: `grpcInProcessContractTest`, `grpcNettyContractTest`,
`grpcFaultTest`, `grpcPerformanceTest`
## Phase 7 — Advanced (`grpc-advanced:*`, Advanced Task 118)
- [x] A1·A18 `grpc-advanced-bootstrap`
- [x] A2·A3 `grpc-advanced-edition`
- [x] A4A7 `grpc-advanced-streaming`
- [x] A8A11 `grpc-advanced-resilience`
- [x] A12A16 `grpc-advanced-compat`
- [x] A17 `grpc-advanced-diagnostics`
## Phase 8 — 문서와 게이트
- [x] `src/grpc/CLAUDE.md`, `src/grpc-advanced/CLAUDE.md`
- [x] ADR-GRPC-001..005, ADR-GRPC-ADV-001
- [x] `docs/runbooks/grpc-platform-operations.md`, `docs/runbooks/grpc-advanced-capabilities.md`
- [x] `docs/compatibility/grpc-support-matrix.md`, `docs/compatibility/grpc-advanced-support-matrix.md`
- [x] `verifyRunbookReferences`, `verifyDocumentedLeafCount` 통과
## Phase 9 — 2026-08-31 계획 대조 감사
사용자가 "빠짐없이 반영한게 맞나"를 물어 계획의 `Files:` 절 전체를 기계 대조했다. 결과와 조치는
설계 문서 §6이 SSOT다. 요약:
- [x] 대조 스크립트 실행 → 초기 결과 present=316 / missing=38
- [x] 실제 누락 6건 보완: `GrpcKubernetesProfileValidator`, `ADR-GRPC-006`(discovery/Kubernetes),
xDS `bootstrap.json`, `control-plane-snapshot.json`, `DocumentClientFixture`,
`buf.gen.yaml`+`buf.lock`
- [x] 추가한 픽스처는 전부 실제 검사에 물렸다 — 장식이 되지 않도록:
`GrpcXdsStartupGuard.bootstrapMismatches`(namespace 불일치·비TLS control plane),
redactor가 실제 모양의 CSDS 데이터로 검증, `GrpcConsumerFixture.fromJavaSource`가 fixture
소스에서 요구사항을 역산
- [x] 테스트 클래스 17건을 계획이 명시한 이름으로 분리
- [x] 재대조 → present=341 / missing=13, 잔여 13건은 전부 §6.1–6.4의 기록된 편차
(ADR 파일명 6, codegen convention plugin 3, TLS 인증서 3, Kotlin `.kt` 1)
## 남은 작업 (이 계획 범위 밖, 별도 결정 필요)
1. **런타임 투입.** 신규 leaf 전부 `runtime_memberships: []`다. `app-bootstrap`에 배선하려면 registry
membership 변경 + `verifyRuntimeModuleMembership` 통과가 선행이며, 그것은 별도 결정이다.
2. **`adapter:inbound:grpc` 브리지.** registry의 `allowed_dependencies``grpc-core-api`·`grpc-server`
추가하고 typed service adapter를 배선하는 작업. 플랫폼이 green이 된 지금이 시작점이다.
3. **protoc / Buf CLI 활성화.** ADR-GRPC-002가 조건과 비용을 기록한다.
4. **performance baseline 기록.** 현재 lane은 shape만 검증한다. 알려진 runner에서의 baseline이
regression gate를 만든다.