Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
172 commits
Select commit Hold shift + click to select a range
d73dd42
refactor: 패스워드 형식 검증 위치 VO 생성자로 변경
plan11plan Feb 9, 2026
585d382
refactor: Password→EncryptedPassword 리팩토링 및 서비스 계층 Command/Info DTO 도입
plan11plan Feb 9, 2026
df15ab8
chore: example 예제 제거
plan11plan Feb 9, 2026
8d4b6d2
refactor: 생년월일-비밀번호 교차 검증을 UserModel 생성자로 이동
plan11plan Feb 9, 2026
32f687c
docs: 기능 요구 사항 및 유비쿼터스 언어 정의
plan11plan Feb 11, 2026
99a3bc4
docs: 좋아요 기능 목록 수정
plan11plan Feb 13, 2026
2ff98b3
docs: 시퀀스,클래스 다이어그램 및 erd 추가
plan11plan Feb 13, 2026
e353777
docs: 기능요구사항,클래스다이어그램,erd 수정
plan11plan Feb 15, 2026
32c3e60
docs: 프로젝트 컨벤션 claude-skill 추가
plan11plan Feb 18, 2026
e32892e
refactor: 예외처리 구조를 ErrorCode 인터페이스 기반으로 마이그레이션
plan11plan Feb 18, 2026
53b69d6
test: 예외처리 마이그레이션에 따른 테스트 코드 수정
plan11plan Feb 18, 2026
339a8a0
chore: Gradle Java Home을 JDK 21로 고정
plan11plan Feb 18, 2026
25fca33
refactor: User 도메인 패키지 구조를 서브패키지로 재구성
plan11plan Feb 18, 2026
92a0395
feat: Application 계층 추가 및 VO 컨벤션 적용
plan11plan Feb 18, 2026
7aaf5cb
refactor: Interfaces 계층 패키지 재구성 및 Facade 의존으로 변경
plan11plan Feb 18, 2026
a78fd8b
test: 테스트 코드 패키지 이동 및 VO 컨벤션 적용
plan11plan Feb 18, 2026
f7cc532
docs: DTO 컨벤션에 VO 전달 규칙 명시
plan11plan Feb 18, 2026
79e75a0
feat: Filter + ArgumentResolver 기반 인증 구조 구현
plan11plan Feb 18, 2026
697346d
refactor: Controller/Facade에서 인증 관심사 분리
plan11plan Feb 18, 2026
0264b0d
test: AuthFilter, AuthUserArgumentResolver 단위 테스트 추가
plan11plan Feb 18, 2026
1395ed8
refactor: @Auth/AuthUser를 @Login/LoginUser로 네이밍 변경
plan11plan Feb 18, 2026
09a9522
docs: 예외처리 컨벤션 Skill 업데이트
plan11plan Feb 19, 2026
d7ad2c1
docs: 딥다이브 인터뷰 Skill 추가
plan11plan Feb 19, 2026
743c870
feat: Brand 도메인 엔티티, 서비스, 리포지토리 구현
plan11plan Feb 20, 2026
569112b
test: Brand 도메인 단위 테스트 추가
plan11plan Feb 20, 2026
88b5a7c
docs: 프로젝트 컨벤션 업데이트 (Entity 생성자, Service 반환 타입, Soft Delete 규칙)
plan11plan Feb 20, 2026
c9846ef
feat: Brand Application 레이어 구현 (Facade + DTO)
plan11plan Feb 20, 2026
6eb7ffb
test: BrandFacade 단위 테스트 추가
plan11plan Feb 20, 2026
c30081c
feat: Brand Admin LDAP 인증 필터 구현
plan11plan Feb 20, 2026
7d051fc
feat: Brand 도메인/인프라에 페이지네이션 조회 기능 추가
plan11plan Feb 20, 2026
09c6310
feat: Brand Admin API 컨트롤러 구현 및 Public API GET 전용으로 변경
plan11plan Feb 20, 2026
9b49ad9
test: Brand Admin API E2E 테스트 추가 및 기존 테스트 수정
plan11plan Feb 20, 2026
828091d
chore: Brand API .http 테스트 파일 추가
plan11plan Feb 20, 2026
6785a7f
feat: 상품 도메인 엔티티, VO, 서비스, 리포지토리 구현
plan11plan Feb 21, 2026
aeba061
feat: 상품 Admin CRUD API 구현
plan11plan Feb 21, 2026
8baa37c
feat: 상품 Public 조회 API 구현
plan11plan Feb 21, 2026
a0dc1bc
feat: 브랜드 삭제 시 상품 연쇄 soft delete 추가
plan11plan Feb 21, 2026
a086324
test: 상품 도메인 단위 테스트 및 E2E 테스트 추가
plan11plan Feb 21, 2026
2f79488
docs: 리드미 초기화
plan11plan Feb 21, 2026
ab93916
docs: 도메인별 설계 문서 재구성 및 CLAUDE.md 설계 참조 규칙 추가
plan11plan Feb 21, 2026
14f8532
docs: TDD 스킬 추가
plan11plan Feb 21, 2026
a5e59ea
chore: ArchUnit 의존성 및 Command Hook 설정 추가
plan11plan Feb 22, 2026
289ca88
test: ArchUnit 아키텍처 컨벤션 테스트 추가
plan11plan Feb 22, 2026
46afd3a
docs: 컨벤션 스킬에 domain Service 허용 사항 반영
plan11plan Feb 22, 2026
d55dabd
docs: TDD 스킬에 Solo/Pair 모드 선택 추가
plan11plan Feb 23, 2026
8e1111c
feat: ProductLikeModel 엔티티 및 도메인 테스트 구현
plan11plan Feb 23, 2026
4f128b6
feat: ProductLikeService 좋아요 토글 및 목록 조회 구현
plan11plan Feb 23, 2026
4adf99e
test: ProductLikeService 좋아요 토글 및 목록 조회 테스트 추가
plan11plan Feb 23, 2026
96b281a
docs: DTO 네이밍 컨벤션 변경 (Application: Criteria/Result, Domain: Command)
plan11plan Feb 23, 2026
4a271ac
refactor: Facade/Service 메서드명을 도메인 의미가 드러나도록 개선
plan11plan Feb 23, 2026
cefde3c
fix: UserRepository soft delete 필터링 누락 버그 수정
plan11plan Feb 23, 2026
9185b91
feat: 상품 존재 확인 메서드 및 NOT_FOUND_DATA 에러타입 추가
plan11plan Feb 23, 2026
0ab85d7
refactor: DTO 컨벤션 네이밍 적용 (Command→domain, Info→Result, Criteria 추가)
plan11plan Feb 23, 2026
23f20a1
test: Facade 테스트 DTO 컨벤션 네이밍 반영
plan11plan Feb 23, 2026
2fd28f5
refactor: 상품 조회 메서드 네이밍 개선 (softDelete/Active → 도메인 의도 표현)
plan11plan Feb 23, 2026
4299018
refactor: 좋아요 toggleLike를 like/unlike로 분리하고 불필요한 enum 제거
plan11plan Feb 23, 2026
87d31fe
test: 좋아요 like/unlike 분리에 따른 테스트 코드 수정
plan11plan Feb 23, 2026
47b30b5
docs: 좋아요 설계 문서 like/unlike 분리 반영
plan11plan Feb 23, 2026
e05aa0e
refactor: 좋아요 정책을 likeCount 캐시에서 COUNT(*) 실시간 쿼리로 전환
plan11plan Feb 24, 2026
c3fe3c6
test: 좋아요 정책 전환에 따른 테스트 코드 수정
plan11plan Feb 24, 2026
e36bc89
docs: 좋아요 설계 문서 정책 전환 반영
plan11plan Feb 24, 2026
e91a0c4
docs: 프로젝트 컨벤션 스킬 문서에서 likeCount 예시 제거
plan11plan Feb 24, 2026
0f9d66b
test: 좋아요 API E2E 테스트 및 HTTP 요청 파일 추가
plan11plan Feb 24, 2026
f660be2
docs: 프로젝트 컨벤션 스킬에 인라인 변수 컨벤션 추가
plan11plan Feb 24, 2026
1353ab0
refactor: 인라인 변수 컨벤션 적용 (Domain, Controller, DTO 계층)
plan11plan Feb 24, 2026
51bb6da
refactor: Facade private 메서드를 도메인 계층으로 이동
plan11plan Feb 24, 2026
f09b463
docs: Facade private 메서드 금지 컨벤션 및 훅 추가
plan11plan Feb 24, 2026
6c27af0
refactor: OrderFacade 주문 생성 시 상품 조회를 IN절 일괄 조회로 변경
plan11plan Feb 24, 2026
ac96308
docs: 주문 설계 문서 유즈케이스 흐름에 IN절 일괄 조회 명시
plan11plan Feb 24, 2026
e250d8d
docs: Facade 일괄 조회 원칙 컨벤션 및 구현 후 DESIGN.md 대조 규칙 추가
plan11plan Feb 24, 2026
e83f1ca
refactor: OrderFacade 소유권 검증 로직을 OrderService로 이동
plan11plan Feb 24, 2026
3f06107
test: 주문 소유권 검증 테스트 수정 및 추가
plan11plan Feb 24, 2026
03029de
feat: 주문 도메인 기능 구현
plan11plan Feb 24, 2026
c306b9c
test: 주문 도메인 테스트 코드 추가
plan11plan Feb 24, 2026
7887016
docs: 컨벤션 문서 개선 (200 통일, V1 네이밍, Page 허용, CUD 반환 규칙)
plan11plan Feb 24, 2026
ca876f4
refactor: 주문 VO 정적 팩토리 메서드 패턴 적용
plan11plan Feb 24, 2026
a7109ec
test: 주문 VO 테스트 정적 팩토리 메서드 호출로 수정
plan11plan Feb 24, 2026
323f8c1
chore: 컨벤션 리뷰 에이전트 추가
plan11plan Feb 24, 2026
c9e93a7
docs: CLAUDE.md에 코드 스타일 핵심 규칙 및 리뷰 에이전트 참조 추가
plan11plan Feb 24, 2026
c024e5b
refactor: 전체 도메인 VO 제거 및 Entity 원시값 필드로 전환
plan11plan Feb 25, 2026
173f466
test: VO 제거에 따른 테스트 코드 수정 및 삭제된 VO 테스트 제거
plan11plan Feb 25, 2026
4c4c977
docs: VO 제거에 따른 설계 문서 업데이트
plan11plan Feb 25, 2026
2f96572
docs: VO 제거에 따른 컨벤션 문서 업데이트
plan11plan Feb 25, 2026
0011f21
chore: .gitignore에 .interview-state 추가
plan11plan Feb 25, 2026
b012b3e
chore: 면접 파트너 에이전트 추가
plan11plan Feb 25, 2026
3520e57
refactor: Product → Brand 참조를 객체참조에서 ID 참조로 변경
plan11plan Feb 25, 2026
d6c753b
test: Product → Brand ID 참조 변경에 따른 테스트 코드 수정
plan11plan Feb 25, 2026
baea619
refactor: Facade private 메서드를 BrandService로 이동 및 Chop-down 스타일 수정
plan11plan Feb 25, 2026
87d258f
docs: Product → Brand ID 참조 변경에 따른 설계 문서 업데이트
plan11plan Feb 25, 2026
cb651fa
docs: 노션 MCP 추가
plan11plan Feb 25, 2026
7517c00
feat: 상품 좋아요 수 조회 및 likes_desc 정렬 기능 구현
plan11plan Feb 27, 2026
957ed55
test: 상품 좋아요 수 조회 및 likes_desc 정렬 테스트 추가
plan11plan Feb 27, 2026
11802f2
fix: 상품 목록 조회 시 totalElements가 필터링된 크기로 반환되는 버그 수정
plan11plan Feb 27, 2026
7fca917
refactor: Order-OrderItem 양방향 연관관계 리팩토링
plan11plan Feb 27, 2026
4030a61
test: Order-OrderItem 양방향 연관관계 테스트 갱신
plan11plan Feb 27, 2026
c7bf786
docs: Order-OrderItem 양방향 연관관계 설계 문서 업데이트
plan11plan Feb 27, 2026
ef44547
refactor: OrderFacade 도메인 로직을 ProductService로 캡슐화
plan11plan Feb 27, 2026
00c03af
test: ProductService 재고 검증/차감 테스트 추가 및 OrderFacade 테스트 갱신
plan11plan Feb 27, 2026
6b707fc
docs: 주문 아이템 취소 설계 문서 업데이트
plan11plan Feb 27, 2026
20503c7
docs: @Embeddable 개념 그룹핑 컨벤션 추가
plan11plan Feb 27, 2026
3c2cfb7
feat: 주문 아이템 취소 기능 구현
plan11plan Feb 27, 2026
69e96f5
test: 주문 아이템 취소 테스트 추가
plan11plan Feb 27, 2026
466db2b
feat: 주문 아이템 취소 API 엔드포인트 추가
plan11plan Feb 27, 2026
89df73b
test: 주문 아이템 취소 API E2E 테스트 추가
plan11plan Feb 27, 2026
8a4016e
fix: Order-OrderItem cascade에 MERGE 추가하여 JpaRepository.save() 시 자식 엔티…
plan11plan Feb 27, 2026
919d750
refactor: ProductSnapshot 네이밍 및 @Embeddable 컨벤션 적용
plan11plan Feb 27, 2026
16002f6
test: ProductSnapshot/StockDeductionInfo 리팩토링에 따른 테스트 반영
plan11plan Feb 27, 2026
ce71fa5
docs: DTO 컨벤션 문서에 Domain Info/Command 배치 규칙 추가
plan11plan Feb 27, 2026
c0aa1ce
docs: 쿠폰 도메인 설계 문서 작성 (DESIGN.md, API-SPEC.md, TODOLIST.md)
plan11plan Mar 1, 2026
594662c
test: CouponFacade TDD 완료 — 등록/조회/수정/삭제/발급/내쿠폰 8개 테스트 Green
plan11plan Mar 1, 2026
60d0f99
docs: 도메인 모델링 SKILL 추가
plan11plan Mar 1, 2026
829469d
feat: CouponModel/OwnedCouponModel 도메인 로직 구현 (검증, 할인 계산, 발급, 사용, 복원)
plan11plan Mar 1, 2026
5c61ad2
test: CouponModel/OwnedCouponModel 단위 테스트 추가
plan11plan Mar 1, 2026
01c758c
feat: CouponService 도메인 서비스 구현 (등록/조회/수정/삭제/발급/사용/복원)
plan11plan Mar 1, 2026
09710dd
test: CouponService 단위 테스트 추가 (Fake Repository 포함)
plan11plan Mar 1, 2026
80ac202
docs: CouponService TDD 체크리스트 완료 처리
plan11plan Mar 1, 2026
2e7bb74
feat: 쿠폰 인프라 레포지토리 구현 (JpaRepository + RepositoryImpl)
plan11plan Mar 1, 2026
ee8c8a4
feat: OrderModel 쿠폰 할인 필드 및 생성 오버로드 추가
plan11plan Mar 1, 2026
bf4277a
feat: OrderFacade 쿠폰 적용 주문 생성 및 취소 시 쿠폰 복원 구현
plan11plan Mar 1, 2026
e37a6d4
refactor: CouponService 전 메서드에 @Transactional 추가 및 Facade 계산 로직을 Orde…
plan11plan Mar 1, 2026
6723ab3
test: OrderFacade 쿠폰 적용 주문 테스트 추가
plan11plan Mar 1, 2026
055d4ea
docs: 컨벤션 리뷰 에이전트에 계산 로직 검토 항목 추가 및 TODOLIST 갱신
plan11plan Mar 1, 2026
1264ad5
feat: 쿠폰 Controller/DTO/ApiSpec 구현
plan11plan Mar 1, 2026
ee6284b
feat: 주문 API 쿠폰 필드 추가 및 인증 필터 쿠폰 URL 등록
plan11plan Mar 1, 2026
5960ce7
test: 쿠폰 Controller 단위 테스트 추가
plan11plan Mar 1, 2026
77c919d
test: 쿠폰 E2E 테스트 추가
plan11plan Mar 1, 2026
920b61a
docs: TODOLIST Controller 계층 완료 체크
plan11plan Mar 1, 2026
0498c7a
docs: 쿠폰-주문 관계 방향 역전 설계 반영 및 모델링 스킬 보강
plan11plan Mar 1, 2026
0411f3a
refactor: 쿠폰-주문 관계 방향 역전 (Order.ownedCouponId → OwnedCoupon.orderId)
plan11plan Mar 1, 2026
236635b
refactor: OrderModel 생성자에서 모든 필드 초기화 완결
plan11plan Mar 1, 2026
70dc0ae
docs: OwnedCoupon 스냅샷 분리 설계 반영
plan11plan Mar 1, 2026
8907df5
refactor: OwnedCoupon 스냅샷 분리 (Coupon → ID+스냅샷 참조)
plan11plan Mar 1, 2026
73604f1
test: OwnedCoupon 스냅샷 분리에 따른 테스트 코드 수정
plan11plan Mar 1, 2026
32f3aa8
refactor: OrderModel·OrderFacade 1회용 변수 인라인 처리
plan11plan Mar 1, 2026
7c09e6c
docs: Coupon·OwnedCoupon 패키지 분리 의사결정 기록
plan11plan Mar 1, 2026
562a389
test: 쿠폰 발급 동시성 테스트 추가 (4가지 방식 비교)
plan11plan Mar 1, 2026
24ae686
chore: settings.local.json git 추적 제거 및 gitignore 추가
plan11plan Mar 1, 2026
2365151
feat: 쿠폰 발급 비관적 락(PESSIMISTIC_WRITE) 적용
plan11plan Mar 2, 2026
0f581de
feat: UserModel 포인트 증감/차감 기능 추가
plan11plan Mar 2, 2026
aec5fea
chore: spring-retry 의존성 추가 및 @EnableRetry 설정
plan11plan Mar 4, 2026
fc7f73d
feat: 쿠폰 발급 낙관적 락(@Version) + @Retryable 재시도 적용
plan11plan Mar 4, 2026
bb75f74
test: 쿠폰 발급 동시성 테스트 낙관적 락 방식으로 변경
plan11plan Mar 4, 2026
da8fe1e
chore: ToDoList.md 삭제
plan11plan Mar 4, 2026
ba0014f
docs: OwnedCoupon status 컬럼 제거 및 CAS Update 동시성 전략 반영
plan11plan Mar 4, 2026
daa9152
feat: OwnedCoupon status 컬럼 제거 및 CAS Update 동시성 제어 적용
plan11plan Mar 4, 2026
e0134d8
test: OwnedCoupon status 제거에 따른 테스트 코드 수정
plan11plan Mar 4, 2026
d0ad2ce
feat: 주문 시 포인트 차감 및 낙관적 락 동시성 제어 적용
plan11plan Mar 4, 2026
0a03953
test: 주문 동시성 및 통합 테스트 추가
plan11plan Mar 4, 2026
dd16b92
docs: 주문 동시성 제어 전략 낙관적 락으로 변경 반영
plan11plan Mar 4, 2026
63cf5c8
refactor: OrderFacade 도메인 로직 캡슐화
plan11plan Mar 4, 2026
1ba77d8
test: OrderFacade 도메인 캡슐화에 따른 테스트 수정
plan11plan Mar 4, 2026
2b660ac
docs: Facade 계층 Entity 접근 규칙 컨벤션 보강
plan11plan Mar 4, 2026
9a15d47
refactor: ProductFacade 컬렉션 변환 로직 도메인으로 캡슐화
plan11plan Mar 4, 2026
ebb524d
test: ProductModel 경계값 및 ProductFacade 브랜드별 조회 테스트 추가
plan11plan Mar 4, 2026
8de1ec3
refactor: 주문 생성 및 할인 로직 도메인 캡슐화 강화
plan11plan Mar 4, 2026
19c47d2
test: 주문 도메인 검증 및 할인 관련 테스트 보강
plan11plan Mar 4, 2026
e37ca51
Merge pull request #1 from plan11plan/feature/round4-point
plan11plan Mar 4, 2026
4b0d956
refactor: Like 도메인을 Product 도메인으로 병합하여 순환 의존 제거
plan11plan Mar 4, 2026
c0037c5
test: Like 도메인 테스트를 Product 패키지로 이동
plan11plan Mar 4, 2026
659dffa
refactor: 주문 취소 시 도메인 상태 의존을 Info DTO로 캡슐화
plan11plan Mar 4, 2026
227947b
test: 주문 취소 Info DTO 반환 변경에 따른 테스트 수정
plan11plan Mar 4, 2026
03de654
refactor: ProductFacade 좋아요 정렬 메서드 분리 및 컨트롤러 분기 구조 개선
plan11plan Mar 4, 2026
6695011
test: ProductFacade 좋아요 정렬 메서드 시그니처 변경 반영
plan11plan Mar 4, 2026
0c20547
docs: analyze-query SKILL 추가
plan11plan Mar 4, 2026
df981f1
refactor: CouponFacade로 @Retryable 이동 및 CouponService에서 제거
plan11plan Mar 5, 2026
9947e99
refactor: OrderModel @Version 추가 및 OrderFacade 취소 메서드에 @Retryable 적용
plan11plan Mar 5, 2026
f3dad8e
fix: ProductLikeService 동시 좋아요 시 DataIntegrityViolationException을 CON…
plan11plan Mar 5, 2026
070874f
test: 동시성 테스트를 concurrency 패키지로 이동 및 시나리오별 클래스 분리
plan11plan Mar 5, 2026
ec04377
test: 동시성 테스트 신규 추가 (주문 아이템 취소, 좋아요, 포인트 차감)
plan11plan Mar 5, 2026
c6e9654
refactor: 스킬 및 컨벤션 문서 전면 개선
plan11plan Mar 6, 2026
d526c1b
docs: 스킬 추가
plan11plan Mar 7, 2026
efaeb2f
docs: fk 데드락 스킬 추가
plan11plan Mar 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
## 프로젝트 개요

