# CODE-STANDARD.md — 코드 표준

> 이 문서는 **모든 슬라이드·예제·실습·핸드아웃에 등장하는 코드의 단일 출처(Single Source of Truth)** 입니다.
>
> **핵심 원칙**: 학생에게 완성품을 한 번에 보여주지 않습니다. 차시가 진행될수록 테이블·클래스·SQL 이 ALTER/REFACTOR 되는 **진화 과정 자체가 학습 내용** 입니다.

> **이 파일은 starter 키트의 골격입니다.** 코스 도메인 (게시판 / 쇼핑몰 / 일정 관리 등) 에 맞춰 §1~§3 을 채우세요. 점진적 빌드업 원칙(§4 이하) 은 그대로 유지하세요.

---

## 1. 명명 표준

<!-- TODO: 코스의 패키지 / 테이블 / 매퍼 / 라이브러리 명명 규칙을 채우세요. -->

| 자리 | 표준 | 이유 |
|------|------|------|
| **패키지 루트** | `<!-- 예: com.smhrd -->` | <!-- 일관성 이유 --> |
| **하위 패키지** | `<!-- 예: controller / service / mapper / domain -->` | <!-- 계층 매핑 --> |
| **테이블 prefix** | `<!-- 예: my -->` | <!-- 자료 따름 / 충돌 방지 --> |
| **Mapper namespace** | `<!-- 예: 인터페이스 풀 클래스명 -->` | <!-- 매핑 표준 --> |
| **Mapper XML 위치** | `<!-- 경로 -->` | <!-- 인터페이스와 같은 경로 --> |
| **Lombok 사용** | `<!-- 예: @Data, @AllArgsConstructor, ... -->` | <!-- 자료 따름 --> |

---

## 2. 최종(완성) 도메인 — 학생에게는 한 번에 안 보여줌

<!-- TODO: 코스 마지막 시점의 완성 스키마 / 클래스를 정의하세요. -->

### 2.1 [도메인 이름] 

| 컬럼 | 타입 | 설명 |
|------|------|------|
| `<!-- col -->` | `<!-- type -->` | <!-- 설명 --> |

### 2.2 [다른 도메인]

| 컬럼 | 타입 | 설명 |
|------|------|------|
| `<!-- col -->` | `<!-- type -->` | <!-- 설명 --> |

---

## 3. 진화 지도 — 차시별 변경

<!-- TODO: v_n_ 마다 어떤 컬럼/클래스가 추가·변경되는지 채우세요. -->

| 버전 | 차시 | 스키마 변경 | 클래스 변경 | 학생이 배우는 것 |
|------|------|-----------|-----------|--------------|
| **v0** | <!-- 차시 키워드 --> | <!-- 변경 내용 --> | <!-- 변경 내용 --> | <!-- 학습 포인트 --> |
| **v1** | ... | ... | ... | ... |

> ⚠️ **이 표가 슬라이드/예제/실습의 단일 진실입니다.** 어떤 차시가 어떤 컬럼을 가지는지 의심나면 이 표 확인.

---

## 4. 점진적 빌드업 원칙 (불변)

이 코스가 다른 강좌와 가장 크게 다른 점입니다. 코스 도메인이 무엇이든 **이 원칙은 그대로 유지** 하세요.

### 4.1 도메인 클래스는 "그 시점에 알 수 있는 것" 만

- v_n_ 슬라이드/예제에서 v_n+1_ 의 컬럼이 미리 등장하면 안 됨.
- 학생이 "이 필드는 왜 있어요?" 라고 묻는 순간, 차시 내러티브가 깨진다.

### 4.2 SQL 은 ALTER 로 진화

- 새 컬럼/테이블이 필요해진 차시에서 처음 등장.
- 차시 시작 시점에 **이전 데이터를 어떻게 다룰지** 를 학생과 함께 결정 (DEFAULT? NULL 허용? 마이그레이션 스크립트?).

### 4.3 Mapper / Service 도 똑같이 진화

- 메서드를 한 번에 다 만들어 두지 않음.
- 그 차시에서 **새로 필요해진 메서드 1~2개** 만 추가.

### 4.4 코드 비교 슬라이드 (`.before-after`) 필수

- 새 도구 도입 차시는 항상 「이전 코드 → 이후 코드」를 나란히.
- "데이터 흐름이 어디가 달라졌나" 를 본문 한 줄로 요약.

---

## 5. 코드 표기 규칙

- **셸 입력**: `$ ` 접두사. 출력은 접두사 없음.
- **자바 코드 블록**: 패키지 선언 생략 가능 (이미 알고 있는 것). `import` 는 새로 등장하는 것만 표시.
- **SQL 코드 블록**: 키워드 대문자, 식별자 소문자.
- **XML 코드 블록**: 들여쓰기 2칸. 주석은 `<!-- ... -->` 한국어.
- **하이라이트**: 새로 추가되는 줄은 `<mark>` 또는 주석 `// 새로 추가`.
