---
name: save-scenario
triggers:
  - "save scenario"
description: "사용자 대화에서 도출된 시나리오/요구사항을 체계적으로 마크다운 파일로 저장한다."
argument-hint: "[scenario_name] - 시나리오 이름 (선택)"
disable-model-invocation: false
user-invocable: true
allowed-tools:
  - Read
  - Glob
  - Grep
  - Edit
  - Write
  - Bash
model: claude-sonnet-4-6[1m]
context: 대화 컨텍스트에서 시나리오, 요구사항, 결정사항을 추출하여 아카이브
agent: 시나리오 분석가 - 대화에서 핵심 요구사항과 결정사항을 추출하고 문서화
hooks:
  pre_execution: []
  post_execution: []
category: 워크플로우
skill-type: Atomic
references: []
referenced-by:
  - "@skills/brainstorming/SKILL.md"
  - "@skills/prd-workflow/SKILL.md"
  - "@skills/project-init-with-scenarios/SKILL.md"

---
# 시나리오 저장 스킬

## 목적

사용자와의 대화에서 도출된 시나리오, 요구사항, 결정사항을 체계적으로 마크다운 파일로 저장합니다. 이를 통해 프로젝트의 요구사항 이력을 추적하고, 다른 문서와의 연결성을 유지합니다.

## 지침

### 1. 시나리오 추출

현재 대화에서 다음 요소를 식별합니다:

- **요구사항**: 사용자가 원하는 기능이나 결과
- **결정사항**: 대화 중 합의된 기술적/비즈니스적 결정
- **제약조건**: 구현 시 고려해야 할 제한사항
- **관련 문서**: 참조해야 할 기존 문서나 코드

### 2. 저장 위치

시나리오 파일은 다음 경로에 저장합니다:

```
docs/references/scenarios/YYYY-MM-DD_{scenario_name}.md
```

- `YYYY-MM-DD`: 현재 날짜
- `scenario_name`: 사용자 제공 또는 대화 내용에서 추론

### 3. 파일 생성 절차

1. 대화 컨텍스트 분석
2. 핵심 요소 추출 (요약, 상세, 결정사항)
3. 관련 문서 링크 식별
4. 템플릿에 맞춰 마크다운 생성
5. `docs/references/scenarios/` 디렉토리 확인 (없으면 생성)
6. 파일 저장
7. 저장 완료 메시지 출력

---

## AskUserQuestion 활용 지점

### 지점 1: 시나리오 카테고리 분류

**시점**: 시나리오 저장 전 카테고리 결정

```yaml
AskUserQuestion:
  questions:
    - question: "이 시나리오의 카테고리를 선택해주세요"
      header: "카테고리"
      multiSelect: false
      options:
        - label: "Feature - 기능 요구사항 (권장)"
          description: "사용자 기능, UI/UX 요구사항"
        - label: "Technical - 기술 결정"
          description: "기술 스택, 아키텍처 선택"
        - label: "Business - 비즈니스 요구사항"
          description: "비즈니스 목표, KPI, 제약조건"
        - label: "Integration - 통합 시나리오"
          description: "외부 시스템 연동, API 통합"
```

### 지점 2: 상태 설정

**시점**: 시나리오 저장 시 초기 상태 결정

```yaml
AskUserQuestion:
  questions:
    - question: "시나리오의 초기 상태를 설정해주세요"
      header: "상태"
      multiSelect: false
      options:
        - label: "Draft - 초안 (권장)"
          description: "검토 필요 | 변경 가능 | 미확정"
        - label: "Reviewed - 검토 완료"
          description: "검토 완료 | 승인 대기"
        - label: "Approved - 승인됨"
          description: "구현 진행 가능 | 확정"
```

## 템플릿

```markdown
# {시나리오 제목}

## 메타데이터

| 항목 | 내용 |
|------|------|
| 날짜 | YYYY-MM-DD |
| 작성자 | Claude Code |
| 상태 | Draft / Reviewed / Approved |

## Summary

{1-3문장으로 시나리오 핵심 요약}

## Details

### 배경

{시나리오가 도출된 맥락 설명}

### 요구사항

1. {요구사항 1}
2. {요구사항 2}
3. ...

### 제약조건

- {제약조건 1}
- {제약조건 2}

## Decisions

결정된 사항들을 체크리스트로 관리합니다.

- [ ] {결정사항 1}
- [ ] {결정사항 2}
- [ ] {결정사항 3}

## Related Documents

### Upstream (이 시나리오의 근거)

- {상위 문서 링크 1}
- {상위 문서 링크 2}

### Downstream (이 시나리오가 영향을 주는 문서)

- {하위 문서 링크 1}
- {하위 문서 링크 2}

## Notes

{추가 메모, 향후 고려사항}

---

*Generated by save-scenario skill*
```

## 예제

### 예제 1: 기본 사용

**입력**: `/save-scenario 로그인-기능-요구사항`