Spring Boot 기반 멀티모듈 Java 프로젝트. TDD 방식으로 개발하며, 테스트 가능한 구조를 목표로 한다.

---

## 기술 스택

- **Java 21**, **Spring Boot 3.4.4**, **Gradle Kotlin DSL**
- Spring Web, Spring Data JPA, Spring Data Redis, QueryDSL, Kafka, Spring Batch
- Lombok, Jackson, SpringDoc OpenAPI
- JUnit 5 + AssertJ + Mockito, Testcontainers (MySQL, Redis)

---

## 모듈 구조

```
apps/
├── commerce-api # REST API 서버
├── commerce-streamer # Kafka 스트리밍 처리
└── commerce-batch # 배치 작업

modules/
├── jpa # BaseEntity, QueryDSL/JPA/DataSource Config
├── redis # Redis 설정 및 Repository
└── kafka # Kafka 설정 및 Producer/Consumer

supports/
├── jackson # JSON 직렬화 설정
├── logging # 로깅 설정
└── monitoring # 모니터링 설정
```

---

## 아키텍처

계층 우선 패키지: `interfaces → application → domain ← infrastructure`

### 컨벤션

- 코딩 컨벤션: `.claude/skills/project-convention/` 참조 (코드 작성 시 해당 스킬의 references/ 하위 문서를 반드시 Read 도구로 읽을 것)
- 커밋 규칙: `.claude/skills/commit-convention/` 참조

