mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2025-12-06 16:06:24 +00:00
154 lines
7.9 KiB
Markdown
154 lines
7.9 KiB
Markdown
# 유저스토리 작성 방법
|
|
|
|
## 개요
|
|
이 가이드는 마이크로서비스 기반 시스템 개발을 위한 유저스토리 작성 표준을 제공합니다.
|
|
표준화된 형식을 통해 일관성 있고 완전한 요구사항을 정의할 수 있습니다.
|
|
|
|
## 작성 구성 요소
|
|
|
|
### 1. 서비스
|
|
마이크로서비스명을 명시합니다.
|
|
- **형식**: 서비스 도메인명
|
|
- **예시**: 홈페이지, 가입설계, 주문관리, 결제처리
|
|
|
|
### 2. ID
|
|
User Story ID로서 표준화된 식별자입니다.
|
|
- **형식**: `<유저스토리 유형 코드>-<서비스약어>-<일련번호>`
|
|
- 유저스토리 유형 코드
|
|
- UFR(User Functional Requirements): 사용자 기능 요구사항
|
|
- AFR(Admin Functional Requirements): 어드민 기능 요구사항
|
|
- NFR(Non Functiional Requirements): 비기능 요구사항(확장성, 회복성, 유연성, 성능, 보안, 운영성)
|
|
- 서비스약어: 3~4자로 작성
|
|
- 일련번호: 3자리로 하고 010부터 시작하여 10개씩 증가 예) UFR-HOME-010, UFR-HOME-020
|
|
- **예시**:
|
|
- `UFR-HOME-010`: 홈페이지 서비스의 첫 번째 유저스토리
|
|
- `UFR-PAY-020`: 결제 서비스의 다섯 번째 유저스토리
|
|
|
|
### 3. Epic
|
|
유저스토리의 상위 카테고리를 분류합니다.
|
|
- **용도**: 관련 유저스토리들을 그룹화
|
|
- **예시**: 사용자 관리, 상품 관리, 주문 처리
|
|
|
|
### 4. 유저스토리
|
|
표준 형식에 따라 작성합니다. 각 파트는 파이프로 구분합니다.
|
|
- **형식**: `[유저스토리 제목] <유저유형>으로서 | 나는, <비즈니스 목적>을 위해 | <작업/기능>을(를) 원합니다.`
|
|
- **예시**:
|
|
- [상품검색] 쇼핑몰 고객으로서 | 나는, 상품을 쉽게 찾기 위해 | 카테고리별 상품 검색 기능을 원합니다.
|
|
- [주문현황] 관리자로서 | 나는, 주문 상태를 파악하기 위해 | 실시간 주문 현황 대시보드를 원합니다.
|
|
|
|
중요) 유저유형은 사람 뿐 아니라 시스템, API 등으로 정의할 수도 있음
|
|
- 이벤트 스토밍은 사용자 중심으로 수행하기 위해 사람만 Actor로 허용
|
|
- 유저스토리는 충분한 요구사항 전달을 위해 사람이 아닌 유저유형도 허용함
|
|
|
|
### 5. Biz중요도 (MoSCoW 분류)
|
|
우선순위에 따른 분류입니다.
|
|
|
|
| 분류 | 의미 | 설명 |
|
|
|------|------|------|
|
|
| **M (Must)** | 반드시 필요 | 핵심 비즈니스 기능, 없으면 서비스 불가능 |
|
|
| **S (Should)** | 매우 필요하나 대체할 방법은 있음 | 중요하지만 우회 방법이 존재 |
|
|
| **C (Could)** | 있으면 좋으나 우선 순위는 떨어짐 (Nice to have) | 사용자 편의성 향상 기능 |
|
|
| **W (Won't)** | 가장 우선순위가 떨어지므로 보류해도 됨 | 향후 개발 고려 기능 |
|
|
|
|
### 6. 인수테스트 시나리오
|
|
기능 완성도를 검증하기 위한 테스트 시나리오입니다.
|
|
|
|
#### 시나리오명
|
|
- 테스트할 기능이나 상황을 명확히 표현
|
|
- **예시**: "정상적인 회원 가입 처리", "중복 이메일 가입 시도"
|
|
|
|
#### 인수기준 (Given-When-Then 형식)
|
|
- **형식**: `<Given> | <When> | <Then>`
|
|
- **Given (사전 조건/상황)**: 테스트 실행 전 준비사항
|
|
- **When (Action)**: 사용자가 수행하는 액션
|
|
- **Then (결과)**: 기대되는 결과 또는 시스템 반응
|
|
|
|
- **예시**
|
|
```
|
|
미 로그인 상태로 서비스에 접근하여 | ID와 암호를 입력하여 로그인 요청을 하면 | 대시보드 페이지가 표시된다.
|
|
```
|
|
|
|
#### 체크리스트
|
|
세부 테스트 항목을 최대한 자세히 작성합니다.
|
|
- 기능/비기능 요구사항 검증 항목
|
|
- 예외 상황 처리 검증
|
|
- 통합 테스트 항목
|
|
|
|
### 7. Score
|
|
구현 난이도를 피보나치 수열을 이용하여 표현합니다.
|
|
- **수열**: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...
|
|
- **기준**:
|
|
|
|
| 점수 | 난이도 | 설명 | 세부 기준 | 예시 |
|
|
|------|--------|------|-----------|------|
|
|
| **1-2** | **매우 간단** | 기본적인 CRUD 작업 | • 단일 파일 수정<br>• 간단한 설정 변경<br>• 단순 명령어 실행 | • README 작성<br>• 간단한 스크립트 실행<br>• 환경변수 설정 |
|
|
| **3-5** | **간단** | 기본 비즈니스 로직 포함 | • 여러 파일 수정<br>• 간단한 테스트 작성<br>• 기본 에러 처리 | • 설정 파일 파싱<br>• 간단한 데이터 변환<br>• 기본 유효성 검사 |
|
|
| **8-13** | **보통** | 복잡한 비즈니스 로직 | • API 연동<br>• 데이터베이스 처리<br>• 복잡한 알고리즘<br>• 외부 도구 통합 | • MCP 서버 연동<br>• 파일 시스템 조작<br>• CLI 인터페이스 개발 |
|
|
| **21-34** | **복잡** | 다중 시스템 연동 | • 여러 서비스 통합<br>• 복잡한 상태 관리<br>• 성능 최적화 필요<br>• 보안 고려사항 | • GitHub API 통합<br>• 실시간 모니터링<br>• 복잡한 워크플로우 |
|
|
| **55+** | **매우 복잡** | 새로운 기술/패러다임 | • 신규 아키텍처 설계<br>• 혁신적 기능 개발<br>• 대규모 리팩토링<br>• 연구개발 요소 | • 새로운 플러그인 아키텍처<br>• AI 모델 통합<br>• 분산 시스템 설계 |
|
|
|
|
## 결과 형식
|
|
- 코드블록 내에 작성함
|
|
- 구성
|
|
```
|
|
{서비스 일련번호}. {서비스명}
|
|
{Epic 일련번호}. {Epic}
|
|
{유저스토리 ID}: [{유저스토리 제목}]: {유저스토리}
|
|
- 시나리오: {시나리오}
|
|
{인수기준}
|
|
- {체크 리스트}
|
|
- {Biz중요도}/{Score}
|
|
```
|
|
작성예시
|
|
```
|
|
1. User 서비스
|
|
1) 사용자 인증 및 관리
|
|
RQ-USER-010: [회원가입] 사용자로서 | 나는, 여행 계획을 관리하기 위해 | 간편하게 회원가입하고 싶다.
|
|
- 시나리오: 회원가입
|
|
미 로그인 상태로 서비스에 접근한 상황에서 | 사용자 기본정보(이름, 이메일, 연락처), ID, 암호를 입력하여 회원가입 요청하면 | 회원가입이 된다.
|
|
- [ ] 이름, 이메일, 연락처 등록 체크
|
|
- [ ] ID는 5자 이상의 영숫자
|
|
- [ ] 암호는 8자 이상의 영숫자와 특수문자가 최소 1개 이상 포함
|
|
- M/5
|
|
```
|
|
|
|
## 추가 항목
|
|
추가 항목은 필요 시 추가 가능합니다.
|
|
예를 들어 '기술 태스크'와 같은 기술적 내용을 추가할 수 있습니다.
|
|
예시)
|
|
```
|
|
UFR-AI-010: [AI일정생성] 여행자로서 | 나는 맞춤형 여행 일정을 받기 위해 | AI가 내 여행 정보와 이동수단 선호도를 기반으로 최적화된 일정을 생성하기를 원한다.
|
|
- 시나리오: AI 일정 생성 결과 확인
|
|
여행 기본정보와 여행지를 설정하고 AI 일정 생성을 요청한 상황에서 | 5초 이내에 생성이 완료되면 | 선호 이동수단을 기반으로 한 시간대별 상세 일정이 생성되어 확인할 수 있다.
|
|
|
|
[생성 결과 검증]
|
|
- 모든 여행지에 대한 일정 존재
|
|
- 각 일자별 시작/종료 시간 일치
|
|
- ...
|
|
- M/8
|
|
- 기술 태스크
|
|
- AI 서비스 API 구현
|
|
- POST /ai/schedules/generate (일정 생성 요청)
|
|
- GET /ai/schedules/{id}/status (진행 상태 조회)
|
|
- GET /ai/schedules/{id} (생성된 일정 조회)
|
|
- AI 모델 통합
|
|
- Claude API 연동
|
|
- 프롬프트 엔지니어링
|
|
- 응답 파싱 및 구조화
|
|
```
|
|
|
|
## 참고 자료
|
|
- [유저스토리 작성 샘플](https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/samples/Userstory.pdf)
|
|
|
|
## 결과 파일
|
|
작성된 유저스토리는 다음 위치에 저장됩니다:
|
|
- **파일 경로**: `design/Userstory.md`
|
|
- **형식**: 마크다운 형식으로 모든 유저스토리를 포함
|
|
|
|
## 작성 시 주의사항
|
|
|
|
1. **명확성**: 모호한 표현 대신 구체적이고 측정 가능한 표현 사용
|
|
2. **완전성**: 모든 필수 구성 요소를 빠짐없이 작성
|
|
3. **추적성**: ID를 통해 설계 문서와 연결 가능하도록 작성
|
|
4. **테스트 가능성**: 인수테스트 시나리오가 실제 테스트로 실행 가능하도록 구체적으로 작성
|
|
5. **우선순위**: MoSCoW 분류를 통해 개발 우선순위 명확화 |