explain · git:20260426.0a920f9 · 2026-04-26 · sha256 9642032388e682e2

explain git:20260426.0a920f9A

Immutable. This exact content is served forever at /api/v1/blob/9642032388e682e2.

---
name: explain
description: 코드를 비유 기반으로 설명하고 Mermaid 다이어그램을 생성합니다. 파일 단위 또는 기능 단위 설명 지원. /explain @file.ts 또는 /explain "로그인 기능"으로 호출.
---

# Explain (Learning Harness)

코드를 읽고 비유 기반 3단계 설명 + Mermaid 다이어그램을 생성합니다.

## 입력 판단

### 파일 단위
`@file` 경로가 제공된 경우. 해당 파일의 핵심 로직을 설명.

```
/explain @src/auth/login.ts
```

### 기능 단위
텍스트로 기능명이 제공된 경우. 코드베이스를 탐색하여 관련 파일들을 찾고 흐름을 설명.

```
/explain "로그인 기능"
/explain "결제 흐름"
```

기능 단위인 경우 Task(subagent_type="Explore")로 관련 파일을 먼저 탐색.

## 설명 프로세스

### 1. 코드 분석

파일 단위: 대상 파일을 읽고 구조 파악.
기능 단위: Explore 서브에이전트로 관련 파일 탐색 → 핵심 파일들을 읽고 흐름 파악.

### 2. 3단계 설명 작성

#### A. 한 줄 요약
이 코드가 하는 일을 한 문장으로.

```markdown
## 한 줄 요약
이 파일은 사용자 인증 토큰을 발급하고 갱신하는 서비스입니다.
```

#### B. 실제 비유
비개발자도 이해할 수 있는 현실 세계 비유로 설명.

```markdown
## 비유로 이해하기
호텔 체크인 데스크와 같습니다:
- **로그인** = 신분증(ID/PW)을 보여주고 룸키(토큰)를 받는 것
- **토큰 갱신** = 룸키 유효기간이 지나서 프론트에서 새 키를 받는 것
- **로그아웃** = 체크아웃하면서 룸키를 반납하는 것
```

비유 작성 규칙:
- 일상에서 누구나 아는 상황 사용 (호텔, 도서관, 우체국 등)
- 코드의 각 핵심 요소를 비유의 요소에 1:1 매핑
- 비유가 깨지는 부분이 있으면 솔직히 "여기서 비유는 한계가 있습니다" 명시

#### C. 왜 필요한가
이 코드가 시스템에서 어떤 역할을 하는지, 없으면 어떤 문제가 생기는지.

```markdown
## 왜 필요한가
- 인증 없이는 누구나 다른 사용자의 데이터에 접근 가능
- 토큰 갱신 없으면 사용자가 매번 로그인해야 함
- 이 서비스가 모든 API 요청의 관문 역할
```

### 3. Mermaid 다이어그램

코드의 핵심 흐름을 Mermaid 다이어그램으로 시각화.

파일 단위: 주요 함수 간 호출 흐름 또는 상태 변화.
기능 단위: 파일/모듈 간 데이터 흐름.

적절한 다이어그램 타입 선택:
- **흐름도 (flowchart)**: 의사결정, 분기 로직
- **시퀀스 (sequence)**: API 호출, 요청-응답 흐름
- **상태도 (stateDiagram)**: 상태 변화 (주문 상태, 인증 상태 등)
- **클래스 (classDiagram)**: 객체 관계, 의존성

```markdown
## 흐름도

```mermaid
sequenceDiagram
    participant U as 사용자
    participant C as AuthController
    participant S as AuthService
    participant D as DB

    U->>C: POST /login (id, pw)
    C->>S: authenticate(id, pw)
    S->>D: findUser(id)
    D-->>S: User
    S-->>C: JWT Token
    C-->>U: 200 OK + Token
`` `
```

### 4. 출력

대상 파일과 같은 디렉토리에 `EXPLANATION.md`로 저장.
기능 단위인 경우 프로젝트 루트에 `EXPLANATION-{기능명}.md`로 저장.

```markdown
# {대상} 설명

> 생성일: {날짜}
> 대상: {파일 경로 또는 기능명}

## 한 줄 요약
...

## 비유로 이해하기
...

## 왜 필요한가
...

## 흐름도
...

## 관련 파일
- `src/auth/login.ts` — 로그인 엔드포인트
- `src/auth/token.ts` — 토큰 발급/갱신
- ...
```

## 제약사항

- 설명은 한국어로 작성
- 비유는 반드시 일상 사물/상황 사용 (기술 용어로 비유 금지)
- 다이어그램은 핵심 흐름만 (모든 함수를 다 그리지 않음)
- 핵심 흐름 중심으로 간결하게 유지