init: 클린 아키텍처 백엔드

This commit is contained in:
DongHyeonka
2026-07-24 14:29:36 +09:00
parent 9eed16d097
commit 821fe00c32
971 changed files with 74769 additions and 1 deletions
+51
View File
@@ -0,0 +1,51 @@
# adapter:outbound:identifier — non-IO infrastructure-capability adapter
## Registered identity
- Module ID: `adapter-outbound-identifier`
- Gradle path: `:adapter:outbound:identifier`
- Focused test: `./gradlew :adapter:outbound:identifier:test --console=plain`
- Runtime baseline: Java 21; repository framework baseline: Spring Boot 4.0.0.
- Registry SSOT: `.harness/project/modules.yaml`.
Package root: `dev.caskeleton.adapter.outbound.identifier`.
Design decisions previously kept as code comments (algorithm SSOT, salt origin,
build choices) live in [README.md](README.md).
## Responsibility
- Driven adapters for capabilities with **no external-system integration**:
identifier generation/encoding today, and clock / crypto/random sources by the
same rationale (feature-resource-identifier-contract §4 taxonomy).
- `UuidCodec` — UUID handling on top of the JDK `java.util.UUID` (RFC 9562 UUIDv7):
`normalize(String)` accepts a case-insensitive canonical UUID and returns the
canonical 36-character lowercase form (D3); `toUuid` / `fromUuid` convert between
the UUID string and the 128-bit `UUID` stored in the PostgreSQL `uuid` column (D10).
- Kept out of `adapter-outbound` on purpose: a UUID id/codec capability is
infrastructure, not an outbound integration point, so `adapter-outbound` keeps its
documented meaning (external HTTP / messaging / cache / notifications).
## Allowed
- `:application-core`, `:domain-core`, `:shared-contract` (Gradle matrix). Currently
only `:domain-core` + `com.github.f4b6a3:uuid-creator` are declared in
[build.gradle](build.gradle).
## Forbidden
- Persistence or web technology (JPA/Hibernate/Spring Data/Spring Web) — ArchUnit
`identifier_adapter_does_not_depend_on_other_adapters_or_bootstrap`;
`.claude/hooks/ca_import_gate.py` G4 가 쓰기 시점에 차단.
- inbound adapters, persistence adapters, other outbound leaves, `app-bootstrap`,
`sample-portfolio`.
- External IO (HTTP / messaging / cache / DB) — that belongs in `adapter-outbound`.
## Test
Pure unit tests, no Spring context (`UuidCodecSpec`).
```bash
cd src
./gradlew :adapter:outbound:identifier:test --console=plain
```