user-stories
사용자 관점에서 제품 요구사항을 정의할 때 INVEST 원칙을 따르는 포괄적인 유저스토리를 작성합니다.
Best use case
user-stories is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
사용자 관점에서 제품 요구사항을 정의할 때 INVEST 원칙을 따르는 포괄적인 유저스토리를 작성합니다.
Teams using user-stories should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/15-user-stories/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How user-stories Compares
| Feature / Agent | user-stories | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
사용자 관점에서 제품 요구사항을 정의할 때 INVEST 원칙을 따르는 포괄적인 유저스토리를 작성합니다.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 유저스토리 작성
## 목적
선정된 솔루션과 Event Storming 결과를 기반으로 체계적인 유저스토리를 작성합니다.
## 사용 시점
- Event Storming이 완료된 후
- UI/UX 디자인 전
- 개발 우선순위를 정의해야 할 때
- 사용자가 "유저스토리", "User Story", "백로그"를 언급할 때
## 필수 입력
- 선정된 솔루션: `think/핵심솔루션.md` (solution-selection 결과)
- 타겟 고객 정의: `define/고객분석.md` (customer-analysis 결과)
- Event Storming 결과 (event-storming 결과):
- `think/es/userflow.puml`
- `think/es/{순번}-{유저플로우명}.puml`
- 유저스토리 샘플 참고: `reference/sample_유저스토리.md`
---
## 이벤트스토밍 → 유저스토리 연결 가이드
Event Storming 결과에서 유저스토리를 도출하는 가이드입니다.
### 1. 매핑 기본 원칙
| Event Storming 요소 | User Story 요소 | 설명 |
|-------------------|----------------|------|
| **유저플로우(제목)** | Epic | 주요 비즈니스 기능 단위 |
| **이벤트 [이벤트]** | Story (I want to...) | 사용자가 달성하고 싶은 결과 |
| **커맨드 [커맨드]** | 시나리오/Task | 결과를 달성하기 위한 구체적 행동 |
| **정책/규칙 [정책/규칙]** | Acceptance Criteria | 비즈니스 규칙 및 제약사항 |
| **데이터 [데이터]** | 입력/출력 요구사항 | 필요한 데이터 정의 |
| **참여자 (Actor)** | Persona (As a...) | 스토리의 주체 |
> **핵심 원칙**: 사용자는 "버튼을 클릭하고 싶은 것"이 아니라 "결과를 달성하고 싶은 것"입니다.
> - 커맨드(Command): How (방법) - 시스템에 요청하는 행동
> - 이벤트(Event): What (목표) - 달성하고 싶은 결과/상태변화
### 2. 유저플로우 → Epic 변환
각 유저플로우 파일이 하나의 Epic이 됩니다.
예시)
```
| 파일명 | Epic |
|--------|------|
| `01-회원가입.puml` | Epic 1: 사용자 인증 |
| `02-차량등록및AI검증.puml` | Epic 2: 차량 등록 및 검증 |
```
### 3. 이벤트 → User Story 변환
**변환 공식**:
```
{사용자 유형}으로서 | 나는, {목적}을 위해 | {이벤트/결과}를 원한다.
```
**예시 (01-회원가입.puml 기준)**:
| 이벤트 | User Story |
|-------|-----------|
| `[이벤트] 카카오 인증 완료됨` | 사용자로서 \| 나는, 복잡한 입력 없이 빠르게 가입하기 위해 \| 카카오 계정으로 인증을 완료하고 싶다. |
| `[이벤트] 이메일 인증 완료됨` | 사용자로서 \| 나는, SNS 없이 가입하기 위해 \| 이메일 인증을 완료하고 싶다. |
| `[이벤트] 본인인증 완료됨` | 사용자로서 \| 나는, 안전한 거래 환경에 참여하기 위해 \| 본인인증을 완료하고 싶다. |
| `[이벤트] 회원가입 완료됨` | 사용자로서 \| 나는, 서비스를 이용하기 위해 \| 회원가입을 완료하고 싶다. |
### 4. 커맨드 → 시나리오/Task 변환
커맨드는 User Story의 **시나리오** 또는 **구현 Task**로 변환됩니다.
**예시**:
```markdown
### UFR-USER-010: [회원가입] 사용자로서 | 나는, 서비스를 이용하기 위해 | 회원가입을 완료하고 싶다.
- 시나리오 1: 카카오 간편가입
회원가입 화면에서 | [커맨드] 카카오 로그인 버튼을 클릭하면 | 카카오 인증 후 가입이 완료된다.
- 시나리오 2: 이메일 가입
회원가입 화면에서 | [커맨드] 이메일/비밀번호를 입력하고 인증하면 | 이메일 인증 후 가입이 완료된다.
```
### 5. 정책/규칙 → Acceptance Criteria 변환
시퀀스 다이어그램의 `[정책/규칙]` 노트가 Acceptance Criteria(인수조건)가 됩니다.
### 6. 외부 시스템 연동 스토리 분리
`(E)`로 표시된 외부 시스템 연동은 별도 Technical Story로 분리합니다.
---
## 마이크로서비스 정의 가이드
Event Storming 결과에서 마이크로서비스를 도출하는 5단계 프로세스입니다.
### 1. 이벤트 클러스터링
유저플로우별 이벤트를 비즈니스 개념 기준으로 그룹화합니다.
```
[방법]
1. 각 .puml 파일에서 [이벤트] 추출
2. 동일 비즈니스 개념 이벤트 묶기
3. 동일 액터가 주로 사용하는 이벤트 확인
[예시]
인증 클러스터: 회원가입 완료됨, 로그인 완료됨, 인증 완료됨
주문 클러스터: 주문 생성됨, 주문 취소됨, 주문 완료됨
```
### 2. Aggregate 식별
이벤트가 변경하는 엔티티와 생명주기를 파악합니다.
| 분석 항목 | 질문 |
|----------|------|
| 상태 변경 | 이 이벤트가 어떤 엔티티의 상태를 변경하는가? |
| 생명주기 | 생성-수정-삭제 사이클이 같은 엔티티는? |
| 불변식 | 항상 함께 검증되어야 하는 규칙은? |
```
[예시]
주문 Aggregate: Order(Root), OrderItem, OrderStatus
회원 Aggregate: Member(Root), Profile, Address
```
### 3. 바운디드 컨텍스트 정의
Aggregate와 정책/규칙을 묶어 컨텍스트 경계를 설정합니다.
```
[경계 설정 기준]
- 유비쿼터스 언어: 같은 용어가 같은 의미로 사용되는 범위
- 정책 귀속: [정책/규칙]이 적용되는 범위
- 팀 책임: 단일 팀이 책임질 수 있는 범위
```
### 4. 컨텍스트 맵핑
컨텍스트 간 관계와 통신 패턴을 정의합니다.
| 관계 유형 | 설명 | 통신 패턴 |
|----------|------|----------|
| Customer-Supplier | 요청-응답 관계 | 동기 호출 |
| Conformist | 상위 서비스 모델 따름 | 동기 호출 |
| Published Language | 표준 이벤트 공유 | 비동기 이벤트 |
| Anti-Corruption Layer | 모델 변환 계층 필요 | 어댑터 패턴 |
### 5. 분할/병합 결정
아래 기준을 적용하여 최종 마이크로서비스를 도출합니다.
#### 분할 기준 (하나 이상 해당 시 분리)
| 기준 | 설명 |
|-----|------|
| 차별화 핵심 | 비즈니스 경쟁력 원천 기능 |
| 부하 변동 | 스케일링 패턴이 다름 |
| 변경 빈도 | 배포 주기가 다름 |
| 데이터 소유 | 별도 Aggregate Root 소유 |
#### 병합 기준 (해당 시 통합 고려)
| 기준 | 지표 |
|-----|------|
| 트랜잭션 경계 | 강한 일관성 필요 |
| 서비스 크기 | 코드 5,000줄 미만 |
| 호출 빈도 | 동기 호출 90% 이상 |
| 운영 복잡도 | 팀당 3-5개 서비스 적정 |
### MVP 단계 병합 전략
초기에는 운영 복잡도를 낮추기 위해 관련 컨텍스트를 병합하고, 트래픽/복잡도 증가 시 분리합니다.
```
[병합 예시]
회원 + 알림 → 회원서비스 (분리 트리거: 알림 처리량 > 10,000건/시간)
주문 + 결제 → 거래서비스 (분리 트리거: 결제 기능 복잡화)
```
### 서비스 정의 체크리스트
- [ ] 모든 유저플로우 이벤트가 서비스에 매핑됨
- [ ] 각 서비스가 단일 Aggregate만 소유함
- [ ] 트랜잭션 경계가 서비스 경계 내에 있음
- [ ] 이벤트 기반 통신 패턴이 정의됨
---
## 유저스토리 프레임워크
### 1. 마이크로서비스
유저스토리는 마이크로서비스 단위로 구성합니다:
마이크로서비스는 '마이크로서비스 정의 가이드'에 따라 정의합니다.
'MVP 단계 병합 전략'에 따라 운영 복잡도를 낮추기 위해 관련 컨텍스트는 병합합니다.
#### 서비스 조직 예시
- **User Service**: 사용자 관리 (회원가입, 로그인, 프로필)
- **[Core] Service**: 핵심 비즈니스 기능
- **[AI] Service**: AI 기반 기능
- **[Integration] Service**: 외부 연동 기능
### 2. UFR (User Functional Requirement) 포맷
각 유저스토리는 다음 형식을 따릅니다:
#### UFR-{서비스약어}-{번호}: [{유저스토리 제목}] {사용자유형}로서 | 나는, {목적}을 위해 | {액션}을 하고 싶다.
**예시**:
- `UFR-USER-010: [회원가입] 구매자로서 | 나는, 서비스를 이용하기 위해 | 간편하게 회원가입하고 싶다.`
- `UFR-CORE-020: [주문하기] 구매자로서 | 나는, 상품을 구매하기 위해 | 쉽게 주문하고 싶다.`
### 3. 시나리오 기반 상세 요구사항
각 UFR은 다음 구조로 상세화합니다:
#### - 시나리오: {시나리오명}
{상황 설명} | {조건} | {결과}
**[입력 요구사항]**
- 기본 정보
- {필드명}: {검증 조건}
- {필드명}: {검증 조건}
- 추가 정보
- {필드명}: {검증 조건}
**[검증 요구사항]**
- {검증 항목}: {검증 내용}
- {검증 항목}: {검증 내용}
**[처리 결과]**
- 성공 시
- {결과 항목}
- {결과 항목}
- 실패 시
- {실패 조건}: {처리 방법}
#### - M/{포인트}, S/{포인트}, C/{포인트}
**우선순위 표기법**:
- **M** (Must Have): 필수 구현 기능
- **S** (Should Have): 중요 구현 기능
- **C** (Could Have): 선택 구현 기능
- **숫자**: Story Points (피보나치: 1, 2, 3, 5, 8, 13, 21)
**예시**: `M/13` → Must Have, 13 포인트
### 4. 기술 태스크 (복잡한 스토리)
복잡한 구현이 필요한 스토리는 기술 태스크를 분리합니다:
#### [기술 태스크]
- **Frontend**
- {구현 내용}
- {구현 내용}
- **Backend**
- API Endpoint: {엔드포인트}
- Service Layer: {서비스 로직}
- Repository: {데이터 접근}
- **Infrastructure**
- {인프라 요구사항}
### 5. 사용자 역할
각 역할 정의:
- **설명**
- **권한**
- **목표**
### 6. Feature Story Map
계층 구조 생성:
```
User Service
├── UFR-USER-010: 회원가입
├── UFR-USER-020: 로그인
└── UFR-USER-030: 프로필 관리
Core Service
├── UFR-CORE-010: [기능 1]
├── UFR-CORE-020: [기능 2]
└── UFR-CORE-030: [기능 3]
```
### 7. 우선순위 매트릭스
#### Must Have (P0)
1. [UFR-XXX-###] - [스토리 제목]
#### Should Have (P1)
1. [UFR-XXX-###] - [스토리 제목]
#### Could Have (P2)
1. [UFR-XXX-###] - [스토리 제목]
#### Won't Have (이번 버전에서는)
1. [UFR-XXX-###] - [스토리 제목]
### 8. 스프린트 계획 (MVP 기준)
#### Sprint 1 (1-2주차)
- [ ] UFR-USER-010: [제목] (M/5)
- [ ] UFR-CORE-020: [제목] (M/3)
- **Sprint 목표**: [스프린트 목표]
- **총 SP**: 8
[이후 스프린트 계속]
### 9. 비기능적 요구사항
#### 성능
- 페이지 로드: 3G에서 <3초, WiFi에서 <1초
- API 응답: <200ms
- 동시 사용자: 1000명
#### 보안
- HTTPS 적용
- 인증/권한 관리
- 데이터 암호화
#### 사용성
- 모바일 반응형
- WCAG 2.1 접근성 준수
- 다국어 지원
#### 확장성
- 수평 확장 가능
- 클라우드 네이티브
- 마이크로서비스 아키텍처
### 10. Definition of Done
체크리스트:
- [ ] 코드 리뷰 완료
- [ ] 단위 테스트 작성 및 통과
- [ ] 통합 테스트 통과
- [ ] 문서화 완료
- [ ] QA 테스트 통과
- [ ] 스테이징 배포 및 검증
- [ ] 프로덕션 배포
### 11. 리스크 및 의존성
| UFR ID | 리스크/이슈 | 영향도 | 완화 전략 |
|----------|-----------|--------|----------|
| UFR-XXX-### | [리스크] | 높음 | [전략] |
## INVEST 원칙
유저스토리는 반드시 INVEST를 따라야 함:
- **I**ndependent (독립적): 독립적으로 개발 가능
- **N**egotiable (협상 가능): 세부사항 논의 가능
- **V**aluable (가치 있음): 사용자에게 가치 제공
- **E**stimable (추정 가능): 추정 가능
- **S**mall (작음): 한 스프린트 내 완료 가능
- **T**estable (테스트 가능): 명확한 인수 기준
---
## 작성 형식
유저스토리 예시
```markdown
# 유저스토리
## User Service
### UFR-USER-010: [회원가입] 사용자로서 | 나는 서비스를 이용하기 위해 | 간편하게 회원가입하고 싶다.
- 시나리오: 신규 회원가입
미로그인 상태에서 회원가입 화면에 접근한 상황에서 | 필수 정보를 모두 입력하고 회원가입 버튼을 클릭하면 | 가입이 완료되고 로그인 화면으로 이동한다.
[입력 요구사항]
- 기본 정보
- 이름: 2자 이상 (한글/영문)
- 이메일: 유효한 이메일 형식
- 비밀번호: 8자 이상, 영문+숫자+특수문자
- 추가 정보
- 닉네임: 2-10자 (선택)
- 프로필 이미지: JPG/PNG, 최대 5MB (선택)
[검증 요구사항]
- 이메일 중복 확인: 기존 회원과 중복 불가
- 비밀번호 강도: 보안 정책 준수
- 필수 입력: 이름, 이메일, 비밀번호
[처리 결과]
- 성공 시
- 회원 정보 DB 저장
- 환영 이메일 발송
- 로그인 화면으로 리디렉션
- 실패 시
- 이메일 중복: "이미 사용 중인 이메일입니다" 메시지
- 유효성 오류: 해당 필드에 오류 메시지 표시
- M/13
---
(다음 스토리 반복)
## 사용자 역할
### 역할 1: {역할명}
- **설명**: {역할 설명}
- **권한**: {권한 목록}
- **목표**: {역할의 주요 목표}
### 역할 2: {역할명}
- **설명**: {역할 설명}
- **권한**: {권한 목록}
- **목표**: {역할의 주요 목표}
## Feature Story Map
\```
User Service
├── UFR-USER-010: 회원가입
├── UFR-USER-020: 로그인
└── UFR-USER-030: 프로필 관리
Core Service
├── UFR-CORE-010: {스토리 제목}
├── UFR-CORE-020: {스토리 제목}
└── UFR-CORE-030: {스토리 제목}
\```
## 우선순위 매트릭스
### Must Have (P0) - 필수
1. UFR-USER-010: 회원가입 - 서비스 이용을 위한 필수 기능
2. UFR-CORE-020: {제목} - {설명}
### Should Have (P1) - 중요
1. UFR-USER-030: {제목} - {설명}
2. UFR-CORE-030: {제목} - {설명}
### Could Have (P2) - 선택
1. UFR-XXX-###: {제목} - {설명}
### Won't Have - 향후 고려
1. UFR-XXX-###: {제목} - {설명}
## 스프린트 계획 (MVP 기준)
### Sprint 1 (1-2주차)
**Sprint 목표**: {스프린트의 핵심 목표}
- [ ] UFR-USER-010: 회원가입 (M/5)
- [ ] UFR-USER-020: 로그인 (M/3)
- [ ] UFR-CORE-010: {제목} (S/2)
**총 Story Points**: 10
**예상 완료일**: {날짜}
### Sprint 2 (3-4주차)
**Sprint 목표**: {스프린트의 핵심 목표}
- [ ] UFR-CORE-020: {제목} (M/8)
- [ ] UFR-USER-030: {제목} (S/5)
**총 Story Points**: 13
**예상 완료일**: {날짜}
(이후 스프린트 계속)
## 비기능적 요구사항
### 성능 요구사항
- **페이지 로드 시간**: 3G 네트워크에서 3초 이내, WiFi에서 1초 이내
- **API 응답 시간**: 200ms 이내
- **동시 사용자 처리**: 1000명 이상
- **트랜잭션 처리량**: 초당 100건 이상
### 보안 요구사항
- **HTTPS 적용**: 모든 통신 암호화
- **인증/권한 관리**: JWT 또는 OAuth 기반
- **데이터 암호화**: 민감 데이터 암호화 저장
- **보안 감사**: 정기적인 보안 점검
### 사용성 요구사항
- **모바일 반응형**: 모든 기기에서 최적화된 화면
- **접근성**: WCAG 2.1 AA 이상 준수
- **다국어 지원**: 최소 2개 언어 지원
- **브라우저 호환성**: Chrome, Safari, Firefox, Edge 최신 2개 버전
### 확장성 요구사항
- **수평 확장**: 트래픽 증가 시 서버 추가 가능
- **클라우드 네이티브**: 클라우드 환경 최적화
- **마이크로서비스**: 서비스 독립 배포 가능
- **캐싱 전략**: Redis 기반 캐싱
## Definition of Done
각 스토리 완료 기준:
### 개발 완료
- [ ] 코드 작성 완료
- [ ] 코드 리뷰 완료 (최소 1명)
- [ ] 코딩 스타일 가이드 준수
- [ ] 기술 부채 최소화
### 테스트 완료
- [ ] 단위 테스트 작성 및 통과 (커버리지 80% 이상)
- [ ] 통합 테스트 통과
- [ ] E2E 테스트 통과 (주요 플로우)
- [ ] 성능 테스트 통과
### 문서화 완료
- [ ] 코드 주석 작성
- [ ] API 문서 업데이트
- [ ] 사용자 가이드 업데이트
- [ ] 변경 사항 로그 작성
### 배포 완료
- [ ] 스테이징 환경 배포
- [ ] QA 검증 완료
- [ ] 프로덕션 배포 승인
- [ ] 프로덕션 배포 완료
## 리스크 및 의존성
### 리스크 관리
| UFR ID | 리스크/이슈 | 영향도 | 발생 가능성 | 완화 전략 | 담당자 |
|----------|-----------|--------|-----------|----------|--------|
| UFR-USER-010 | {리스크 설명} | 높음 | 중간 | {완화 전략} | {담당자} |
| UFR-CORE-020 | {리스크 설명} | 중간 | 높음 | {완화 전략} | {담당자} |
### 의존성 관리
| UFR ID | 의존하는 스토리 | 의존성 타입 | 해결 방법 |
|----------|--------------|-----------|----------|
| UFR-CORE-020 | UFR-USER-010 | 기술적 의존성 | {해결 방법} |
| UFR-XXX-### | UFR-CORE-020 | 비즈니스 의존성 | {해결 방법} |
```
---
## 도구 활용
### Sequential MCP 사용
복잡한 유저스토리 분석과 우선순위 결정이 필요할 때 Sequential MCP를 활용하여 체계적으로 백로그를 구성하세요.
## 결과 파일
- **유저스토리.md**: `design/userstory.md`
## 주의사항
- **UFR 포맷 준수**: `UFR-{서비스}-{일련번호}` 형식 엄격히 사용
- **일련번호**: 각 서비스별로 '010'부터 시작하여 10씩 증가시킴
- **시나리오 구조 필수**: [입력 요구사항], [검증 요구사항], [처리 결과] 모두 작성
- **우선순위 표기**: M/S/C + Story Points (피보나치) 형식 사용
- **최소 20개 이상**: 충분한 UFR로 MVP 범위 정의
- **Event Storming 연계**: ES 결과를 UFR로 체계적 변환
- **마이크로서비스 구조**: 서비스별로 명확히 그룹화
- **기술 태스크**: 복잡한 스토리는 Frontend/Backend/Infrastructure 분리
- **INVEST 원칙**: 독립성, 협상가능성, 가치, 추정가능성, 작은 크기, 테스트가능성
- **비기능적 요구사항**: 성능, 보안, 사용성, 확장성 필수 포함
- **Definition of Done**: 모든 완료 기준 충족 필요
## 다음 단계
유저스토리 작성 완료 후:
1. UI/UX 디자인 (와이어프레임, 디자인 시스템)
2. 프로토타입 개발 (기술 스택, 구현)
3. 스프린트 실행 및 개발Related Skills
service-planning
비즈니스 도메인만 입력하면 MVP 정의부터 프로토타입까지 전체 서비스 기획 워크플로우를 자동으로 실행합니다. 17개의 전문화된 스킬을 순차적으로 orchestrate하여 완전한 기획 산출물을 생성합니다. (project)
프로토타입 개발 가이드
## 목적
uiux-design
유저스토리를 기반으로 사용자 인터페이스와 경험을 디자인할 때 상세한 UI/UX 디자인 명세를 작성합니다.
event-storming
Event Storming 기법을 사용하여 PlantUML 시퀀스 다이어그램을 작성하고 유저스토리 개발을 준비합니다. 기획 구체화 시 사용하세요.
presentation
비즈니스 모델을 기반으로 서비스 기획서 발표자료 스크립트를 작성합니다. 발표 자료 작성 시 사용하세요. (project)
business-modeling
Lean Canvas를 사용하여 포괄적인 비즈니스 모델을 설계합니다. 수익 흐름과 비즈니스 전략을 계획할 때 사용하세요.
solution-selection
생성된 아이디어를 평가하고 최적의 솔루션을 선택합니다. MVP 개발을 위한 기능 우선순위를 지정할 때 사용하세요.
ideation
브레인스토밍을 통해 창의적인 솔루션 아이디어를 생성합니다. 식별된 문제를 해결하기 위한 여러 접근 방식을 개발할 때 사용하세요.
direction-setting
킹핀 문제를 발견하고 문제해결 방향성을 Needs Statement로 정의합니다. 핵심 문제를 해결할 때 사용하세요.
problem-hypothesis
고객 여정 분석과 고객 경험 조사 데이터를 기반으로 핵심 문제 가설과 근본원인을 도출하고, 문제검증 인터뷰를 통해 문제가설을 검증 합니다. 그리고 비즈니스 가치를 도출합니다.
journey-mapping
모든 터치포인트에서 고객 경험을 시각화하고 분석하는 포괄적인 고객 여정 맵을 작성합니다.
customer-experience
인터뷰, 관찰, 제품 테스트를 통해 포괄적인 고객 경험 데이터를 생성합니다. 고객 여정 맵 작성 준비 시 사용하세요.