---
task_id: task-2156
type: plan
scope: task
created: 2026-04-24
updated: 2026-04-24
status: completed
---

# 계획서: task-2156

**task**: task-2156
**목표**: 금소법 면책동의 UX 개선 — DB 저장 + 인라인 배너 + 서버 검증
**승인**: 아누(개발실장) 2026-04-24 "컴플라이언스 미팅 합의"
**근거**: `/home/jay/workspace/memory/meetings/2026-04-24-compliance-consent-ux.md`

---

## 목표

1. 금소법 면책동의를 DB에 저장하여 법적 방어력 확보 (동의 이력 + 만료 관리)
2. 면책 배너를 "빠른 선택" 아래에 인라인 표시하여 UX 발견성 극대화
3. 서버측 동의 검증으로 클라이언트 우회 방어

## 범위

### 포함
- Phase 1: DB 스키마 (compliance_consents, compliance_versions 테이블)
- Phase 2: 백엔드 API (consent-status GET, consent POST, 생성 API 동의 검증)
- Phase 3: 프론트엔드 (ComplianceConsentBanner, useComplianceConsent 훅, complianceConfig, Generate.tsx/GenerateSettingsPanel 연동)

### 제외 (다음 페이즈 이후)
- e2e 자동 테스트 (시나리오 1~8)
- feature flag 래핑 (환경변수 ON/OFF)
- 모바일 반응형 상세 테스트

## 위임 계획

- Phase 1 DB 마이그레이션: **토르(백엔드)** — SQL 스키마 + RLS 정책
- Phase 2 백엔드 API: **토르(백엔드)** — FastAPI 엔드포인트 2개 + 동의 검증 미들웨어
- Phase 3 프론트엔드: **프레이야(프론트)** — 배너 컴포넌트 + 훅 + 페이지 연동

## 검증 기준

- DB: `compliance_consents` 테이블 존재 확인 → SQL 파일 grep
- API: `GET /api/insuro/compliance/consent-status` 200 응답 → curl 확인
- API: `POST /api/insuro/compliance/consent` 동의 저장 → curl 확인
- 프론트: ComplianceConsentBanner.tsx 파일 존재 + 임포트 확인
- 프론트: useComplianceConsent 훅 파일 존재 + 임포트 확인
- 통합: complianceFilter!="off" 시 배너 표시 + 버튼 비활성화
