# 사용자 여정: 끝난 세션을 정리하기

## 0. 문서 정보

| 항목 | 내용 |
|---|---|
| 여정 식별자 | `JRN-session-deletion` |
| 여정명 | 끝난 세션을 정리하기 |
| 상태 | 초안 (v0.1) |
| 담당자 | 미지정 |
| 최종 수정일 | 2026-08-30 |
| 달성 가치 | V2 유휴 자원 회수 (부분 — 아래 참고) |
| 연결 문서 | PRD [`architecture`](../prd/architecture.md)(AC-A3) · [`state-api`](../prd/state-api.md)(AC-C1) · mockup 없음 ([매핑](../mockups/README.md)) |

> ⚠️ **신설 배경 (2026-08-30)**: 세션 삭제는 API·확인 다이얼로그·e2e 테스트까지 구현돼 있는데 여정 문서에 없었다.
> 커버리지 점검이 `가치 → 여정` 한 방향이라 **구현에는 있는데 여정에 없는** 흐름이 잡히지 않았다.
> 가치 연결도 부분적이다 — 삭제는 AC-A3(자원 회수)를 거쳐 V2에 닿지만, V2의 서술은 "유휴 세션의 자동 회수"라
> **사용자가 의도적으로 수명을 끝내는 행위**를 담지 못한다. [README 미해결 항목](./README.md#-열린-결정) 참고.

## 1. 서비스 개요 (참고)

[`JRN-session-creation`](./JRN-session-creation.md#1-서비스-개요-참고)과 동일. 가치 정의는 [`../values.md`](../values.md).

## 2. 여정 정의

**대상 사용자 (페르소나)**
P1 멀티세션 작업자 ([README](./README.md#p1-멀티세션-작업자)).

**진입 맥락**
세션 목록이 길어졌다. 끝난 작업, 잘못 만든 세션, 다시는 열지 않을 실험이 섞여 있다.

**트리거**
목록에서 필요한 세션을 찾기 어려워졌거나, 작업이 확실히 끝났다.

**사용자 목표**
안 쓰는 세션을 없애 목록을 깨끗하게 유지하는 것. 그러면서 **살아 있어야 할 세션을 실수로 지우지 않는 것**.

**완료 기준**
대상 세션이 목록에서 사라지고 pod·자원이 회수되며, 이후 그 세션에 접근하면 없음으로 응답된다.

## 3. 단계별 상세

> 단계 식별자는 순번이 아닌 슬러그다. 순서가 바뀌어도 식별자는 유지한다.

### `STP-delete-intent` 정리할 세션을 고른다

- **사용자 행동**: 목록을 훑어보며 지울 세션을 고른다. 이름·타입·마지막 활동으로 "이건 끝난 것"임을 판단한다.
- **터치포인트**: 세션 목록의 세션 카드와 삭제 메뉴 (mockup 없음 — [mockups README](../mockups/README.md))
- **생각·감정**: "이거 진짜 안 쓰는 거 맞나?" — 판단 근거가 부족하면 아무것도 못 지우고 목록만 계속 늘어난다.
- **페인포인트 / 이탈 위험**: 마지막 활동 시각이나 내용 미리보기가 없으면 이름만으로 판단해야 해서
  잘못 지우거나 아예 안 지운다 → 카드에 마지막 활동과 상태를 함께 노출하고,
  접어두기(`JRN-manual-freeze`)를 같은 자리에서 대안으로 제시한다.
- **관련 AC**: 전용 AC 없음 — 위 신설 배경 참고

### `STP-delete-confirm` 되돌릴 수 없음을 확인하고 지운다

- **사용자 행동**: 확인 대화상자에서 대상 세션의 이름을 확인하고, 되살릴 수 없다는 안내를 읽은 뒤 삭제를 확정한다.
  취소하면 아무 일도 일어나지 않는다.
- **터치포인트**: 삭제 확인 대화상자 — 대상 이름·"되살릴 수 없음" 안내·삭제/취소 (mockup 없음)
- **생각·감정**: "정말 지워도 되나?" — 이 순간 멈칫하는 것이 정상이고, 그 멈칫을 도와주는 게 이 단계의 일이다.
- **페인포인트 / 이탈 위험**: 확인 문구가 일반적이면("삭제하시겠습니까?") 대상을 확인하지 않고 누른다.
  삭제가 실패했는데 성공처럼 보이면 목록과 실제가 어긋난다
  → 대화상자에 대상 이름을 반드시 표시하고, 실패는 목록을 바꾸기 전에 오류로 드러낸다.
- **관련 AC**: AC-A3, AC-C1

### `STP-delete-settled` 사라진 것을 확인한다

- **사용자 행동**: 목록에서 그 세션이 사라진 것을 확인하고 하던 일로 돌아간다.
  뒤에서는 pod와 점유 자원이 회수되고 세션 기록이 제거된다.
- **터치포인트**: 삭제 완료 알림 · 갱신된 세션 목록
- **생각·감정**: "깔끔해졌다." — 지운 뒤에 다시 나타나는 일만 없으면 이 단계는 무감정하게 지나간다.
- **페인포인트 / 이탈 위험**: 지운 세션이 새로고침 후 되살아나 보이면 목록 전체를 믿지 못하게 된다
  → 삭제 확정 이후에는 없음이 정답이며, 진행 중이던 복원·동결이 세션을 되살리지 못하게 한다.
- **관련 AC**: AC-A3, AC-C1

## 4. 분기·예외 흐름

| 상황 | 처리 | 이어지는 단계 |
|---|---|---|
| 취소 | 아무 변경 없이 목록으로 복귀 | `STP-delete-intent` |
| 이미 삭제된 세션 | 없음(404)을 알리고 목록을 갱신 | `STP-delete-settled` |
| 삭제와 복원·동결이 동시에 발생 | 같은 잠금 아래 처리되어 삭제된 세션이 되살아나지 않는다 | `JRN-concurrent-access`의 `STP-collision` |
| 삭제 실패 | 목록을 바꾸지 않고 오류를 표시. 재시도 가능 | `STP-delete-confirm` |
| 지우기는 아깝고 자원만 아끼고 싶음 | 삭제 대신 접어두기 | `JRN-manual-freeze`의 `STP-freeze-now` |
| 접혀 있는 세션을 삭제 | 저장된 스냅샷까지 함께 정리된다는 점을 확인 문구에 포함 | `STP-delete-confirm` |

## 5. 측정 지표

| 지표 | 정의 | 목표 |
|---|---|---|
| 삭제 성공률 | 삭제 완료 수 / 삭제 확정 수 | TBD |
| 확인 단계 취소율 | 대화상자에서 취소한 수 / 대화상자 노출 수 | TBD (지나치게 높으면 진입 지점이 헷갈린다는 신호) |
| 삭제 후 즉시 재생성 | 삭제 후 30분 내 같은 이름·용도의 세션 생성 비율 | TBD (오삭제 신호) |
| 보유 세션 수 추이 | 사용자당 보유 세션 수 중앙값의 시간 추이 | TBD (정리가 실제로 일어나는가) |
| 삭제 후 잔존 자원 | 삭제 완료 후에도 남아 있는 pod 수 | TBD (0 유지) |

## 6. 변경 이력

| 버전 | 날짜 | 변경 내용 | 작성자 |
|---|---|---|---|
| v0.1 | 2026-08-30 | 최초 작성 — 구현·e2e에는 있으나 여정에 없던 세션 삭제 흐름을 문서화 | Claude |
