---
task_id: task-2156
type: context
scope: task
created: 2026-04-24
updated: 2026-04-24
status: in-progress
---

# 맥락 노트: task-2156

**task**: task-2156

---

## 결정 근거

### 1. 인라인 배너 + DB 동의 저장 방식 채택
- 기존: 고급옵션 내부에 체크박스 숨겨져 있어 UX 발견성 0
- 결정: 빠른 선택 아래 인라인 배너로 이동 + DB에 동의 이력 저장
- 대안: 모달 팝업 → 기각 (매번 뜨면 UX 악화, 법적 방어력 동일)
- 대안: localStorage만 사용 → 기각 (법적 증거력 부족, 기기 변경 시 유실)

### 2. 30일 만료 + 버전 관리
- 금소법 가이드라인 변경 시 재동의를 강제하기 위해 버전 관리 필수
- 30일 만료는 합리적 주기 (보험업계 관행, 너무 짧으면 UX 저하)

### 3. 서버측 이중 검증
- 클라이언트만 검증하면 DevTools로 우회 가능
- 서버에서 DB 조회로 이중 검증 → 법적 방어력 극대화

## 3 Step Why 자문

### 1st Why: "왜 이 설계가 필요한가?"
**A**: 금소법 면책동의가 "고급 옵션" 안에 숨겨져 있어 유저가 찾지 못하고, 동의 없이 생성 시 에러 발생. 또한 기존 동의는 클라이언트 state만이라 법적 증거 불충분.

### 2nd Why: "왜 A(인라인 배너+DB저장)가 최선의 접근인가?"
**B**: 인라인 배너는 빠른 선택과 동일 화면에 있어 발견성 최대. DB 저장은 IP/User-Agent/타임스탬프/해시를 포함하여 법적 증거력이 가장 높음. 서버 이중 검증까지 추가하면 클라이언트 우회도 방어.

### 3rd Why: "왜 B가 다른 대안보다 나은가?"
**C**: 모달 팝업은 UX 악화(매번 차단), localStorage는 증거력 부족(기기 변경 시 유실). 인라인 배너+DB는 UX(한번 동의→30일 유효)와 법적 방어력(DB 기록)을 동시에 만족하는 유일한 조합.

→ A-B-C 논리 일관성 확인: UX 발견성 해결 + 법적 방어력 확보 + 대안 대비 우위 = 설계 타당

## 참조 자료

- 미팅 기록: `/home/jay/workspace/memory/meetings/2026-04-24-compliance-consent-ux.md`
- 태스크 정의: `/home/jay/workspace/memory/tasks/task-2156.md`
- 서버 main.py: `/home/jay/projects/InsuRo/server/main.py`
- Generate 페이지: `/home/jay/projects/InsuRo/src/pages/Generate.tsx`
- GenerateSettingsPanel: `/home/jay/projects/InsuRo/src/components/GenerateSettingsPanel.tsx`

## 주의사항

- 기존 complianceAgreed state를 유지하면서 점진적으로 useComplianceConsent 훅으로 교체
- 면책 문구는 complianceConfig.ts에서 단일 소스 관리
- complianceFilter === "off" 일 때는 배너 숨김 + 서버 검증 스킵 필수
