# {PROJECT_NAME} PRD (Lite)

> MVP용. 핵심만. 하지만 AI가 빠뜨리면 안 되는 건 다 있음.
>
> 작성일: {DATE}

---

## 1. 한 줄 요약

**[타겟]**을 위한 **[핵심 가치]** 앱

---

## 2. 문제 → 해결

| 문제 | 해결 |
|------|------|
| [사용자가 겪는 문제] | [이 앱이 해결하는 방법] |

---

## 3. 핵심 기능 (P0만)

| 기능 | 설명 | 완료 조건 |
|------|------|-----------|
| 로그인 | 소셜 로그인 | 로그인 후 메인 진입 |
| [기능 2] | | |
| [기능 3] | | |

---

## 4. Constraints (AI 경계)

### ✅ ALWAYS (무조건)
- [ ] 모든 사용자 입력 검증
- [ ] 에러 발생 시 로깅
- [ ] 테스트 없이 커밋 금지

### 🚫 NEVER (절대 금지)
- [ ] **스펙에 없는 기능 구현 금지**
- [ ] 하드코딩된 시크릿/API 키
- [ ] console.log 프로덕션 배포
- [ ] any 타입 사용

### ❌ Out of Scope (이번에 안 함)
- [기능 X] - v2에서
- [기능 Y] - 필요 없음

---

## 5. Edge Cases (필수)

| 기능 | 상황 | 입력 | 예상 결과 |
|------|------|------|----------|
| 로그인 | 빈 이메일 | "" | 에러: "이메일을 입력하세요" |
| 로그인 | 잘못된 형식 | "abc" | 에러: "올바른 이메일 형식이 아닙니다" |
| 로그인 | 미가입 이메일 | "new@test.com" | 회원가입 유도 |
| [기능 2] | [상황] | [입력] | [결과] |
| [기능 2] | [상황] | [입력] | [결과] |
| [기능 2] | [상황] | [입력] | [결과] |

---

## 6. 화면

```
/           → 랜딩
/login      → 로그인
/main       → 메인 (핵심 기능)
```

---

## 7. 기술 스택

| 구분 | 선택 |
|------|------|
| FE | Next.js + Tailwind |
| BE | [선택] |
| DB | [선택] |

---

## 8. API

| Method | Path | 설명 | 에러 케이스 |
|--------|------|------|------------|
| POST | /auth/login | 로그인 | 401: 인증 실패, 400: 입력 오류 |
| GET | /api/[리소스] | 목록 | 401: 미인증, 500: 서버 오류 |

---

## 9. Acceptance Criteria

```gherkin
Feature: 로그인

Scenario: 정상 로그인
  Given 가입된 사용자가
  When 올바른 정보로 로그인하면
  Then 메인 페이지로 이동해야 함
  And 환영 메시지가 표시되어야 함

Scenario: 로그인 실패
  Given 잘못된 비밀번호로
  When 로그인 시도하면
  Then 로그인 되지 않아야 함
  And "비밀번호가 일치하지 않습니다" 표시되어야 함
  And 비밀번호 필드가 초기화되어야 함

Scenario: [기능 2] 정상
  Given [조건]
  When [행동]
  Then [결과]

Scenario: [기능 2] 실패
  Given [조건]
  When [행동]
  Then [실패 결과] (NOT)
  And [에러 메시지]
```

---

## 10. 완료 체크리스트

### 기능
- [ ] 로그인 동작
- [ ] [핵심 기능 2] 동작
- [ ] 모든 에러 케이스 처리됨

### 품질
- [ ] 테스트 커버리지 > 80%
- [ ] Lighthouse > 80점
- [ ] 콘솔 에러 0개

### 보안
- [ ] 입력 검증 완료
- [ ] XSS 방지 완료
- [ ] 시크릿 하드코딩 없음

---

## 변경 로그

| 날짜 | 내용 |
|------|------|
| {DATE} | 최초 작성 |
