유저스토리 작성
목적
선정된 솔루션과 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
유저스토리 프레임워크
1. 마이크로서비스 기반 구조
유저스토리는 마이크로서비스 단위로 구성합니다:
서비스 조직 예시
- 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)
- [UFR-XXX-###] - [스토리 제목]
Should Have (P1)
- [UFR-XXX-###] - [스토리 제목]
Could Have (P2)
- [UFR-XXX-###] - [스토리 제목]
Won't Have (이번 버전에서는)
- [UFR-XXX-###] - [스토리 제목]
8. 스프린트 계획 (MVP 기준)
Sprint 1 (1-2주차)
[이후 스프린트 계속]
9. 비기능적 요구사항
성능
- 페이지 로드: 3G에서 <3초, WiFi에서 <1초
- API 응답: <200ms
- 동시 사용자: 1000명
보안
- HTTPS 적용
- 인증/권한 관리
- 데이터 암호화
사용성
- 모바일 반응형
- WCAG 2.1 접근성 준수
- 다국어 지원
확장성
- 수평 확장 가능
- 클라우드 네이티브
- 마이크로서비스 아키텍처
10. Definition of Done
체크리스트:
11. 리스크 및 의존성
| UFR ID |
리스크/이슈 |
영향도 |
완화 전략 |
| UFR-XXX-### |
[리스크] |
높음 |
[전략] |
INVEST 원칙
유저스토리는 반드시 INVEST를 따라야 함:
- Independent (독립적): 독립적으로 개발 가능
- Negotiable (협상 가능): 세부사항 논의 가능
- Valuable (가치 있음): 사용자에게 가치 제공
- Estimable (추정 가능): 추정 가능
- Small (작음): 한 스프린트 내 완료 가능
- Testable (테스트 가능): 명확한 인수 기준
작성 형식
# 유저스토리
## 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 | 비즈니스 의존성 | {해결 방법} |
중요 가이드라인
- UFR 포맷 사용:
UFR-{서비스}-{번호} 형식으로 모든 스토리 작성
- 시나리오 기반 작성: [입력 요구사항], [검증 요구사항], [처리 결과] 구조 필수
- 우선순위 표기: M/S/C + Story Points 형식 사용
- 마이크로서비스 조직: 서비스별로 스토리 그룹화
- Event Storming 활용: Event Storming 결과를 UFR로 변환
- 기술 태스크 분리: 복잡한 스토리는 Frontend/Backend/Infrastructure 태스크 명시
- 최소 20개 이상: 충분한 스토리로 MVP 범위 정의
- 독립성 보장: 각 UFR은 독립적으로 개발 및 배포 가능
- 상세한 요구사항: 입력/검증/처리 결과를 명확히 문서화
- 샘플 참고:
reference/sample_유저스토리.md의 형식 준수
Event Storming 매핑 가이드
Bounded Context → 마이크로서비스
- Event Storming의 각 Bounded Context를 마이크로서비스로 변환
- 예시: "사용자 관리" → User Service, "주문 처리" → Order Service
User Flow → UFR 그룹
- Event Storming의 User Flow를 UFR 번호 그룹으로 변환
- 예시: "회원가입 플로우" → UFR-USER-010~020
Sequence Diagram → UFR 시나리오
- 각 시퀀스 다이어그램을 UFR의 시나리오로 변환
- 다이어그램의 각 단계가 [입력/검증/처리 결과]로 구조화됨
Policy/Rule → 검증 요구사항
- Event Storming의 Policy와 Rule을 [검증 요구사항]으로 변환
- 비즈니스 규칙을 명확한 검증 조건으로 작성
Domain Event → UFR
- 중요한 Domain Event를 UFR로 변환
- 예시: "주문 완료됨" → UFR-ORDER-030: 주문 완료 알림 수신
도구 활용
Sequential MCP 사용
복잡한 유저스토리 분석과 우선순위 결정이 필요할 때 Sequential MCP를 활용하여 체계적으로 백로그를 구성하세요.
결과 파일
- 유저스토리.md:
design/userstory.md
주의사항
- UFR 포맷 준수:
UFR-{서비스}-{번호} 형식 엄격히 사용
- 시나리오 구조 필수: [입력 요구사항], [검증 요구사항], [처리 결과] 모두 작성
- 우선순위 표기: M/S/C + Story Points (피보나치) 형식 사용
- 최소 20개 이상: 충분한 UFR로 MVP 범위 정의
- Event Storming 연계: ES 결과를 UFR로 체계적 변환
- 마이크로서비스 구조: 서비스별로 명확히 그룹화
- 기술 태스크: 복잡한 스토리는 Frontend/Backend/Infrastructure 분리
- 샘플 참조:
reference/sample_유저스토리.md 형식 참고
- INVEST 원칙: 독립성, 협상가능성, 가치, 추정가능성, 작은 크기, 테스트가능성
- 비기능적 요구사항: 성능, 보안, 사용성, 확장성 필수 포함
- Definition of Done: 모든 완료 기준 충족 필요
다음 단계
유저스토리 작성 완료 후:
- UI/UX 디자인 (와이어프레임, 디자인 시스템)
- 프로토타입 개발 (기술 스택, 구현)
- 스프린트 실행 및 개발
1---2name: user-stories-53description: 사용자 관점에서 제품 요구사항을 정의할 때 INVEST 원칙을 따르는 포괄적인 유저스토리를 작성합니다.4---56# 유저스토리 작성78## 목적910선정된 솔루션과 Event Storming 결과를 기반으로 체계적인 유저스토리를 작성합니다.1112## 사용 시점1314- Event Storming이 완료된 후15- UI/UX 디자인 전16- 개발 우선순위를 정의해야 할 때17- 사용자가 "유저스토리", "User Story", "백로그"를 언급할 때1819## 필수 입력20- 선정된 솔루션: `think/핵심솔루션.md` (solution-selection 결과)21- 타겟 고객 정의: `define/고객분석.md` (customer-analysis 결과)22- Event Storming 결과 (event-storming 결과):23 - `think/es/userflow.puml`24 - `think/es/{순번}-{유저플로우명}.puml`25- 유저스토리 샘플 참고: `reference/sample_유저스토리.md`2627## 유저스토리 프레임워크2829### 1. 마이크로서비스 기반 구조3031유저스토리는 마이크로서비스 단위로 구성합니다:3233#### 서비스 조직 예시34- **User Service**: 사용자 관리 (회원가입, 로그인, 프로필)35- **[Core] Service**: 핵심 비즈니스 기능36- **[AI] Service**: AI 기반 기능37- **[Integration] Service**: 외부 연동 기능3839### 2. UFR (User Functional Requirement) 포맷4041각 유저스토리는 다음 형식을 따릅니다:4243#### UFR-{서비스}-{번호}: [{기능}] 사용자로서 | 나는 {목적}을 위해 | {액션}을 하고 싶다.4445**예시**:46- `UFR-USER-010: [회원가입] 사용자로서 | 나는 서비스를 이용하기 위해 | 간편하게 회원가입하고 싶다.`47- `UFR-CORE-020: [주문하기] 사용자로서 | 나는 상품을 구매하기 위해 | 쉽게 주문하고 싶다.`4849### 3. 시나리오 기반 상세 요구사항5051각 UFR은 다음 구조로 상세화합니다:5253#### - 시나리오: {시나리오명}54{상황 설명} | {조건} | {결과}5556**[입력 요구사항]**57- 기본 정보58 - {필드명}: {검증 조건}59 - {필드명}: {검증 조건}60- 추가 정보61 - {필드명}: {검증 조건}6263**[검증 요구사항]**64- {검증 항목}: {검증 내용}65- {검증 항목}: {검증 내용}6667**[처리 결과]**68- 성공 시69 - {결과 항목}70 - {결과 항목}71- 실패 시72 - {실패 조건}: {처리 방법}7374#### - M/{포인트}, S/{포인트}, C/{포인트}7576**우선순위 표기법**:77- **M** (Must Have): 필수 구현 기능78- **S** (Should Have): 중요 구현 기능79- **C** (Could Have): 선택 구현 기능80- **숫자**: Story Points (피보나치: 1, 2, 3, 5, 8, 13, 21)8182**예시**: `M/13` → Must Have, 13 포인트8384### 4. 기술 태스크 (복잡한 스토리)8586복잡한 구현이 필요한 스토리는 기술 태스크를 분리합니다:8788#### [기술 태스크]89- **Frontend**90 - {구현 내용}91 - {구현 내용}92- **Backend**93 - API Endpoint: {엔드포인트}94 - Service Layer: {서비스 로직}95 - Repository: {데이터 접근}96- **Infrastructure**97 - {인프라 요구사항}9899### 5. 사용자 역할100101각 역할 정의:102- **설명**103- **권한**104- **목표**105106### 6. Feature Story Map107108계층 구조 생성:109```110User Service111├── UFR-USER-010: 회원가입112├── UFR-USER-020: 로그인113└── UFR-USER-030: 프로필 관리114115Core Service116├── UFR-CORE-010: [기능 1]117├── UFR-CORE-020: [기능 2]118└── UFR-CORE-030: [기능 3]119```120121### 7. 우선순위 매트릭스122123#### Must Have (P0)1241. [UFR-XXX-###] - [스토리 제목]125126#### Should Have (P1)1271. [UFR-XXX-###] - [스토리 제목]128129#### Could Have (P2)1301. [UFR-XXX-###] - [스토리 제목]131132#### Won't Have (이번 버전에서는)1331. [UFR-XXX-###] - [스토리 제목]134135### 8. 스프린트 계획 (MVP 기준)136137#### Sprint 1 (1-2주차)138- [ ] UFR-USER-010: [제목] (M/5)139- [ ] UFR-CORE-020: [제목] (M/3)140- **Sprint 목표**: [스프린트 목표]141- **총 SP**: 8142143[이후 스프린트 계속]144145### 9. 비기능적 요구사항146147#### 성능148- 페이지 로드: 3G에서 <3초, WiFi에서 <1초149- API 응답: <200ms150- 동시 사용자: 1000명151152#### 보안153- HTTPS 적용154- 인증/권한 관리155- 데이터 암호화156157#### 사용성158- 모바일 반응형159- WCAG 2.1 접근성 준수160- 다국어 지원161162#### 확장성163- 수평 확장 가능164- 클라우드 네이티브165- 마이크로서비스 아키텍처166167### 10. Definition of Done168169체크리스트:170- [ ] 코드 리뷰 완료171- [ ] 단위 테스트 작성 및 통과172- [ ] 통합 테스트 통과173- [ ] 문서화 완료174- [ ] QA 테스트 통과175- [ ] 스테이징 배포 및 검증176- [ ] 프로덕션 배포177178### 11. 리스크 및 의존성179180| UFR ID | 리스크/이슈 | 영향도 | 완화 전략 |181|----------|-----------|--------|----------|182| UFR-XXX-### | [리스크] | 높음 | [전략] |183184## INVEST 원칙185186유저스토리는 반드시 INVEST를 따라야 함:187- **I**ndependent (독립적): 독립적으로 개발 가능188- **N**egotiable (협상 가능): 세부사항 논의 가능189- **V**aluable (가치 있음): 사용자에게 가치 제공190- **E**stimable (추정 가능): 추정 가능191- **S**mall (작음): 한 스프린트 내 완료 가능192- **T**estable (테스트 가능): 명확한 인수 기준193194## 작성 형식195196```markdown197# 유저스토리198199## User Service200201### UFR-USER-010: [회원가입] 사용자로서 | 나는 서비스를 이용하기 위해 | 간편하게 회원가입하고 싶다.202203- 시나리오: 신규 회원가입204 미로그인 상태에서 회원가입 화면에 접근한 상황에서 | 필수 정보를 모두 입력하고 회원가입 버튼을 클릭하면 | 가입이 완료되고 로그인 화면으로 이동한다.205206 [입력 요구사항]207 - 기본 정보208 - 이름: 2자 이상 (한글/영문)209 - 이메일: 유효한 이메일 형식210 - 비밀번호: 8자 이상, 영문+숫자+특수문자211 - 추가 정보212 - 닉네임: 2-10자 (선택)213 - 프로필 이미지: JPG/PNG, 최대 5MB (선택)214215 [검증 요구사항]216 - 이메일 중복 확인: 기존 회원과 중복 불가217 - 비밀번호 강도: 보안 정책 준수218 - 필수 입력: 이름, 이메일, 비밀번호219220 [처리 결과]221 - 성공 시222 - 회원 정보 DB 저장223 - 환영 이메일 발송224 - 로그인 화면으로 리디렉션225 - 실패 시226 - 이메일 중복: "이미 사용 중인 이메일입니다" 메시지227 - 유효성 오류: 해당 필드에 오류 메시지 표시228229- M/13230231---232233(다음 스토리 반복)234235## 사용자 역할236237### 역할 1: {역할명}238- **설명**: {역할 설명}239- **권한**: {권한 목록}240- **목표**: {역할의 주요 목표}241242### 역할 2: {역할명}243- **설명**: {역할 설명}244- **권한**: {권한 목록}245- **목표**: {역할의 주요 목표}246247## Feature Story Map248249\```250User Service251├── UFR-USER-010: 회원가입252├── UFR-USER-020: 로그인253└── UFR-USER-030: 프로필 관리254255Core Service256├── UFR-CORE-010: {스토리 제목}257├── UFR-CORE-020: {스토리 제목}258└── UFR-CORE-030: {스토리 제목}259\```260261## 우선순위 매트릭스262263### Must Have (P0) - 필수2641. UFR-USER-010: 회원가입 - 서비스 이용을 위한 필수 기능2652. UFR-CORE-020: {제목} - {설명}266267### Should Have (P1) - 중요2681. UFR-USER-030: {제목} - {설명}2692. UFR-CORE-030: {제목} - {설명}270271### Could Have (P2) - 선택2721. UFR-XXX-###: {제목} - {설명}273274### Won't Have - 향후 고려2751. UFR-XXX-###: {제목} - {설명}276277## 스프린트 계획 (MVP 기준)278279### Sprint 1 (1-2주차)280**Sprint 목표**: {스프린트의 핵심 목표}281282- [ ] UFR-USER-010: 회원가입 (M/5)283- [ ] UFR-USER-020: 로그인 (M/3)284- [ ] UFR-CORE-010: {제목} (S/2)285286**총 Story Points**: 10287**예상 완료일**: {날짜}288289### Sprint 2 (3-4주차)290**Sprint 목표**: {스프린트의 핵심 목표}291292- [ ] UFR-CORE-020: {제목} (M/8)293- [ ] UFR-USER-030: {제목} (S/5)294295**총 Story Points**: 13296**예상 완료일**: {날짜}297298(이후 스프린트 계속)299300## 비기능적 요구사항301302### 성능 요구사항303- **페이지 로드 시간**: 3G 네트워크에서 3초 이내, WiFi에서 1초 이내304- **API 응답 시간**: 200ms 이내305- **동시 사용자 처리**: 1000명 이상306- **트랜잭션 처리량**: 초당 100건 이상307308### 보안 요구사항309- **HTTPS 적용**: 모든 통신 암호화310- **인증/권한 관리**: JWT 또는 OAuth 기반311- **데이터 암호화**: 민감 데이터 암호화 저장312- **보안 감사**: 정기적인 보안 점검313314### 사용성 요구사항315- **모바일 반응형**: 모든 기기에서 최적화된 화면316- **접근성**: WCAG 2.1 AA 이상 준수317- **다국어 지원**: 최소 2개 언어 지원318- **브라우저 호환성**: Chrome, Safari, Firefox, Edge 최신 2개 버전319320### 확장성 요구사항321- **수평 확장**: 트래픽 증가 시 서버 추가 가능322- **클라우드 네이티브**: 클라우드 환경 최적화323- **마이크로서비스**: 서비스 독립 배포 가능324- **캐싱 전략**: Redis 기반 캐싱325326## Definition of Done327328각 스토리 완료 기준:329330### 개발 완료331- [ ] 코드 작성 완료332- [ ] 코드 리뷰 완료 (최소 1명)333- [ ] 코딩 스타일 가이드 준수334- [ ] 기술 부채 최소화335336### 테스트 완료337- [ ] 단위 테스트 작성 및 통과 (커버리지 80% 이상)338- [ ] 통합 테스트 통과339- [ ] E2E 테스트 통과 (주요 플로우)340- [ ] 성능 테스트 통과341342### 문서화 완료343- [ ] 코드 주석 작성344- [ ] API 문서 업데이트345- [ ] 사용자 가이드 업데이트346- [ ] 변경 사항 로그 작성347348### 배포 완료349- [ ] 스테이징 환경 배포350- [ ] QA 검증 완료351- [ ] 프로덕션 배포 승인352- [ ] 프로덕션 배포 완료353354## 리스크 및 의존성355356### 리스크 관리357358| UFR ID | 리스크/이슈 | 영향도 | 발생 가능성 | 완화 전략 | 담당자 |359|----------|-----------|--------|-----------|----------|--------|360| UFR-USER-010 | {리스크 설명} | 높음 | 중간 | {완화 전략} | {담당자} |361| UFR-CORE-020 | {리스크 설명} | 중간 | 높음 | {완화 전략} | {담당자} |362363### 의존성 관리364365| UFR ID | 의존하는 스토리 | 의존성 타입 | 해결 방법 |366|----------|--------------|-----------|----------|367| UFR-CORE-020 | UFR-USER-010 | 기술적 의존성 | {해결 방법} |368| UFR-XXX-### | UFR-CORE-020 | 비즈니스 의존성 | {해결 방법} |369```370371## 중요 가이드라인372373- **UFR 포맷 사용**: `UFR-{서비스}-{번호}` 형식으로 모든 스토리 작성374- **시나리오 기반 작성**: [입력 요구사항], [검증 요구사항], [처리 결과] 구조 필수375- **우선순위 표기**: M/S/C + Story Points 형식 사용376- **마이크로서비스 조직**: 서비스별로 스토리 그룹화377- **Event Storming 활용**: Event Storming 결과를 UFR로 변환378- **기술 태스크 분리**: 복잡한 스토리는 Frontend/Backend/Infrastructure 태스크 명시379- **최소 20개 이상**: 충분한 스토리로 MVP 범위 정의380- **독립성 보장**: 각 UFR은 독립적으로 개발 및 배포 가능381- **상세한 요구사항**: 입력/검증/처리 결과를 명확히 문서화382- **샘플 참고**: `reference/sample_유저스토리.md`의 형식 준수383384## Event Storming 매핑 가이드385386### Bounded Context → 마이크로서비스387- Event Storming의 각 Bounded Context를 마이크로서비스로 변환388- 예시: "사용자 관리" → User Service, "주문 처리" → Order Service389390### User Flow → UFR 그룹391- Event Storming의 User Flow를 UFR 번호 그룹으로 변환392- 예시: "회원가입 플로우" → UFR-USER-010~020393394### Sequence Diagram → UFR 시나리오395- 각 시퀀스 다이어그램을 UFR의 시나리오로 변환396- 다이어그램의 각 단계가 [입력/검증/처리 결과]로 구조화됨397398### Policy/Rule → 검증 요구사항399- Event Storming의 Policy와 Rule을 [검증 요구사항]으로 변환400- 비즈니스 규칙을 명확한 검증 조건으로 작성401402### Domain Event → UFR403- 중요한 Domain Event를 UFR로 변환404- 예시: "주문 완료됨" → UFR-ORDER-030: 주문 완료 알림 수신405406## 도구 활용407408### Sequential MCP 사용409복잡한 유저스토리 분석과 우선순위 결정이 필요할 때 Sequential MCP를 활용하여 체계적으로 백로그를 구성하세요.410411## 결과 파일412413- **유저스토리.md**: `design/userstory.md`414415## 주의사항416417- **UFR 포맷 준수**: `UFR-{서비스}-{번호}` 형식 엄격히 사용418- **시나리오 구조 필수**: [입력 요구사항], [검증 요구사항], [처리 결과] 모두 작성419- **우선순위 표기**: M/S/C + Story Points (피보나치) 형식 사용420- **최소 20개 이상**: 충분한 UFR로 MVP 범위 정의421- **Event Storming 연계**: ES 결과를 UFR로 체계적 변환422- **마이크로서비스 구조**: 서비스별로 명확히 그룹화423- **기술 태스크**: 복잡한 스토리는 Frontend/Backend/Infrastructure 분리424- **샘플 참조**: `reference/sample_유저스토리.md` 형식 참고425- **INVEST 원칙**: 독립성, 협상가능성, 가치, 추정가능성, 작은 크기, 테스트가능성426- **비기능적 요구사항**: 성능, 보안, 사용성, 확장성 필수 포함427- **Definition of Done**: 모든 완료 기준 충족 필요428429## 다음 단계430431유저스토리 작성 완료 후:4321. UI/UX 디자인 (와이어프레임, 디자인 시스템)4332. 프로토타입 개발 (기술 스택, 구현)4343. 스프린트 실행 및 개발