ddd-workshop/skills/domain-language-extractor/SKILL.md
ddd-workshop 파이프라인의 2단계. requirements-refiner 산출물에서 Ubiquitous Language(용어집)를 추출하고, 동의어·동음이의어를 감지한 뒤, 경량 이벤트 흐름(과거형, 정책·분기 제외)을 시간 순으로 그린다. 이를 근거로 "서브도메인 후보"(BC 후보 아님!)를 제안한다. 서브도메인은 문제 공간이고 BC는 다음 스킬에서 해결 공간으로 설계된다. "용어집 만들어줘", "Ubiquitous Language", "domain-language-extractor", "서브도메인 후보", "동음이의어 찾아줘", "ddd-workshop 2단계" 같은 요청에 트리거한다.
npx skillsauth add dev-goraebap/skills domain-language-extractorInstall 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.
요구사항 문서에서 도메인의 언어와 경계의 첫 단서를 뽑는다. 핵심 세 산출:
이 정보로 서브도메인 후보(Core/Supporting/Generic 분류 전, 문제 공간의 단위)를 제안한다. BC 후보가 아니다 — BC는 [4] context-designer에서 분류된 서브도메인으로부터 설계된다.
[Q 3/12 · 근거: ...]⚠️ 미정으로 산출물에 기록./ddd-workshop:domain-language-extractorrequirements-refiner 출력 직후ubiquitous-language.md가 있고 "업데이트" → --update 모드부분 진입 허용: requirements.md가 없어도 PRD·요구사항 설명으로 동작. 단 서브도메인 후보의 근거가 약해짐.
docs/requirements.md (requirements-refiner 산출) — 주 입력
## 도메인 브리프의 "후속 스킬 힌트 → domain-language-extractor" 섹션 참고시작 시 다음을 자동 점검:
requirements.md의 updated_at을 자기 sources: 기록과 비교 → 새로우면 stale 경고.requirements.md의 주요 용어(맥락·Why·액터에 등장한 핵심 명사)를 목록화 → 본 작업 중 같은 용어를 다른 형태로 쓰면 경고.⚠️ 미정 항목이 많으면 "진행할까 먼저 [1]에 복귀할까?" 선택지 제시.결과를 사용자에게 간단히 공개:
📋 Upstream 스캔 결과
- requirements.md: 최신 (OK)
- 핵심 용어 14개 로드 (주문, 회원, 상품, ...)
- ⚠️ 미정 항목 3개 있음. 진행하시겠습니까? (1) 진행 2) [1]로 복귀 3) 미정만 확인)
요구사항에서 명사와 동사를 훑어 후보 20~40개 추출. 일반 동사(만들다/보다)는 제외. 도메인성 있는 단어 우선. 이 단계는 사용자에게 안 보임.
후보를 5~10개씩 묶어 제시하고 사용자 확인. (예외적으로 묶기 허용, 각 항목 번호 필수)
[Batch 1/4] 아래 용어의 정의를 확인해주세요. 각각 번호로 답해주세요.
1) 주문 — [에이전트 제안 정의]
2) 회원 — [제안]
3) 상품 — [제안]
...
답변 방식 예:
"1번 OK, 2번은 '가입 사용자'로 수정, 3번은 미정"
"전부 OK"
"1,2 OK. 3번은 내가 다시 정의함: ..."
사용자가 수정/보완하면 반영. "미정"은 ⚠️ 미정으로 남김.
같은 개념이 다른 이름으로 쓰이는지 점검. 전형 예시:
감지되면 1문 1답으로 묻기:
[Q 5/20 · 근거: 동의어 감지]
문서에 "사용자"와 "회원"이 섞여 나옵니다. 두 용어가 같은 개념인가요?
1) 같은 개념 (하나로 통일하겠음 → 용어 선택)
2) 다른 역할 (로그인 전 / 가입 후 등 구분)
3) 모름
4) 나중에
임의 통합 금지. 확정되면 용어집에 반영.
같은 용어가 맥락별로 다른 속성 집합을 갖는지 확인.
감지 방법 (내부):
예시:
감지된 각 후보를 사용자에게 제시 + 이게 서브도메인 분리 신호임을 명시.
요구사항에서 "이런 일이 일어난다"를 과거형 이벤트로 변환해 시간 순 나열.
주문됨결제완료됨, 알림전송됨여기서는 이벤트만. 정책·커맨드·분기는 [5] aggregate-designer에서. 이유: 지금은 서브도메인 후보의 증거로만 쓰므로 복잡도 최소화.
이벤트를 시간 순으로 배열해 사용자 확인. 업계 표준 프로세스(requirements의 도메인 브리프 참조) 대비 명백한 누락만 1~2개 지적.
위 증거를 종합해 서브도메인 후보를 제안.
서브도메인 후보 도출 근거:
사용자에게 제시:
🎯 서브도메인 후보 (문제 공간. BC는 다음 스킬에서 설계됩니다)
후보 A: 상품 노출
- 포함 개념: 상품(전시정보), 카테고리, 검색
- 주요 이벤트: 상품등록됨, 상품수정됨
- 증거: 동음이의어("상품"), 응집된 개념 그룹
후보 B: 구매 거래
- 포함 개념: 주문, 결제, 장바구니
- 주요 이벤트: 주문됨, 결제완료됨, 결제실패됨
- 증거: 이벤트 클러스터, 언어 변화(가격→판매가)
후보 C: 물류
- 포함 개념: 배송, 주소, 무게/부피
- 증거: 동음이의어("상품"), 언어 변화
이 후보들이 맞나요? 조정이 필요한 부분이 있나요?
기본 경로 docs/ubiquitous-language.md.
---
skill: domain-language-extractor
version: 0.2.0
context: {학습|개인|사내|B2B|B2C}
confidence: {high|medium|low}
sources:
- path: docs/requirements.md
skill: requirements-refiner
version: 0.2.0
updated_at: YYYY-MM-DD
next_suggested: subdomain-classifier
updated_at: YYYY-MM-DD
---
# Ubiquitous Language
## 용어집
| 용어 | 정의 | 별칭 | 주요 맥락 | 업계 표준 대응 |
|---|---|---|---|---|
| 주문 | 회원이 상품을 구매하기 위해 확정한 단위 | — | 결제·배송·환불 | Order |
| ... | ... | ... | ... | ... |
## ⚠️ 동의어 확정 내역
- "사용자" + "회원" → "회원"으로 통일 (역할 구분 없음 확인)
- "상품" + "품목" → 맥락별 유지 (아래 동음이의어 참조)
## ⚠️ 동음이의어 (서브도메인 분리 신호)
### "상품"
- 상품 노출 맥락: 제목·설명·이미지·정가
- 구매 거래 맥락: 판매가·옵션·재고 스냅샷
- 물류 맥락: 무게·부피·포장
## 경량 이벤트 흐름
시간 순 (정책·분기는 [5]에서 상세화):
주문됨 → 재고확인됨 → 결제완료됨 → 출고요청됨 → 발송됨 → 배송완료됨 주문취소됨 → 환불완료됨
## ⚠️ 업계 표준 대비 누락 가능성
- 분쟁 조정 단계 (domain-brief § ... 참조)
## 서브도메인 후보 ⭐
(BC 후보 아님! 문제 공간의 단위. Core/Supporting/Generic 분류는 subdomain-classifier가 담당.)
### [A] 상품 노출
- 포함 개념: 상품(전시정보), 카테고리, 검색
- 주요 이벤트: 상품등록됨, 상품수정됨
- 증거: 동음이의어("상품"), 응집된 개념 그룹
### [B] 구매 거래
- 포함 개념: 주문, 결제, 장바구니
- 주요 이벤트: 주문됨, 결제완료됨
- 증거: 이벤트 클러스터
### [C] 물류
- 포함 개념: 배송, 주소
- 증거: 동음이의어, 언어 변화
### [D] 분쟁 조정 ⚠️ 브리프 기반 보강
- 증거: domain-brief 업계 표준 대비 누락 경고
## 미정
- ⚠️ ...
## 다음 단계
→ `subdomain-classifier`로 위 서브도메인 후보를 Core/Supporting/Generic 분류.
--update)기존 ubiquitous-language.md가 있고 요청되면:
requirements.md의 updated_at 확인 → 변경됐으면 사용자에게 알림.1) 새 용어 추가
2) 기존 용어 정의 수정
3) 동의어/동음이의어 재감지
4) 이벤트 흐름 갱신
5) 서브도메인 후보 재검토
□ Step 0 upstream 스캔 수행됨
□ 용어 후보 최소 10개 이상 (작은 PRD면 더 적어도 OK)
□ 각 용어에 "정의" 필드
□ 동의어 후보 최소 1종 점검됨 (사용자 확정)
□ 동음이의어 후보 최소 1종 점검됨 (가장 중요한 서브도메인 분리 신호)
□ 경량 이벤트 흐름 제시됨
□ 서브도메인 후보 최소 2개 (단일은 드뭄)
□ 각 후보에 "증거 (판별 기준)" 태그
□ 산출물에 "BC 후보"가 아니라 "서브도메인 후보"라고 명시됨 ← 필수!
| 맥락 | 용어 수 | 업계 표준 대조 | 서브도메인 후보 수 | |---|---|---|---| | 학습 | 10~15 | 생략 | 1~2 | | 개인 | 15~25 | 가볍게 | 2~3 | | 사내 | 30+ | 강함 | 3~6 | | B2B | 30+ | 강함 | 3~6 | | B2C | 20~30 | 중간 | 3~5 |
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 접속" 같은 요청에 트리거한다.