Skip to content

EOTAEGYU/commerce

Repository files navigation

πŸ›οΈ Claude Code ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§ Γ— νŒ¨μ…˜ 컀머슀

Kotlin Spring Boot Next.js PostgreSQL Claude

Claude Code둜 ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§ ν™˜κ²½μ„ κ΅¬μ„±ν•˜κ³ , κ·Έ μœ„μ—μ„œ 의λ₯˜Β·μ‹ λ°œ νŒ¨μ…˜ μžμ‚¬λͺ°μ„ ν’€μŠ€νƒ κ°œλ°œν•˜λŠ” μ‹€ν—˜μ  ν”„λ‘œμ νŠΈ


πŸ“Œ ν”„λ‘œμ νŠΈ λͺ©μ 

이 ν”„λ‘œμ νŠΈλŠ” 두 κ°€μ§€ λͺ©ν‘œλ₯Ό λ™μ‹œμ— μΆ”κ΅¬ν•œλ‹€.

  1. ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§ μ‹€ν—˜ β€” Claude Code의 μ „λ¬Έν™” μ—μ΄μ „νŠΈ, μ»€μŠ€ν…€ μ»€λ§¨λ“œ, PostToolUse Hook을 μ‘°ν•©ν•΄ 개발 ν’ˆμ§ˆκ³Ό 속도λ₯Ό μžλ™ν™”ν•˜λŠ” ν™˜κ²½μ„ κ΅¬μΆ•ν•œλ‹€.
  2. 컀머슀 도메인 개발 β€” μœ„ ν™˜κ²½ μœ„μ—μ„œ μ‹€μ œ λ™μž‘ν•˜λŠ” νŒ¨μ…˜ μžμ‚¬λͺ° λ°±μ—”λ“œΒ·ν”„λ‘ νŠΈμ—”λ“œλ₯Ό κ°œλ°œν•œλ‹€.

πŸ€– ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§ ꡬ성

ꡬ성 μš”μ†Œ

μ’…λ₯˜ 이름 μ—­ν• 
μ—μ΄μ „νŠΈ backend-developer Entity / Service / Repository / Controller μ „ 계측 κ΅¬ν˜„
μ—μ΄μ „νŠΈ frontend-developer Next.js νŽ˜μ΄μ§€ / μ»΄ν¬λ„ŒνŠΈ / API 연동 κ΅¬ν˜„
μ—μ΄μ „νŠΈ unit-test-generator κ΅¬ν˜„ 파일 뢄석 ν›„ Kotest/MockK ν…ŒμŠ€νŠΈ μžλ™ 생성 (TDD Mode 지원)
μ»€λ§¨λ“œ /dev {domain} 섀계 β†’ TDD β†’ κ΅¬ν˜„ β†’ ν…ŒμŠ€νŠΈ β†’ 컀밋 β†’ λ¬Έμ„œν™” 7단계 μžλ™ μ‹€ν–‰
μ»€λ§¨λ“œ /doc {domain} git diff 뢄석 ν›„ 도메인·APIΒ·μŠ€ν‚€λ§ˆΒ·μ—λŸ¬μ½”λ“œ λ¬Έμ„œ μžλ™ μ΅œμ‹ ν™”
μ»€λ§¨λ“œ /ship ν…ŒμŠ€νŠΈ β†’ 컀밋 λ©”μ‹œμ§€ μžλ™ 생성 β†’ 컀밋 β†’ ν‘Έμ‹œ ν•œ λ²ˆμ— 처리
Hook PostToolUse .kt μ €μž₯ μ‹œ Kotlin 컴파일, .ts/.tsx μ €μž₯ μ‹œ TypeScript νƒ€μž… 체크 μžλ™ μ‹€ν–‰
MCP plan-review κ΅¬ν˜„ μ „ 섀계 κ³„νš κ²€ν† 

μ›Œν¬ν”Œλ‘œμš° (/dev μ»€λ§¨λ“œ κΈ°μ€€)