**대화 컨텍스트**:
> 사용자: 로그인 기능에 OAuth 지원이 필요해요. Google과 GitHub 로그인을 지원해야 합니다.
> Claude: 네, OAuth 2.0 기반으로 구현하겠습니다. 세션 관리는 JWT를 사용할까요?
> 사용자: 네, JWT로 해주세요. 토큰 만료 시간은 24시간으로요.

**출력 파일**: `docs/references/scenarios/2026-01-21_로그인-기능-요구사항.md`

```markdown
# 로그인 기능 요구사항

## 메타데이터

| 항목 | 내용 |
|------|------|
| 날짜 | 2026-01-21 |
| 작성자 | Claude Code |
| 상태 | Draft |

## Summary

OAuth 2.0 기반의 소셜 로그인 기능 구현. Google과 GitHub 로그인을 지원하며, JWT를 통한 세션 관리를 수행.

## Details

### 배경

사용자 인증 시스템 구축을 위해 소셜 로그인 기능이 필요함.

### 요구사항

1. OAuth 2.0 기반 인증 구현
2. Google 로그인 지원
3. GitHub 로그인 지원
4. JWT 기반 세션 관리

### 제약조건

- 토큰 만료 시간: 24시간

## Decisions

- [x] 인증 프로토콜: OAuth 2.0
- [x] 세션 관리: JWT
- [x] 토큰 만료: 24시간
- [ ] 리프레시 토큰 정책 (미정)

## Related Documents

### Upstream

- tasks/requirements.md#인증

### Downstream

- src/auth/oauth.py (구현 예정)
- docs/architecture/auth-flow.md (작성 예정)

## Notes

- 리프레시 토큰 정책은 추후 논의 필요
- PKCE 적용 여부 검토 필요

---

*Generated by save-scenario skill*
```

### 예제 2: 시나리오 이름 자동 추론

**입력**: `/save-scenario`

대화 내용에서 핵심 키워드를 추출하여 자동으로 파일명을 생성합니다.

**대화 컨텍스트**:
> 사용자: 대시보드에 실시간 차트가 필요해요. WebSocket으로 데이터를 받아서 Chart.js로 렌더링하면 될 것 같아요.

**출력 파일**: `docs/references/scenarios/2026-01-21_실시간-대시보드-차트.md`

### 예제 3: 기술 결정 시나리오

**입력**: `/save-scenario 데이터베이스-선택`

**대화 컨텍스트**:
> 사용자: PostgreSQL과 MongoDB 중에서 고민 중이에요.
> Claude: 관계형 데이터가 많고 트랜잭션이 중요하다면 PostgreSQL을 추천합니다.
> 사용자: 맞아요, 트랜잭션이 중요해요. PostgreSQL로 하겠습니다.

**출력 파일**: `docs/references/scenarios/2026-01-21_데이터베이스-선택.md`

```markdown
# 데이터베이스 선택

## 메타데이터

| 항목 | 내용 |
|------|------|
| 날짜 | 2026-01-21 |
| 작성자 | Claude Code |
| 상태 | Draft |

## Summary

프로젝트 메인 데이터베이스로 PostgreSQL 선택. 트랜잭션 지원과 관계형 데이터 처리 요구사항 충족.

## Details

### 배경

프로젝트 데이터베이스 선택을 위한 기술 검토 진행.

### 요구사항

1. 트랜잭션 지원 필수
2. 관계형 데이터 처리
3. 안정성과 성숙도

### 제약조건

- 클라우드 환경 호환성 필요

## Decisions

- [x] 메인 DB: PostgreSQL
- [ ] ORM 선택 (미정)
- [ ] 마이그레이션 도구 (미정)

## Related Documents

### Upstream

- 초기 기술 스택 논의

### Downstream

- docs/adr/ADR-001-database-selection.md (작성 예정)
- config/database.yaml (설정 예정)

## Notes

- MongoDB는 로그 저장용으로 추후 검토 가능
- ADR 문서로 결정 이력 공식화 필요

---

*Generated by save-scenario skill*
```

## 연관 스킬

| 스킬 | 관계 | 설명 |
|------|------|------|
| [@skills/prd-workflow/SKILL.md] | 호출처 | PRD 워크플로우에서 호출 |
| [@skills/sync-docs/SKILL.md] | 후속 | 저장된 시나리오를 기반으로 관련 문서 업데이트 |
| [@skills/doc-prd/SKILL.md] | 후속 | 시나리오들을 종합하여 PRD 문서 생성 |
| [@skills/doc-adr/SKILL.md] | 후속 | 기술 결정 시나리오를 ADR로 공식화 |

## Changelog

| 날짜 | 버전 | 변경 내용 |
|------|------|----------|
| 2026-01-21 | 1.1.1 | 관련 스킬 섹션 추가 (prd-workflow 역참조) |
| 2026-01-21 | 1.1.0 | 전체 한국어화 (Instructions → 지침) |
| 2026-01-21 | 1.0.0 | 초기 생성 |
