AIμ ν¨κ» top-down μ€κ³(HLD β LLD β ADR β Validation)λ₯Ό μννκΈ° μν λ¬Έμ ν νλ¦Ώ & κ·μΉ μ μ₯μ.
μ΄ μ μ₯μλ λ¨λ
μΌλ‘ μ°λ νλ‘μ νΈκ° μλλΌ, μ€μ μλΉμ€ μ½λκ° μλ λ€λ₯Έ νλ‘μ νΈ(μ: λ°±μλ μλ² repo)μ docs/ ν΄λλ‘ λΌμ λ£μ΄ μ°λ λ¬Έμ μΈνΈλ€. λΆμ¬ λ£μ λ€ κ·Έ νλ‘μ νΈμ λΉμ¦λμ€ μ»¨ν
μ€νΈ(context/)μ μ€ν μ 보(reference/)λ₯Ό μ±μ λ£μΌλ©΄, AI μμ΄μ νΈκ° CLAUDE.mdμ μν¬νλ‘μ°μ λ°λΌ μ€κ³ λ¬Έμλ₯Ό μμ±Β·κ°±μ νλ€.
READMEλ μ¬λμ μν μκ°λ¬Έμ΄κ³ , μ€μ μμ κ·μΉμ
CLAUDE.mdμ μλ€. AI μμ΄μ νΈμκ² μ½λ©μ λ§‘κΈΈ λλ CLAUDE.mdλ₯Ό reading listμ λ°λμ ν¬ν¨μν¨λ€. READMEλ 보쑰 λ¬Έμλ€.
μ΄ μ μ₯μλ₯Ό κ°μ Έλ€ μΈ νλ‘μ νΈ(μ: planharness-backend/)μ 루νΈμμ λ€μ μ€ νλλ₯Ό μ€ννλ©΄, μ΄ repoκ° κ·Έ νλ‘μ νΈμ docs/ ν΄λλ‘ λ€μ΄μ¨λ€:
# submodule λ°©μ
git submodule add <repo-url> docs
# λλ subtree λ°©μ
git subtree add --prefix docs <repo-url> main --squash결과 ꡬ쑰:
planharness-backend/ β μ€μ μλΉμ€ μ½λκ° μλ νλ‘μ νΈ
βββ src/
βββ docs/ β μ¬κΈ°λ‘ μ΄ μ μ₯μκ° λ€μ΄μ΄
βββ CLAUDE.md
βββ context/
βββ reference/
βββ ...
μ΄ν:
docs/context/μ λΉμ¦λμ€ λ°°κ²½Β·μ€ν μ΄ν¬νλΒ·μ μ½Β·KPIλ₯Ό κΈ°λ‘νλ€.docs/reference/μ μΈλΆ μμ€ν (Kafka, DB, External API)κ³Ό μ΄λ―Έ κ²°μ λ μ€ν μ 보(stack-spring.md,stack-go.mdλ±)λ₯Ό κΈ°λ‘νλ€.docs/hld/μ High-Level Designμ μμ±νλ€.- AI μμ΄μ νΈκ°
docs/CLAUDE.mdμ λ¨κ³μ λ°λΌ LLD skeleton β ADR β LLD final β Validationμ μμ±νλ€. - Validation λ¬Έμμμ μ¬λμ΄ λ¦¬λ·° ν μΉ΄ν κ³ λ¦¬λ₯Ό μ‘°μ νλ€ (β νμ μ iteration 루ν).
docs/
βββ CLAUDE.md # β
AIκ° λ°λ₯΄λ μν¬νλ‘μ° κ·μΉ (authoritative)
βββ README.md # λ³Έ λ¬Έμ (μκ°Β·λ³΄μ‘°)
βββ context/ # λΉμ¦λμ€/λ¬Έμ 컨ν
μ€νΈ β μ¬λμ΄ λ―Έλ¦¬ μ±μ
β βββ <topic>.md
βββ reference/ # μΈλΆ μμ‘΄μ± + μ€ν μ 보 β μ¬λμ΄ λ―Έλ¦¬ μ±μ
β βββ kafka.md
β βββ db.md
β βββ external-api-<name>.md
β βββ stack-<name>.md
βββ hld/
β βββ <feature>.md # High-Level Design (μ€ν μμ‘΄ X)
βββ lld/
β βββ skeleton/ # Open Questions μ€μ¬μ LLD μ΄μ
β β βββ <topic>.md
β βββ final/ # κ²°μ λ°μλ μμ± LLD (μΈμ΄Β·νλ μμν¬ λ
립)
β βββ <topic>.md
βββ adr/
β βββ NNNN-<slug>.md # Architecture Decision Record (μ μ₯μ μ μ 4μ리)
βββ validation/
βββ <topic>.md # LLD κ²μ¦ νλͺ© + Human Review 체ν¬ν¬μΈνΈ
νμΌλͺ
컨벀μ
κ³Ό κ° λ¬Έμμ μμΈ ν¬λ§·μ CLAUDE.md μ°Έμ‘°.
- λ¨κ³λ₯Ό 건λλ°μ§ μλλ€. skeleton μμ΄ final LLDλ₯Ό μ°μ§ μκ³ , ADR μμ΄ κ²°μ μ LLDμ λ°μ§ μλλ€.
- λͺ¨λ₯΄λ κ²μ λ΅νμ§ μλλ€. Open QuestionμΌλ‘ λ¨κΈ°κ³ , μ΄λ ADRμ΄ λ΅ν μ§ νκΈ°νλ€.
- κ²°μ κ³Ό κ²μ¦μ λΆλ¦¬νλ€. κ²°μ μ ADR, κ²μ¦μ Validation. μμ§ μλλ€.
- μ¬λμ νλ¨μ Validation 리뷰 ν κ³³μ λͺ¨μλ€. AIλ μ€κ° λ¨κ³μμ μ¬λμ κΈ°λ€λ¦¬μ§ μλλ€ β μν¬νλ‘μ° μ 체λ₯Ό μμΈ‘ κ°λ₯νκ² μ μ§νκΈ° μν¨μ΄λ€.
- LLDλ μΈμ΄Β·νλ μμν¬ λ
립μ μ΄λ€. LLDλ§ λ³΄κ³ Go Β· Spring Β· κ·Έ μΈ μ΄λ μ€νμΌλ‘λ ꡬν κ°λ₯ν΄μΌ νλ€. μ€ν-νΉμ μ©μ΄λ
reference/μλ§ λλ€. λ¨, λμμ± λͺ¨λΈμ²λΌ νλμ μν₯μ μ£Όλ μ νμ ADRλ‘ λ¨κΈ΄λ€(λͺ¨λΈ μμ€: "event-loop λ¨μΌ μ€λ λ" β / "WebFlux μ±ν" Γ).
| μΉ΄ν κ³ λ¦¬ | μλ―Έ |
|---|---|
MUST_PASS |
λ¦΄λ¦¬μ¦ μ λ°λμ ν΅κ³Όν΄μΌ νλ μꡬμ¬ν |
KNOWN_ISSUE |
μλ €μ§ νκ³ β νμ¬λ νμ© κ°λ₯νλ€κ³ νλ¨ |
DEFERRED |
μ΄λ² iteration λ²μ λ°μΌλ‘ λ°μ΄λ νλͺ© |
μΉ΄ν
κ³ λ¦¬ μΉκ²© κΆνμ μ¬λμκ²λ§ μλ€. μ¬λμ΄ KNOWN_ISSUE β MUST_PASS κ°μ΄ μΉκ²©νλ©΄ LLD skeleton / ADR λ¨κ³λ‘ λμκ° iteration 루νκ° λλ€. λͺ¨λ νλͺ©μ΄ MUST_PASS ν΅κ³Ό / KNOWN_ISSUE μλ½ / DEFERRED λ²μ λ° νμΈ μ€ νλλ‘ μ 리λλ©΄ iteration μ’
λ£.
μμΈλ CLAUDE.mdμ λ¨κ³ 5~8.
- μ€μ νλ‘μ νΈμ λΉμ¦λμ€ μ»¨ν
μ€νΈ, μ½λ, μ€ν μ ν β μ΄ μ μ₯μλ₯Ό κ°μ Έλ€ μ°λ νλ‘μ νΈκ°
context/,reference/μ μ±μ΄λ€. - ꡬν λ¨κ³μ μ½λ© κ·μΉ β μ΄ μ μ₯μλ₯Ό κ°μ Έλ€ μ°λ νλ‘μ νΈμ 루νΈ
CLAUDE.mdμ κ΄μ¬μ¬λ€ (docs/CLAUDE.mdκ° μλλ€). - ν¨ν€μ§ ꡬ쑰·λ μ΄μ΄ κ·μΉΒ·architecture test β LLDμ κ΄μ¬μ¬κ° μλλ€.