flowchart TD
    User["πŸ‘¨β€πŸ’» 개발자"] -->|"/dev {domain}"| Dev["/dev μ»€λ§¨λ“œ"]

    Dev --> Plan["πŸ“‹ Step 1\n도메인 섀계 λͺ…μ„Έ μž‘μ„±\nEntity / Service / API 확인 ν›„ μ‚¬μš©μž 승인"]
    Plan -->|승인| TDD["πŸ§ͺ Step 2\nunit-test-generator\nTDD λͺ¨λ“œλ‘œ ν…ŒμŠ€νŠΈ μŠ€μΌˆλ ˆν†€ 생성"]
    TDD --> Impl["βš™οΈ Step 3\nbackend-developer\nκ΅¬ν˜„ μ½”λ“œ μž‘μ„±"]

    Impl --> Hook{"πŸ” PostToolUse Hook\n*.kt μ €μž₯λ§ˆλ‹€\nKotlin 컴파일 μžλ™ μ‹€ν–‰"}
    Hook -->|컴파일 μ‹€νŒ¨| Fix["πŸ”§ μ—λŸ¬ 감지 β†’ μ¦‰μ‹œ μžλ™ μˆ˜μ •"]
    Fix --> Hook
    Hook -->|컴파일 성곡| Test["βœ… Step 4\n./gradlew test\n도메인 ν…ŒμŠ€νŠΈ 전체 μ‹€ν–‰"]

    Test -->|μ‹€νŒ¨| Retry["πŸ”§ μ‹€νŒ¨ ν…ŒμŠ€νŠΈ 뢄석 ν›„ μˆ˜μ •\nbackend-developer"]
    Retry --> Test
    Test -->|전체 톡과| Commit["πŸ’Ύ Step 5\nκ΅¬ν˜„ 컀밋\nConventional Commits μžλ™ 생성"]

    Commit --> Doc["πŸ“š Step 6\n/doc μ»€λ§¨λ“œ\n도메인·APIΒ·μŠ€ν‚€λ§ˆΒ·μ—λŸ¬μ½”λ“œ λ¬Έμ„œ μžλ™ μ΅œμ‹ ν™”"]
    Doc --> Push["πŸš€ Step 7\ngit push"]
Loading

πŸ› οΈ 기술 μŠ€νƒ

ꡬ뢄 기술
λ°±μ—”λ“œ Kotlin 2.2.21 / Spring Boot 4.0.5 / Spring Data JPA / Spring Security + JWT
λ°μ΄ν„°λ² μ΄μŠ€ PostgreSQL 16
ν”„λ‘ νŠΈμ—”λ“œ Next.js 16 (App Router) / TypeScript 5 / TanStack Query 5 / Zustand 5 / Tailwind CSS 4
AI 도ꡬ Claude Code (claude-sonnet-4-6)
ν•˜λ„€μŠ€ μ „λ¬Έν™” μ—μ΄μ „νŠΈ 3μ’… / μ»€μŠ€ν…€ μ»€λ§¨λ“œ 3μ’… / PostToolUse Hook / MCP plan-review
μ„±λŠ₯ ν…ŒμŠ€νŠΈ k6

βœ… κ΅¬ν˜„λœ 도메인

도메인 μƒνƒœ 핡심 기술 포인트
user βœ… μ™„λ£Œ Spring Security + JWT 인증, BCrypt λΉ„λ°€λ²ˆν˜Έ ν•΄μ‹±
category βœ… μ™„λ£Œ 2depth 계측 ꡬ쑰 (λŒ€λΆ„λ₯˜ / μ†ŒλΆ„λ₯˜)
product βœ… μ™„λ£Œ ProductOption λ‹¨μœ„ 재고 관리, Pessimistic Lock
cart βœ… μ™„λ£Œ 재고 확인 ν›„ CartItem CRUD
order βœ… μ™„λ£Œ OrderItem μŠ€λƒ…μƒ·, μƒνƒœ 전이, 10λΆ„ 만료 μŠ€μΌ€μ€„λŸ¬
payment βœ… μ™„λ£Œ Mock PG 연동, μ‹€νŒ¨ μ‹œ 재고·포인트 μžλ™ 볡원
review βœ… μ™„λ£Œ OrderItem λ‹¨μœ„ 리뷰, 0.5 λ‹¨μœ„ 별점, N+1 배치 쿼리
like βœ… μ™„λ£Œ μ’‹μ•„μš” ν† κΈ€, 볡수 μƒν’ˆ μƒνƒœ 배치 쑰회
coupon βœ… μ™„λ£Œ μ •μ•‘/μ •λ₯  쿠폰, Optimistic Lock λ™μ‹œ λ°œκΈ‰ μ œμ–΄
point βœ… μ™„λ£Œ 리뷰·ꡬ맀 적립, 결제 μ‚¬μš©, Optimistic Lock
settlement βœ… μ™„λ£Œ 일별 맀좜 집계 μŠ€μΌ€μ€„λŸ¬, PENDING β†’ CONFIRMED β†’ PAID

πŸ“ˆ μ„±λŠ₯ λͺ©ν‘œ (SLO)

μ§€ν‘œ λͺ©ν‘œ
DAU 10,000λͺ…
피크 λ™μ‹œ 접속 ~1,000λͺ…
피크 RPS ~100 req/s
API μ‘λ‹΅μ‹œκ°„ P95 < 200ms
κ°€μš©μ„± 99.9% (μ›” λ‹€μš΄νƒ€μž„ < 43λΆ„)
μ—λŸ¬μœ¨ < 0.1%

πŸ—‚οΈ ν”„λ‘œμ νŠΈ ꡬ쑰

