검토 이유: 신규 팀원의 생산성을 조기에 확보하고 지식 전파의 비용을 낮추기 위한 실천적 가이드라인 정립.
📌 한 줄 통찰
"매 4-step (Inventory → Entry Points → Tracing → Boundaries) + 매 small first task". 매 perfectionism 의 reject — 매 fragmented info 의 connect 의 시작. 매 modern: 매 LLM-aided onboarding (RAG + repo).
📖 핵심 (간략)
매 4-step workflow.
매 top-down × bottom-up cross-check.
매 small task 의 risk-low 의 시작.
매 dynamic analysis (debugger, log).
매 doc 의 불완전 — 매 code + test 의 truth.
🤖 LLM 활용
언제: 매 new joiner. 매 codebase migration. 매 acquisition tech due diligence. 매 LLM-aided onboarding RAG.
언제 X: 매 single-script project.
# 매 stack identify
ls package.json pyproject.toml go.mod Cargo.toml pom.xml 2>/dev/null
ls Dockerfile docker-compose.yml .github/workflows/ 2>/dev/null
ls README.md docs/ ARCHITECTURE.md 2>/dev/null
ls -la # 매 hidden config# 매 size + language breakdown
cloc . # 매 lines per language# 매 directory tree (top 2 level)
tree -L 2 -I node_modules
Find entry points
# 매 main / index 의 search
grep -rn "if __name__" --include="*.py"# 매 Python entry
grep -rn "func main" --include="*.go"# 매 Go
grep -rn "fn main" --include="*.rs"# 매 Rust
find . -name "index.ts" -o -name "main.ts" -o -name "server.ts"# 매 routing
grep -rn "@app.route\|app.get\|router.get" --include="*.{py,ts,js}"
Trace one request (E2E)
1. HTTP request → router.
2. → controller / handler.
3. → service / use case.
4. → repository / data layer.
5. → DB query.
6. → response back up.
매 each layer 의 break point 의 set.
매 매 layer 의 transformation 의 observe.
Small first task (low-risk)
1. Fix a typo in README / docs.
2. Update outdated dependency (patch).
3. Add a unit test for existing function.
4. Improve error message clarity.
5. Add a log line.
6. Refactor a small private function.
→ 매 PR + review + merge 의 cycle 의 학습.
LLM-aided onboarding RAG
fromlangchain.vectorstoresimportChromafromlangchain.text_splitterimportRecursiveCharacterTextSplitter# 매 codebase + ADR + README + commit history 의 indexsources=['src/**/*.{ts,py}','docs/**/*.md','adr/*.md','README.md']splitter=RecursiveCharacterTextSplitter(chunk_size=1500,chunk_overlap=200)vectordb=Chroma.from_documents(load_docs(sources),embeddings,persist_directory='./onboarding-rag')defask(q):returnllm.generate_with_context(q,vectordb.similarity_search(q,k=5))# 매 examplesask("Where does authentication happen?")ask("What's the data flow for a user signup?")ask("Why was Postgres chosen over MongoDB? (ADR)")
Architecture map (output)
Codebase: [name]
Stack: [TS / Node / Postgres / Redis]
Entry points:
- HTTP API: [src/server.ts:42]
- CLI: [src/cli.ts:15]
- Worker: [src/worker.ts]
Layers (Clean Arch):
- domain/ (entity, value object)
- application/ (use case)
- infrastructure/ (db, http, queue)
External deps:
- Stripe: [src/infrastructure/stripe/]
- Slack: [src/infrastructure/slack/]
Open questions:
- How does retry work for Stripe webhook?
- Why is OrderService split across 2 modules?
🤔 결정 기준
상황
Approach
Tiny (<10 file)
Read all
Small (<500 file)
4-step + small task
Large (10K+ file)
RAG-aided + bounded-context-by-bounded-context
Legacy unknown
CodeScene hotspot first
Greenfield
Owner walkthrough
기본값: 매 4-step + 매 RAG + 매 small task within week 1.
❌ 안티패턴
Read everything 의 perfectionism: 매 paralysis.
No small task: 매 actual learn X.
Doc 의 100% trust: 매 stale.
No question journal: 매 forget.
Skip dynamic analysis: 매 runtime mismatch.
🕓 변경 이력
날짜
변경
2026-05-08
Phase 1
2026-05-10
Manual cleanup — 4-step + 매 inventory / RAG / small task code