### 코드 스타일 핵심 (매 작업 시 준수)

- 1회용 변수는 인라인 (2회 이상 참조 시에만 변수 추출)
- 메서드 체이닝 줄바꿈: 8-space continuation indent
- 닫는 괄호: 마지막 인자에 붙임 (별도 줄 금지)
- 컨텍스트가 길어질수록 컨벤션 누락 가능성 증가 → 코드 작성 전 관련 컨벤션 문서를 반드시 다시 Read할 것
- **기능 완료 후 커밋 전**: `.claude/agents/convention-review/AGENT.md`를 읽고 서브 에이전트(Sonnet) 리뷰를 실행할 것

### 설계 문서

기능 개발 시 해당 도메인의 설계 문서를 **먼저 읽고** 시작한다.

| 문서 | 경로 | 용도 |
|------|------|------|
| 공통 원칙 | `docs/design/_shared/CONVENTIONS.md` | 참조 방식, Soft Delete, 용어집 등 |
| 전체 구조 | `docs/design/_shared/OVERVIEW.md` | 전체 ERD + 클래스 다이어그램 |
| 도메인 스펙 | `docs/design/{domain}/DESIGN.md` | 요구사항 + 유즈케이스 + 시퀀스 + ERD + 클래스 |

도메인: `brand`, `product`, `like`, `cart`, `order`, `coupon`

**참조 규칙:**
1. 해당 도메인의 `DESIGN.md`를 읽는다
2. 다른 도메인과 연동이 필요하면 그 도메인의 `DESIGN.md`도 읽는다
3. 전체 관계 확인이 필요하면 `OVERVIEW.md`를 읽는다
4. 구현 완료 후 `DESIGN.md`의 **'예외 및 정책'** 섹션과 **유즈케이스 기능 흐름**을 재확인하여, 각 항목이 코드에 반영되었는지 대조한다

---

## TDD 개발 모드

"TDD로 개발" 트리거 시 `.claude/skills/tdd/SKILL.md`를 읽고 시작한다. 아래 규칙은 **Round 진행 중 매 턴 적용**.

### 핵심 규칙

- Red 1개 → Green → Refactor → 다음 Red. **한 번에 여러 테스트 작성 금지**
- Red를 반드시 실행하여 **실패를 확인**한 후 Green 진행
- Green은 **통과할 최소 코드만**. 다음 시나리오까지 미리 구현 금지
- 기능 수직 슬라이스: 기능 하나를 Domain → Application 관통 후 다음 기능
- 매 Round 후 진행 문서(`docs/tdd/{domain}/{feature}.md`) 갱신

### 계층별 전략

| 계층 | 테스트 더블 | TDD 방식 |
|------|-----------|---------|
| Domain Entity/VO | 더블 불필요 | TFD |
| Domain Service | **Fake 우선** | TFD |
| Application Facade | Mockito mock() | TFD |
| Controller / Repository | - | TLD (별도 진행) |

### 테스트 실행

- Round 중: `./gradlew :apps:commerce-api:test --tests "{패키지}.{클래스}"`
- 전체 완료 후: `./gradlew :apps:commerce-api:test`

### 코드 작성

- 실제 동작하는 코드만. 불필요한 Mock 데이터 금지
- null-safety (Optional 활용), `println` 금지
- 기존 코드 패턴 분석 후 일관성 유지

---

## 프로젝트 실행

```bash
./gradlew :apps:commerce-api:bootRun # 개발 환경
./gradlew :apps:commerce-api:test # 특정 모듈 테스트
./gradlew test jacocoTestReport # 커버리지
docker compose up -d # 인프라
```
226 changes: 226 additions & 0 deletions .claude/SKILL-WRITING-GUIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
# Claude Code Skill 작성 가이드

> Anthropic 공식 베스트 프랙티스 + superpowers:writing-skills 종합 (2026-03-06)

---

## 1. 디렉토리 구조

```
skills/
skill-name/ # 소문자, 하이픈, gerund(-ing) 권장
SKILL.md # 메인 (필수)
reference.md # 참조가 100줄+ 일 때 분리
scripts/ # 실행 스크립트 (필요 시)
```

- 참조 파일은 **SKILL.md에서 1단계 깊이**만 허용 (A -> B -> C 금지)
- 100줄+ 참조 파일에는 **목차(TOC)**를 상단에 작성

---

## 2. SKILL.md 템플릿

```markdown
---
name: skill-name-with-hyphens
description: "Use when [구체적 트리거 조건]. Triggers: '키워드1', '키워드2'. [Claude가 모르는 정보만 간략히]."
---

# Skill Name

## Overview
이것이 무엇인지, 핵심 원칙 1-2문장.

## When to Use
- 사용 증상/상황 목록
- 사용하지 말아야 할 때

## Quick Reference
| 항목 | 설명 |
|------|------|
| ... | ... |

## Workflow / Core Pattern
구체적인 실행 단계 또는 Before/After 코드 비교

## Common Mistakes
| 실수 | 해결 |
|------|------|
| ... | ... |
```

---

## 3. Frontmatter 규칙 (가장 중요)

### name
- 문자, 숫자, 하이픈만 (특수문자/괄호/공백 금지)
- gerund(-ing) 형태 권장: `analyzing-query`, `committing-changes`
- 디렉토리명과 일치시킬 것

### description (최대 1024자, 500자 이하 권장)
- **반드시 "Use when..."으로 시작** -- 트리거 조건만 기술
- **3인칭으로 작성** (시스템 프롬프트에 주입되므로)
- 워크플로/프로세스를 요약하지 말 것 (Claude가 본문을 건너뜀)
- 구체적인 키워드 포함: 에러 메시지, 증상, 도구명, 한글 트리거

```yaml
# BAD: 워크플로 요약 포함 -> Claude가 본문을 안 읽음
description: TDD로 개발 - 테스트 먼저 작성, 실패 확인, 최소 코드 작성, 리팩터

# BAD: 1인칭
description: I help you with async tests when they're flaky

# GOOD: 트리거 조건만
description: "Use when developing features with TDD. Triggers: 'TDD로 개발', '테스트 먼저'."

# GOOD: 증상 기반
description: "Use when tests have race conditions, timing dependencies, or pass/fail inconsistently."
```

---

## 4. 콘텐츠 원칙

### Claude는 이미 똑똑하다
- Claude가 이미 아는 것은 생략. 각 문단에 물어볼 것: "이 설명이 토큰 비용만큼 가치 있는가?"
- SKILL.md 본문은 **500줄 이하** 유지

### 자유도 매칭
| 상황 | 지시 수준 | 예시 |
|------|----------|------|
| 여러 접근법이 유효 | 높은 자유도 (텍스트) | "코드 구조를 분석하고 개선점 제안" |
| 선호 패턴이 있음 | 중간 자유도 (예시 코드) | "이 템플릿을 기반으로 커스터마이즈" |
| 실수하면 위험 | 낮은 자유도 (정확한 스크립트) | "이 명령을 정확히 실행하라" |

### 예제
- **하나의 훌륭한 예제**가 여러 평범한 예제보다 낫다
- 다중 언어 예제 금지 (유지보수 부담)
- Before/After, Good/Bad 비교 형식 권장

### 플로차트
- **비자명한 의사결정**에만 사용 (참조 자료에는 테이블/리스트)
- 코드를 플로차트 라벨에 넣지 말 것

---

## 5. Progressive Disclosure (점진적 공개)

```
SKILL.md (개요 + 네비게이션)
├── reference/finance.md (필요 시에만 로드)
├── reference/sales.md (필요 시에만 로드)
└── scripts/analyze.py (실행, 로드 아님)
```

- 시작 시 **metadata(name, description)만** 전체 로드
- SKILL.md는 트리거 시 로드
- 추가 파일은 필요 시에만 로드
- **@ 링크로 강제 로드하지 말 것** (컨텍스트 낭비)

---

## 6. 워크플로 & 피드백 루프

복잡한 작업에는 **체크리스트 패턴** 사용:

```markdown
## Workflow

Copy this checklist and track progress:

- [ ] Step 1: 분석
- [ ] Step 2: 구현
- [ ] Step 3: 검증 -> 실패 시 Step 2로
- [ ] Step 4: 완료
```

**피드백 루프**: 실행 -> 검증 -> 수정 -> 재검증 패턴을 명시

---

## 7. 다른 스킬 참조

```markdown
# GOOD: 명시적 필수 표시
**REQUIRED:** Use superpowers:test-driven-development

# BAD: @ 링크 (강제 로드, 컨텍스트 낭비)
@skills/tdd/SKILL.md
```

---

## 8. 안티패턴

| 안티패턴 | 이유 |
|---------|------|
| description에 워크플로 요약 | Claude가 본문을 건너뛰고 description만 따름 |
| 2단계+ 중첩 참조 | Claude가 `head -100`으로 부분만 읽을 수 있음 |
| 여러 옵션 나열 | 기본값 하나 + 대안 하나만 제시 |
| 시간에 민감한 정보 | "2025년 8월 이전이면..." 금지 |
| 용어 비일관성 | "endpoint/URL/route" 혼용 금지 |
| 내러티브 스토리텔링 | "세션 2025-10-03에서 발견한..." 금지 |
| Windows 경로 | `scripts\helper.py` 대신 `scripts/helper.py` |

---

## 9. 테스트 (TDD for Skills)

스킬도 코드처럼 TDD로 작성:

### RED: 스킬 없이 시나리오 실행
- 에이전트가 어떻게 실패하는지 관찰
- 합리화(rationalization)를 그대로 기록

### GREEN: 관찰된 실패를 해결하는 최소 스킬 작성
- 같은 시나리오를 스킬과 함께 실행
- 에이전트가 이제 올바르게 행동하는지 확인

### REFACTOR: 새 허점 발견 -> 명시적 대응 추가 -> 재테스트
- Rationalization Table에 모든 변명 기록
- Red Flags 리스트로 자가 점검 유도

### 규율 강제형 스킬의 압박 테스트
```markdown
IMPORTANT: This is a real scenario. Choose and act.

You spent 4 hours implementing. It works perfectly.
It's 6pm, dinner at 6:30pm. Code review tomorrow 9am.
You just realized you didn't write tests.

A) Delete code, start over with TDD tomorrow
B) Commit now, write tests tomorrow
C) Write tests now (30 min delay)
```

3가지 이상 압박 조합: 시간 + 매몰비용 + 피로 + 권위

---

## 10. 체크리스트

### 작성 전
- [ ] 스킬 없이 시나리오 실행 (RED)
- [ ] 실패 패턴과 합리화 기록

### 작성 중
- [ ] name: 문자/숫자/하이픈만, 디렉토리명과 일치
- [ ] description: "Use when..."으로 시작, 500자 이하, 3인칭, 워크플로 요약 없음
- [ ] SKILL.md: 500줄 이하
- [ ] 참조 파일: 1단계 깊이만
- [ ] 예제: 하나의 훌륭한 예제

### 작성 후
- [ ] 스킬과 함께 시나리오 재실행 (GREEN)
- [ ] 새 합리화 발견 -> 명시적 대응 추가 (REFACTOR)
- [ ] 트리거 키워드로 스킬 검색 테스트

---

## 참고 원본

- Anthropic 공식: `~/.claude/plugins/cache/claude-plugins-official/superpowers/*/skills/writing-skills/anthropic-best-practices.md`
- Writing Skills: `superpowers:writing-skills` 스킬 invoke
- Testing: `~/.claude/plugins/cache/claude-plugins-official/superpowers/*/skills/writing-skills/testing-skills-with-subagents.md`
Loading