ddd-workshop/skills/subdomain-classifier/SKILL.md
ddd-workshop 파이프라인의 3단계. event-storming-explorer가 뽑은 서브도메인 후보를 Core / Supporting / Generic으로 **분류**한다. 식별은 이미 끝난 상태이며 이 스킬의 역할은 **분류·투자 판단**에 집중. Core는 Why(경쟁 차별점)에 근거. 이 분류는 이후 context-designer가 어느 BC부터 Slice-first로 설계할지 결정하는 근거가 된다. "core supporting generic", "서브도메인 분류", "subdomain classifier", "어디에 집중할까", "외부 솔루션 쓸지", "slice first 대상 선정", "ddd-workshop 3단계" 같은 요청에 트리거한다.
npx skillsauth add dev-goraebap/skills subdomain-classifierInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
event-storming-explorer가 식별한 서브도메인 후보를 Core / Supporting / Generic으로 분류한다. 이 분류는 DDD 전략적 설계의 핵심 — 어디에 최고의 개발자와 시간을 투입할지를 정한다.
이 스킬은 식별은 하지 않는다. 식별은 event-storming-explorer의 일이고, 여기선 이미 식별된 목록을 받아 분류만 한다. 식별과 분류는 서로 다른 사고 모드이기 때문에 분리되어 있다.
완료 후 Slice-first 결정(어느 Core 서브도메인을 먼저 [4] context-designer로 밀어볼지)을 사용자와 확정.
주의 ⚠️: Core/Supporting/Generic은 서브도메인(문제 공간)의 분류이지 BC(해결 공간)의 분류가 아니다. BC는 [4]에서 분류된 서브도메인을 근거로 설계한다.
[Q 3/5 · 서브도메인: 연차 잔고 회계]⚠️ 미정으로 산출물에 기록./ddd-workshop:subdomain-classifierevent-storming-explorer 출력 직후subdomain-map.md의 분류 업데이트 → --update 모드docs/shared/subdomain-map.md — 주 입력 (분류 컬럼이 비어 있어야 함)docs/shared/event-flow.md — 이벤트 군집으로 서브도메인의 리듬·관심사 파악docs/shared/requirements.md — Why·경쟁 차별점은 Core 판정의 1순위 근거자동 점검:
subdomain-map.md의 분류 컬럼이 이미 채워져 있으면 경고 → --update 모드로 전환 권유.requirements.md의 Why가 ⚠️ 미정이면 "Core 판정 정확도 낮아짐" 알림 + 먼저 [1]로 돌아갈지 선택.event-flow.md에 핫스팟 ⚠️가 있으면 알림 — 분류 결정에 영향 가능.결과 공개:
📋 Upstream 스캔
- 서브도메인 후보: 4개 (조직, 연차잔고, 연차신청, 알림)
- Why: "근기법 기반 정확한 연차 계산으로 법적 리스크 제거"
- ⚠️ 핫스팟 2개 (퇴사 시 처리, 만료 경계)
- 기존 분류: 비어 있음 ✅
진행할까요? (1) 진행 2) Why 재검토 3) [1]로 복귀)
requirements.md의 Why가 이 서브도메인에 집약되는가? ✅/⚠️/❌[Q 1/4 · 서브도메인: 연차 잔고 회계]
근거 (requirements.md § Why 인용):
- Why: "근기법 기반 정확한 연차 계산으로 법적 리스크 제거"
- 경쟁 차별점: 대부분 HR 제품이 부정확함 → 정확성이 차별
에이전트 제안: **Core**
평가:
- Why 직결: ✅
- 경쟁 차별점: ✅
- 없으면 본질 바뀜: ✅
이 분류에 동의하시나요?
1) 동의 (Core)
2) Supporting으로 내림 (근거 필요)
3) Generic으로 내림 (외부 솔루션 가능 근거 필요)
4) 모름 / 나중에
Core는 보통 1~2개. 3개 이상이면 재검토:
현재 Core 분류된 서브도메인이 3개입니다. DDD 정론상 Core는 1~2개가 일반적입니다.
1) 유지 (각각 진짜 차별점이라 확신)
2) 우선순위 매김 (Core지만 1순위/2순위 구분)
3) 재검토 (일부를 Supporting으로 내림)
Generic 분류된 각 서브도메인에 대체 외부 솔루션 후보 1개 이상 제시. requirements.md 도메인 브리프의 "주요 플레이어"에서 꺼내 씀.
규제·보안·비용 때문에 외부 솔루션 불가한 경우 이유 명시.
✅ 서브도메인 분류 완료.
DDD에서 권장되는 slice-first 접근을 안내드립니다:
→ Core 서브도메인 **1개**를 [4]→[5]로 끝까지 먼저 설계해보기.
→ 그 학습을 바탕으로 나머지 서브도메인을 넓혀가기.
이유: 여러 서브도메인을 병행 설계하면 요구사항 변동 시 재작업 비용이 큽니다.
어떻게 진행할까요?
1) Slice-first (Core 1개 선택 후 [4] context-designer로)
2) 전체 BC 설계 먼저 ([4]에서 모든 서브도메인 병행)
3) 일단 여기서 중단, 나중에 재개
선택 결과를 산출물에 기록.
기존 docs/shared/subdomain-map.md에 이어서 작성한다. 새 파일을 만들지 않는다.
업데이트 대상:
Frontmatter 없음. 본문만.
최종 파일 구조 예시:
# Subdomain Map
> 2단계(event-storming-explorer)에서 후보 식별 완료 →
> 3단계(subdomain-classifier)에서 분류 완료.
## 서브도메인 분류
| # | 서브도메인 | 포함 이벤트 | 분류 | Why |
|---|---|---|---|---|
| A | 조직 관리 | 사원 생애주기, 부서, 직위 | Supporting | 차별 아님, 사내 개발 유지 |
| B | 연차 잔고 회계 | 적립·차감·소멸·조정 | **Core** ⭐ | Why "근기법 정확성" 집약 |
| C | 연차 신청·결재 | 신청·제출·승인·반려·취소 | Supporting | Core 보조 |
| D | 알림 | 이메일·웹푸시 발송 | Generic | 외부 솔루션 가능 |
---
## Core 서브도메인
### B. 연차 잔고 회계 ⭐
- **Why 근거**: requirements § Why — "근기법 기반 정확한 연차 계산으로 법적 리스크 제거"
- **경쟁 차별점**: 대부분 HR 제품이 엣지 케이스에서 부정확함
- **Core 판정 평가**:
- Why 직결: ✅
- 경쟁 차별점: ✅
- 없으면 본질 바뀜: ✅
- **권고**:
- 최고 역량 개발자 투입
- Aggregate·Invariant·Policy 철저 분리
- 원장(Ledger) 패턴 도입, append-only
- 외주·외부 솔루션 금지
- 변경 이력 ADR
---
## Supporting 서브도메인
### A. 조직 관리
- 왜 Core 아닌가: Why와 직결되지 않음 (HR 제품 어디나 있음)
- 권고: 표준 CRUD
### C. 연차 신청·결재
- 왜 Core 아닌가: Core(잔고 회계) 보조 역할
- 권고: 상태머신 설계, 결재선 확장 대비
---
## Generic 서브도메인
### D. 알림
- 외부 솔루션 후보: SendGrid, Resend, FCM, NHN Cloud
- 자체 필요 케이스: 없음 (MVP 기준)
- 권고: ACL로 외부 모델 격리
---
## ⚠️ 경계 사례
(있으면 기재. 없으면 "없음")
---
## Slice-first 결정
- **1순위 진행 대상**: B. 연차 잔고 회계 (Core)
- **이유**: Why 집약 + 경쟁 차별점, 엣지 케이스 많아 초기 검증 가치 높음
- **[4] context-designer에서 이 서브도메인부터 BC 설계 시작**
- 나머지는 slice 1 완료 후 확장
---
## 미정
- ⚠️ ...
## 다음 단계
→ `context-designer`로 **"B. 연차 잔고 회계" 서브도메인부터** BC 설계.
Slice 1 완료 후 나머지로 확장.
--update)requirements.md, event-flow.md, subdomain-map.md) 최신성 확인.1) Why / 경쟁 차별점 변경 → Core 재판정
2) 새 서브도메인 후보 추가 (event-storming-explorer에서)
3) 기존 서브도메인 분류 변경
4) Slice-first 대상 변경
□ Step 0 upstream 스캔 완료
□ 각 서브도메인에 ✅/⚠️/❌ 3문 평가 기록
□ Core 근거에 requirements.md Why 인용 있음
□ Core 수 1~2개 (3+이면 재검토 기록)
□ 각 Generic에 외부 솔루션 후보 1개 이상
□ 경계 사례 있으면 명시 ("경계 없음"도 가능)
□ Slice-first 결정 기록됨 (1/2/3 중 선택)
□ 산출물이 "서브도메인"을 분류함 (BC 분류 아님)
□ subdomain-map.md에 이어 작성됨 (새 파일 생성 안 함)
□ Frontmatter 없음
| 맥락 | Core 수 | Generic 외부 솔루션 | Slice-first 강도 | |---|---|---|---| | 학습 | 전부 Core OK | 자체 구현 (학습 목적) | 강함 (하나씩 배움) | | 개인 | 1개 | 적극 외부 | 강함 | | 사내 | 1~2개 | 사내 정책 따름 | 중간 | | B2B | 1~2개 | 보안 요구 시 자체 | 강함 (고객 파일럿 슬라이스) | | B2C | 1~2개 | 적극 외부 | 강함 |
subdomain-map.md에 이어 작성).testing
도메인 일반 패턴을 강의 모드로 가르치는 인지과학 기반 학습 스킬. AI가 가상 도메인 전문가(선생님) 역할을 하고 사용자가 학생으로 낯선 도메인을 차근차근 배운다. 메뉴로 시작해서 페이즈를 골라 잠수 → 능동 회상 Q&A → 자기 설명(Feynman) 순서로 진행. Dunlosky 메타분석 기반 인지과학 8원칙(Cognitive Load, Practice Testing, 정교화 질문, Self-Explanation, Schema 연결, Dual Coding, Desirable Difficulty, 분산 학습)을 본문에 명시 적용. 도메인의 법령·산업 표준·인증을 학습 본문에 정식 통합 (출처 인용이 아니라 학습 대상). AI가 판단해 보편적이고 자료 풍부한 도메인은 자료 요청 없이 진행, 좁고 깊은 도메인일 때만 사용자에게 자료 있는지 묻기. 산출물은 학습 노트 스타일 (진도 체크박스 + 페이즈별 일관 구조 + 출처 링크). 페르소나 강요 없이 보편 액터 표현("사원 A", "관리자 A"). bigpicture의 이전 단계로 작동하거나 단독 사용 가능. Triggers — "도메인 학습", "낯선 도메인 가르쳐줘", "이 산업 어떻게 굴러가요", "선생님 모드", "1:1 강의", "도메인 입문", "도메인 일반 패턴", "HR 플랫폼이 뭔지", "이커머스 흐름", "domain classroom", "/domain-classroom".
development
빅픽처 이벤트스토밍의 1:1 분석 도구. 학습 단계(domain-classroom)에서 머리에 박힌 도메인 일반 패턴을 클라이언트 시스템에 매핑해 빅픽처 산출물(시간순 도메인 이벤트·페이즈·액터·외부시스템·핫스팟·피벗)을 누적한다. domain-classroom의 학습 노트(docs/learning-notes/{도메인}- classroom.md)와 클라이언트 자료(RFP·요구사항정의서·기존 시스템 스키마)를 입력으로 받아 페이즈 단위로 진행. 페르소나·서사 없는 분석 톤. 도메인 이벤트 판별 4기준(도메인 전문가 관심·비즈니스 상태 변화·법적 의미·다른 흐름 트리거)을 명시 적용해 UI/Telemetry 이벤트 혼입 방지. 이벤트는 한국어 자연어 + Code Identifier 이중 표기. 핫스팟에 ID·답할 위치·확신도 태그 부여. 산출물은 docs/eventstorming.md 단일 파일로 시작, 후속 단계 스킬(process-modeling·software-design)이 추가될 때 폴더로 자연 분기. Initial/Update/Cycle 모드 지원 — 코드 작성 후에도 다시 사이클 가능. Triggers — "빅픽처", "빅픽처 만들어줘", "이벤트스토밍", "도메인 이벤트 정리", "Big Picture EventStorming", "페이즈 매핑", "도메인 산출물 정리", "/bigpicture".
data-ai
빅픽처 이벤트스토밍의 1:1 학습 친화 변형. 그룹 워크샵에서 도메인 전문가가 던지는 이벤트를 받아 적는 대신, AI가 가상 도메인 전문가 역할을 하고 사용자가 학습자로 1:1 인터뷰하며 빅픽처를 누적한다. 산출물(시간순 도메인 이벤트·액터· 외부시스템·핫스팟·피벗)은 빅픽처 이벤트스토밍과 거의 동일하지만, 한 보드에 한 번에 펼치는 방식이 아니라 **한 액터·한 챕터씩 시간순 서사로 누적**한다. 각 장면마다 "왜 이게 필요한가?" 설명을 곁들여 학습자가 따라올 수 있게 한다. RFP·요구사항정의서·기존 도메인 자료를 입력으로 받거나, 자료가 없으면 AI 사전 리서치(보편 사례·법령·산업 표준)로 보충해 진행. 페르소나 시점의 챕터 단위 (5~7개 장면) + 확신도 태그 [확실/일반론/추측]로 검증 지점 명시 + 사용자 인터랙션 + 액터 전환으로 빅픽처를 점진적으로 채운다. 산출물 저장은 옵셔널 — 이해 자체가 목적이다. Triggers — "낯선 도메인 이해", "도메인 차근차근 알려줘", "1:1 빅픽처", "솔로 이벤트스토밍", "RFP 분석", "비즈니스 흐름 이해", "액터 시나리오", "신규 프로젝트 도메인 파악", "빅픽처 스토리타임", "bigpicture storytime", "/bigpicture-storytime".
databases
PostgreSQL DB에 직접 접근하는 스킬. DB 조회, 테이블 구조 확인, 데이터 검증이 필요할 때 사용한다. Node.js 스크립트로 직접 연결하며 접속 정보는 환경변수 또는 credentials 파일에서 읽는다. "postgres 조회", "DB 확인", "테이블 구조", "pg-query", "쿼리 실행", "데이터 검증", "PostgreSQL 접속" 같은 요청에 트리거한다.