interview-domain
도메인별 상세 인터뷰 - 완전한 명확성 확보
安装与使用
请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。
查看来源 ↗使用指南技能说明
Skill: Interview Domain
목적
특정 도메인에 대한 모든 모호함을 제거하고 완전한 정의 확립
입력
- 도메인 이름 (예: "users", "translations")
- Phase 1 결과 (SESSION.md의 초기 도메인 정보)
- 이미 해결된 항목 목록 (선택)
출력
- 도메인별 완전한 정의 (SESSION.md 업데이트)
- 다음 배치 질문 또는 완료 표시
인터뷰 카테고리
| 카테고리 | 질문 예시 |
|---|---|
| 엔티티 속성 | "User는 어떤 필드를 가지나요?" |
| 관계 | "User와 Translation의 관계는?" |
| 생명주기 | "회원 탈퇴 시 데이터는 어떻게 처리되나요?" |
| 권한 | "프로필 수정은 누가 할 수 있나요?" |
| 제약 | "Email 중복은 허용되나요?" |
| 비즈니스 룰 | "번역 결과는 얼마나 보관하나요?" |
사용 방법
1. 도메인 모호함 식별
from skills.interview_domain import identify_domain_ambiguities
ambiguities = identify_domain_ambiguities(
domain="users",
session_data=read(".claude/SESSION.md")
)
# 결과:
# [
# {
# "category": "엔티티 속성",
# "question": "User는 어떤 필드를 가지나요?",
# "priority": "high"
# },
# {
# "category": "관계",
# "question": "User와 Translation의 관계는?",
# "priority": "high"
# },
# ...
# ]
2. 배치 질문 생성 (최대 4개)
from skills.interview_domain import generate_batch_questions
batch = generate_batch_questions(
ambiguities=ambiguities[:4],
domain="users"
)
# AskUserQuestion 형식으로 반환
3. 진행 상황 추적
from skills.interview_domain import track_progress
progress = track_progress(
domain="users",
completed_batches=2,
remaining_ambiguities=3
)
# {
# "domain": "users",
# "status": "🚧 진행 중",
# "batches": 2,
# "remaining": 3
# }
배치 크기 결정
| 상황 | 배치 크기 | 이유 |
|---|---|---|
| 초기 인터뷰 | 3-4개 | 기본 구조 파악 |
| 상세 인터뷰 | 2-3개 | 깊이 있는 질문 |
| 마무리 | 1-2개 | 마지막 모호함 제거 |
질문 생성 원칙
✅ 좋은 질문 (도메인 지식)
- "User 엔티티의 속성은?"
- "Translation과 Mission의 관계는?"
- "번역 결과 저장 기간은?"
- "프로필 수정 권한은?"
❌ 나쁜 질문 (기술 구현)
- "User 테이블의 컬럼 타입은?"
- "Foreign Key 제약은?"
- "Index는 어디에?"
- "UUID vs Auto Increment?"
→ 개념적 정의만! 구현 세부사항은 나중에.
완전성 검증
도메인 인터뷰가 완료되려면:
def is_domain_complete(domain: str, session_data: dict) -> bool:
"""도메인 인터뷰 완료 여부 확인"""
required_items = [
"엔티티 속성", # 모든 필드 정의됨
"관계", # 다른 엔티티와의 관계 명확
"생명주기", # 생성/수정/삭제 규칙
"권한", # 누가 무엇을 할 수 있는지
"제약", # 필수/선택, 유효성 규칙
"비즈니스 룰" # 특별한 정책
]
for item in required_items:
if not is_defined(domain, item, session_data):
return False
return True
예시
입력 (users 도메인)
{
"domain": "users",
"initial_info": "회원 관리 도메인",
"completed": []
}
배치 1 질문
{
"questions": [
{
"question": "User 엔티티는 어떤 속성을 가지나요?",
"header": "User 속성",
"multiSelect": True,
"options": [
{
"label": "ID (고유 식별자)",
"description": "필수 - 시스템 자동 생성"
},
{
"label": "Email (이메일)",
"description": "로그인 및 연락용"
},
{
"label": "DisplayName (표시 이름)",
"description": "사용자 닉네임"
},
{
"label": "ProfileImage (프로필 사진)",
"description": "선택적"
}
]
},
{
"question": "User와 Translation의 관계는?",
"header": "관계 정의",
"multiSelect": False,
"options": [
{
"label": "1:N (한 사용자가 여러 번역 기록)",
"description": "가장 일반적"
},
{
"label": "1:1 (한 사용자당 하나의 번역만)",
"description": "제한적"
}
]
},
{
"question": "프로필 수정은 누가 할 수 있나요?",
"header": "권한",
"multiSelect": False,
"options": [
{
"label": "본인만",
"description": "일반적인 권한 구조"
},
{
"label": "본인 + 관리자",
"description": "관리자 개입 가능"
}
]
}
]
}
배치 1 답변 → SESSION.md 업데이트
#### 배치 1 (완료 ✅)
| 항목 | 결정 |
|------|------|
| User 속성 | ID, Email, DisplayName, ProfileImage |
| User-Translation 관계 | 1:N (한 사용자가 여러 번역 기록) |
| 프로필 수정 권한 | 본인만 |
**새로운 모호함 발견**:
- ProfileImage는 어떤 형식으로 저장?
- Email 중복 허용 여부?
- DisplayName 길이 제한?
> 배치 2 질문 준비 중...
배치 2 질문
{
"questions": [
{
"question": "ProfileImage는 어떤 형식으로 저장하나요?",
"header": "이미지 저장",
"multiSelect": False,
"options": [
{
"label": "URL (외부 저장소)",
"description": "S3, R2 등 외부 경로"
},
{
"label": "Base64 인코딩",
"description": "문자열로 직접 저장"
}
]
},
{
"question": "Email 중복은 허용되나요?",
"header": "Email 제약",
"multiSelect": False,
"options": [
{
"label": "허용",
"description": "같은 이메일로 여러 계정"
},
{
"label": "불허 (Unique)",
"description": "이메일당 하나의 계정"
}
]
}
]
}
배치 2 답변 → SESSION.md 업데이트
#### 배치 2 (완료 ✅)
| 항목 | 결정 |
|------|------|
| ProfileImage 형식 | URL (외부 저장소 경로) |
| Email 중복 | 불허 (Unique 제약) |
**새로운 모호함**: 없음 ✅
### users 도메인 완료 ✅
**최종 정의**:
- 엔티티: User (4개 속성)
- 관계: Translation (1:N)
- 권한: 본인 수정만
- 제약: Email Unique, ProfileImage 선택적
재평가 알고리즘
각 배치 후:
def reassess_domain(domain: str, batch_results: dict) -> list:
"""배치 답변 후 새로운 모호함 탐지"""
new_ambiguities = []
# 1. 답변에서 새로운 용어 추출
for answer in batch_results.values():
new_terms = extract_new_terms(answer)
# 2. 각 용어에 대한 추가 질문 필요 여부 확인
for term in new_terms:
if needs_clarification(term):
new_ambiguities.append({
"term": term,
"question": generate_follow_up_question(term)
})
# 3. 완전성 체크리스트 검증
for category in ["엔티티 속성", "관계", "생명주기", "권한", "제약", "비즈니스 룰"]:
if not is_category_complete(domain, category, batch_results):
new_ambiguities.append({
"category": category,
"question": generate_category_question(domain, category)
})
return new_ambiguities
옵션 설명 작성 가이드
좋은 설명:
- 구체적: "한 사용자가 여러 번역 기록" (좋음) vs "관계 정의" (나쁨)
- 결과 명시: "이메일당 하나의 계정" (좋음) vs "Unique 제약" (나쁨)
- 한글 사용: "본인만" (좋음) vs "Self-only" (나쁨)
진행 상황 테이블 포맷
| 도메인 | 상태 | 배치 수 |
|--------|------|------------|
| users | ✅ 완료 | 2 |
| translations | 🚧 진행 중 | 1 |
| missions | ⏳ 대기 | 0 |
| phrases | ⏳ 대기 | 0 |
使用示例
查看来源仓库中的使用示例与配置说明。
查看来源 ↗来源历史
- 收录时间
- 2026-03-11
- 索引更新时间
- 2026-03-11
- Branch
- main
收录与同步日期属于本站记录。源码修改历史请查看来源仓库。
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!