commerce/
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ api/                    # Spring Boot λ°±μ—”λ“œ
β”‚   β”‚   └── src/main/kotlin/com/example/commerce/
β”‚   β”‚       β”œβ”€β”€ {domain}/       # 도메인별 entity / repository / service / controller / dto
β”‚   β”‚       └── common/         # BaseEntity / ApiResponse / ErrorCode / CustomException
β”‚   └── web/                    # Next.js 16 ν”„λ‘ νŠΈμ—”λ“œ
β”‚       └── src/app/            # App Router νŽ˜μ΄μ§€ 및 μ»΄ν¬λ„ŒνŠΈ
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ architecture/           # μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜, JWT λ³΄μ•ˆ 섀계
β”‚   β”œβ”€β”€ api/                    # API 곡톡 κ·œμΉ™, 전체 μ—”λ“œν¬μΈνŠΈ λͺ©λ‘
β”‚   β”œβ”€β”€ database/               # μ—”ν‹°ν‹° μŠ€ν‚€λ§ˆ, 관계도
β”‚   β”œβ”€β”€ domain/                 # 도메인별 λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™ 및 μœ μŠ€μΌ€μ΄μŠ€
β”‚   β”œβ”€β”€ development/            # 둜컬 μ„ΈνŒ…, μ½”λ“œ μ»¨λ²€μ…˜, μ—λŸ¬ μ½”λ“œ λͺ©λ‘
β”‚   └── troubleshooting/        # 개발 쀑 λ°œμƒν•œ 문제 상황 및 ν•΄κ²° κ³Όμ •
β”œβ”€β”€ tools/
β”‚   β”œβ”€β”€ k6/                     # μ„±λŠ₯ ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€ 슀크립트
β”‚   └── plan-review/            # MCP μ„œλ²„ (섀계 κ³„νš κ²€ν† )
└── .claude/
    β”œβ”€β”€ agents/                 # μ „λ¬Έν™” μ—μ΄μ „νŠΈ μ •μ˜ (backend / frontend / test)
    β”œβ”€β”€ commands/               # μ»€μŠ€ν…€ μŠ¬λž˜μ‹œ μ»€λ§¨λ“œ (dev / doc / ship)
    └── settings.json           # PostToolUse Hook, κΆŒν•œ μ„€μ •

πŸš€ μ‹€ν–‰ 방법

사전 μš”κ΅¬μ‚¬ν•­

  • JDK 21+
  • Node.js 20+
  • PostgreSQL 16+

λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •

CREATE DATABASE commerce;
CREATE USER commerce WITH PASSWORD 'commerce1234';
GRANT ALL PRIVILEGES ON DATABASE commerce TO commerce;

ν™˜κ²½λ³€μˆ˜ (선택)

λ³€μˆ˜ κΈ°λ³Έκ°’ μ„€λͺ…
JWT_SECRET commerce-secret-key-must-be-at-least-32-characters-long JWT μ„œλͺ… ν‚€ (운영 μ‹œ λ°˜λ“œμ‹œ λ³€κ²½)
JWT_EXPIRATION_MS 86400000 JWT 만료 μ‹œκ°„ (ms), κΈ°λ³Έ 24μ‹œκ°„

λ°±μ—”λ“œ μ‹€ν–‰

./gradlew bootRun
# API μ„œλ²„: http://localhost:8080
# Swagger UI: http://localhost:8080/swagger-ui.html

ν”„λ‘ νŠΈμ—”λ“œ μ‹€ν–‰

cd apps/web
npm install
npm run dev
# 개발 μ„œλ²„: http://localhost:3000

OpenAPI νƒ€μž… 생성 (λ°±μ—”λ“œ 기동 μƒνƒœμ—μ„œ)

npm run generate:types

πŸ“š λ¬Έμ„œ ꡬ쑰

경둜 λ‚΄μš©
docs/architecture/ μ‹œμŠ€ν…œ κ°œμš”, λ ˆμ΄μ–΄ μ•„ν‚€ν…μ²˜, JWT λ³΄μ•ˆ 섀계
docs/api/ API 곡톡 κ·œμΉ™, 전체 μ—”λ“œν¬μΈνŠΈ λͺ©λ‘ (Swagger 보쑰용)
docs/database/ μ—”ν‹°ν‹° ν•„λ“œ μ •μ˜, ν…Œμ΄λΈ” 관계도
docs/domain/ 도메인별 λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™ 및 μœ μŠ€μΌ€μ΄μŠ€ 상세
docs/development/ 둜컬 μ„ΈνŒ… κ°€μ΄λ“œ, μ½”λ“œ μ»¨λ²€μ…˜, μ—λŸ¬ μ½”λ“œ λͺ©λ‘
docs/troubleshooting/ 개발 쀑 λ°œμƒν•œ λ¬Έμ œμ™€ ν•΄κ²° κ³Όμ • 기둝

각 도메인 폴더(apps/api/src/main/kotlin/.../domain/CLAUDE.md)μ—λŠ” ν•΄λ‹Ή λ„λ©”μΈμ˜ Entity ꡬ쑰, λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™, API μ—”λ“œν¬μΈνŠΈλ₯Ό μ •λ¦¬ν•œ 도메인 νŠΉν™” λ¬Έμ„œκ°€ μžˆλ‹€.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors