Day 57~63: ⚖️ E1 외부 노출 4자리 + ⭐ E5 7 완성
변호 논리 사실 성립의 자리 — About·약관·개인정보처리방침 + G-7 Apple Privacy Manifest
📑 이 챕터에서 다룰 내용
권3 제4장에서 G4 PASSED + Sentry 7일 무장애. 누적 152.5h. 이번 9주차 (Day 57~63)는 ⚖️ E1 회색지대 결정의 외부 노출 4자리 + ⭐ E5 7 규칙 모두 완성의 자리입니다.
| 📚 사전 지식 체크 | 🎯 이 장의 목적 | ✅ 완료 후 결과물 |
|---|---|---|
| Day 50~56 / G4 PASSED / SPEC v4 § 회색지대 결정 ① ② / CLAUDE.md §5 [5] | Day 57 G4 휴식 + Day 58~59 ⚖️ E1 4자리 + Day 59 ⭐ G-7 (Apple Privacy Manifest 자동) + Day 60 어드민 마무리 + Day 61~62 QA + Day 63 회고 | About·약관·개인정보처리방침 + Apple Privacy Manifest + 어드민 통합 + QA 통과 + ⭐ E5 7 규칙 모두 완성 ✅ |
권1 제3장에서 박힌 ⚖️ E1 두 회색지대 결정이 외부 4자리 (About·약관·개인정보·Footer)에 같은 메시지 일관 노출되면 변호 논리가 사실로 성립합니다 (1탄 v2 새 19장 19-3 절).
권3 Day 38에서 Footer가 시작됐고, 이 장에서 About·약관·개인정보처리방침 = 4자리 모두 일관 ✅. 이게 9주차의 본질입니다.
[BUILD.md Day 57 entry — ★ G4 휴식 ★] ## Phase 1.0 Day 57 — ★ G4 통과 후 휴식 ★ [계획] - 작업 X (G4 통과 의식 + R4 추가 보호) [실행] - 작업 X - 가족·자유 시간 [E2 자동 보호 효과] - G4 통과 의식 (1일 휴식) - R4 4주 누적 67h → Day 57 휴식 → 9주차 시작점 - 9주차 페이스 3h/일 (페이스 회복 시작) [누적] 152.5h (Day 57 변동 없음) [다음] Day 58~59 ⚖️ E1 외부 노출 4자리
About 페이지 (3h)
[Claude Code, Sonnet + medium]
"⚖️ E1 외부 노출 - About 페이지. SPEC § 회색지대 결정 ① ② 본문
그대로 + 사용자 친화 톤.
요구사항:
1. src/app/(legal)/about.tsx (180줄):
- 헤더: '줍줍은 무엇인가요'
- 우리가 약속하는 것 (4가지) — 회색지대 결정 ①
- 우리가 약속하지 않는 것 (4가지) — ★ 회색지대 결정 ① 핵심
- 개인정보 처리 (요약, 자세한 건 개인정보처리방침 link)
· 광고 추적 X / 위치 X / 제3자 X
- 무료 사용 안내 (Phase 1) + Phase 2 6개월 후 시점
2. CLAUDE.md §5 [5] 절대 준수 — 4자리 일관 메시지
3. CLAUDE.md §3 절대 준수 — '신청 보장 / 신청 대행' 표현 X"약관 (Day 58 같은 날)
[Claude Code]
"⚖️ E1 외부 노출 - 약관.
요구사항:
1. src/app/(legal)/terms.tsx (220줄):
- §1 목적 (서비스 정의)
- §2 정의 (용어)
- §3 ★ 서비스 범위 (E1 결정 ① 핵심):
· 본 서비스는 정부 지원사업 공고 수집·정리 + 후기 노출
· 신청 대행 X
· 신청 결과 보장 X
· 정부 공식 X
- §4 ★ 개인정보 처리 (E1 결정 ② 요약, 자세한 건 개인정보 link)
- §5 사용자 의무 (욕설·허위 후기 X 등)
- §6 회원 탈퇴 (jupjups 데이터 자동 삭제 14일 유예)
- §7 환불 (Phase 1 무료, Phase 2 7일 환불 보장)
- §8 분쟁 해결 (서울중앙지법)
2. ⚖️ E1 회색지대 결정 변호 논리 핵심:
'본 서비스는 정부 지원사업 공고 + 사용자 후기 미디어이며,
신청 결과 보장·대행 X'
3. 변호 논리 §3에 한 줄 명시"[BUILD.md Day 58 entry — ⚖️ E1 외부 노출 ★]
## Phase 1.0 Day 58 — ⚖️ About + 약관
[계획]
- About 페이지 + 약관
[실행]
- src/app/(legal)/about.tsx (180줄, "약속하지 않는 것 4가지" 핵심)
- src/app/(legal)/terms.tsx (220줄, §1~§8)
- CLAUDE.md §5 [5] 4자리 일관 검증:
· About 첫 줄 = Footer 메시지 = ContentDisclaimer
· 약관 §3 본문 = About §"우리가 약속하지 않는 것" 일치
[LogOnTable 트레이스 ① — About *"4가지 약속 vs 4가지 약속하지 않는"* 구조]
> 결정: About을 *"약속 4 + 약속하지 않는 4"* 평행 구조로
> 근거: 권1 제3장 ⚖️ E1 결정 ① 본문 그대로. *"무엇을 약속하지 않는가"*
가 *"무엇을 약속하는가"* 보다 더 큰 가치 (변호 논리 본질)
> 대안: 약속 4가지만 — *"약속하지 않는"* 명시 X = E1 변호 논리 약화
> 부작용: About 페이지 무거움 → 사용자 첫 인상 *"부정적 표현 많음"*
위험 → "약속" 4 먼저, "약속하지 않는" 뒤에 (시각적 균형)
[LogOnTable 트레이스 ② — 약관 §3 변호 논리 박힘]
> 결정: 약관 §3 *"서비스 범위"* 에 변호 논리 한 줄 명시
> 근거: 1탄 v2 새 19장 19-3 절 + 권1 제3장 E1 ① 단계 ④ 변호 논리.
단속·신고 시 약관 §3 + About + 개인정보처리방침 + Footer 4자리
일관 입증 = 변호 논리 사실 성립.
> 대안: 약관에 일반 표현 — 변호 논리 본문 분리 시 사실 성립 약화
> 부작용: 약관 분량 ↑ (220줄) — 사용자 *"읽지 않음"* 위험 (정상적
사용자 행동) → About 요약 link로 보완
[누적] 152.5h + Day 58 (3h) = 155.5h
[E2] 페이스 회복 (3h/일 적용 시작)개인정보처리방침 (1.5h)
[Claude Code, Sonnet + medium]
"⚖️ E1 외부 노출 - 개인정보처리방침. SPEC § 회색지대 결정 ② 핵심.
요구사항:
1. src/app/(legal)/privacy.tsx (260줄):
- §1 ★ 수집 정보:
· 카카오 ID (인증, 중복 가입 방지)
· 닉네임 (자동 부여, 본인 입력 X)
· 자발적 필터 (사용자 직접 입력, 기본값 OFF)
· jupjups 행위 데이터
- §2 ★ 수집 안 함 (명시):
· IDFA (광고 식별자)
· 디바이스 고유 식별자
· 위치 정보 (GPS·자동 수집)
· 결제 정보 (Stripe 위임)
- §3 ★ 제3자 제공 X (명시):
· 광고 회사 X / 분석 회사 X / 어떤 형태든 X
· ★ Phase 3 익명 집계 데이터 리포트 (사용자 식별 불가)
- §4 보관 기간:
· 회원 탈퇴 시 14일 유예 후 자동 삭제
· jupjups·후기는 익명화 보존 (통계 가치)
- §5 사용자 권리 (열람·정정·삭제 요청)
- §6 정책 변경 시 통지 (앱 내 공지 + 이메일)
2. 변호 논리 핵심: 'PIPA 적극 준수, 추적 식별자 X, 제3자 X'
3. CLAUDE.md §3 + §5 [5] 절대 준수"G-7 Apple Privacy Manifest 자동 검증 (1.5h)
이게 1탄 v2 권1 제4장에서 발견된 G-7 (Apple Privacy Manifest 자동)의 입증 자리입니다. 12건 4+6+2 패턴 중 마지막 발견입니다.
[Claude Code]
"⭐ G-7 Apple Privacy Manifest 자동 검증 — 권1 제4장 G-7.
요구사항:
1. PrivacyInfo.xcprivacy 파일 작성 (Apple 표준):
- PrivacyTrackingEnabled: false (IDFA 미수집 명시)
- PrivacyAccessedAPITypes: [NSUserDefaults, FileTimestamp]
- PrivacyCollectedDataTypes:
· CrashData (Sentry, 사용자 비식별)
· UserID (카카오)
· OtherUserContent (자발적 필터)
2. EAS Build pre-build hook (eas.json):
- 빌드 전 PrivacyInfo.xcprivacy 존재 검증
- xcrun privacy_manifest_check 자동 실행
- 누락 시 빌드 fail (CLAUDE.md §3 절대 준수 강화)
3. 검증 스크립트 scripts/check-privacy-manifest.sh"[BUILD.md Day 59 entry — ⭐ G-7 + ⚖️ 개인정보처리방침 ★]
## Phase 1.0 Day 59
[계획]
- 개인정보처리방침 + ⭐ G-7 Apple Privacy Manifest 자동
[실행]
- src/app/(legal)/privacy.tsx (260줄, §1~§6)
- ios/PrivacyInfo.xcprivacy (Apple 표준 명시)
- eas.json pre-build hook 등록
- scripts/check-privacy-manifest.sh (40줄)
- 첫 빌드 검증 — privacy_manifest_check 통과 ✅
[LogOnTable 트레이스 ① — 회원 탈퇴 14일 유예]
> 결정: 회원 탈퇴 시 14일 유예 후 자동 삭제
> 근거: PIPA 제21조 (개인정보 파기) + 사용자 실수 보호. 즉시 삭제
시 잘못 클릭한 탈퇴 복구 X.
> 대안: 즉시 삭제 — 사용자 실수 위험
30일 유예 — PIPA 권장 (14일) 초과 = 보존 의무 부담
> 부작용: 14일 동안 사용자 데이터 보존 = 운영자 의무 (보안 강화)
[LogOnTable 트레이스 ② — Phase 3 익명 집계 데이터 명시]
> 결정: 개인정보처리방침 §3에 *"Phase 3 익명 집계 데이터"* 명시
> 근거: 권1 제3장 ⚖️ E1 결정 ② Phase 3 비즈니스 가능성 + 사용자
알 권리. 미명시 시 Phase 3 시점 *"몰래 추가"* 인식 = 신뢰 손상
> 대안: Phase 1·2만 명시 — Phase 3 시점 약관 변경 부담 + 신뢰 손상
> 부작용: 사용자가 *"미래 Phase 3에서도 식별 X 가능?"* 의문 → 본문에
*"개인 식별 불가능 형태"* 명시 강화
[LogOnTable 트레이스 ③ — ⭐ G-7 입증]
> 결정: PrivacyTrackingEnabled: false + xcrun 자동 검증
> 근거: 권1 제4장 G-7. ⚖️ E1 결정 ② "IDFA 미수집" 의 코드 보장.
빌드 시점 자동 검증 = 운영자 망각 X
> 대안: 수동 검증 — 빌드 망각 위험
> 부작용: PrivacyInfo.xcprivacy 변경 시 EAS Build 매번 검증 (Day 64
빌드부터 적용)
[★ 12건 4+6+2 패턴 마지막 입증]
- G-1 (LLM JSON fallback): Day 2·4 ✅
- G-3 (is_active 트리거 SQL): Day 9·11 ✅
- G-4 (카카오 토큰 갱신): Day 15 ✅
- G-5 (FCM 토큰 만료): Day 17·50 ✅
- G-6 (IP rate limit Redis): Day 8·24 ✅
- ⭐ G-7 (Apple Privacy Manifest): Day 59 (본 일자) ✅
- 6/6 모두 입증 — 권1 제4장 12건 4+6+2 패턴 마무리
[누적] 155.5h + Day 59 (3h) = 158.5h작업 (3h)
[Claude Code, Sonnet + medium] "어드민 마무리 — Day 1~59 모든 어드민 페이지 통합. 요구사항: 1. src/app/admin/index.tsx (180줄, 어드민 대시보드): - 검수 큐 (Day 12) 미처리 건수 + SLA 위반 알림 - 신고 (Day 19) 미처리 건수 + 우선순위 - Phase 1 KPI (Day 46) 5종 메트릭 요약 - Sentry 7일 통계 (Crash-free rate) - 1순위 커뮤니티 (Day 53) 입력 누락 알림 2. CLAUDE.md §6 — 모든 어드민 페이지 src/app/admin/ 일관 (이미 적용) 3. 어드민 사용자 가이드 작성: - docs/admin-guide.md - 매일 1회 09:00 점검 4 항목 (검수 큐 / 신고 / SLA / 커뮤니티) - 매주 일요일 KPI 리포트 점검"
[BUILD.md Day 60 entry]
## Phase 1.0 Day 60
[계획]
- 어드민 마무리 + 사용자 가이드
[실행]
- src/app/admin/index.tsx (180줄, 5 모듈 대시보드)
- docs/admin-guide.md (1.2KB)
- Day 1~59 모든 어드민 기능 통합 (검수·신고·KPI·Sentry·커뮤니티)
[LogOnTable 트레이스 — 어드민 *"매일 09:00 점검"* 의식]
> 결정: 어드민 가이드에 매일 09:00 4 항목 점검 + 매주 일요일 KPI
> 근거: SPEC v4 §3-2 + ⚖️ E1 변호 논리 = *"운영자 의식적 점검"* 의
구체화. 자동 알림 (Slack) + 수동 점검 = 이중 보호
> 대안: 자동 알림만 — 운영자 *"알림 피로"* + 놓칠 위험
> 부작용: 매일 5~10분 추가 (E2 페이스 영향 미미)
[누적] 158.5h + Day 60 (3h) = 161.5hDay 61 QA 1차 (3h)
[Claude Code, Sonnet + medium] "QA 1차 — 전체 시나리오 검증. 요구사항: 1. tests/qa/full-journey-1.test.ts (200줄): - 시나리오 1: 자영업자 (수원시 카페 사장) 첫 사용 → 줍줍 → 후기 - 시나리오 2: 청년 시민 (강남구 취준 1인가구) 첫 사용 → 줍줍 → 신고 - 시나리오 3: 어드민 검수 큐 처리 → 사용자 노출 검증 - 시나리오 4: 마감 D-7 알림 → 사용자 클릭 → 줍줍 - 시나리오 5: 공유 카드 (Satori OG) → 카카오 공유 → 외부 진입 2. Playwright MCP 활용 (E2E) 3. 결과 보고 + Sentry 에러 0건 확인"
- tests/qa/full-journey-1.test.ts (200줄) 작성 완료
- 5 시나리오 모두 통과 ✅
- Playwright MCP — 모든 흐름 캡처 (스크린샷 21장 — Day 65 심사 제출 자료에 활용)
[LogOnTable 트레이스 — Playwright 스크린샷 활용]
결정: QA 시나리오 스크린샷 21장 → Day 65 앱스토어 심사 제출 자료
근거: Apple/Google 심사 시 "앱 사용 시나리오 스크린샷" 의무 (5~10장). QA 스크린샷이 자연 활용 = 추가 작업 X
Day 62 QA 2차 (3h)
[Claude Code] "QA 2차 — Edge case + 보안. 요구사항: 1. tests/qa/edge-cases.test.ts (180줄): - 카카오 토큰 만료 (자동 갱신) 검증 - FCM 토큰 만료 (다음 로그인 시 재등록) 검증 - LLM JSON parse 실패 (admin 큐 직행) 검증 - source_url null (공공기관 검색 redirect) 검증 - welfare_local XML 응답 (admin 큐) 검증 2. 보안 시나리오: - 카카오 시크릿 노출 시도 (.env.local 확인 X) - DB direct 조작 시도 (RLS 정책 차단 검증) - IP rate limit 우회 시도 (다른 카카오 ID 5개) 3. CLAUDE.md §3 + §5 절대 준수 검증"
- tests/qa/edge-cases.test.ts (180줄, 14 시나리오) 완료
- 보안 검증 5 시나리오 모두 차단 ✅
- ⚖️ E1 변호 논리 모든 layer 검증 ✅
- 통계 조작 (다중 카카오 ID + IP rate) 차단 ✅
- 카카오·Firebase·Slack 시크릿 모두 .env.local·EAS·Supabase 분리 검증
⭐ E5 7 규칙 모두 완성 ✅
| # | 규칙 | 완성 | 자리 |
|---|---|---|---|
| 1 | 사실 단일 출처 (benefits) | ✅ Day 8~ | DB |
| 2 | 톤 분리 (UI·알림·카드·마이페이지) | ✅ Day 30~52 | 앱 전체 레이어 |
| 3 | 닉네임 페르소나 풀 | ✅ Day 16 | 21+21 형용사 |
| 4 | LLM 분류 프롬프트 분리 | ✅ Day 3 | 두 시스템 프롬프트 |
| 5 | ⚖️ E1 외부 노출 4자리 일관 | ✅ Day 38·58·59 | About+약관+개인정보+Footer |
| 6 | 자동 일관성 테스트 | ✅ Day 22·30 | tests/integration |
| 7 | 환각 방지 명세 | ✅ Day 3·12·46 | LLM 프롬프트 + KPI 측정 |
⚖️ E1 외부 노출 4자리 완성 ✅
| 자리 | 핵심 메시지 | 작성일 |
|---|---|---|
| About | 약속 4 + 약속하지 않는 4 | Day 58 |
| 약관 §3·§4 | 서비스 범위 + 개인정보 한정 | Day 58 |
| 개인정보처리방침 | 수집 / 미수집 / 제3자 X / Phase 3 익명 | Day 59 |
| Footer + ContentDisclaimer | "정보 제공 목적, 결과 보장 X" | Day 38 |
단속·신고 발생 시 약관 §3 + About + 개인정보처리방침 + Footer 4자리 일관 입증 = 변호 논리 사실 성립.
⭐ G-7 — 12건 4+6+2 패턴 마지막 입증
권1 제4장 두 검토자 12건 발견 (Claude만 4 + Gemini만 6 + 둘 다 2):
- C-1·C-2·C-3·C-4·C-5: 모두 입증 ✅ (Phase 1.0 BUILD)
- G-1·G-3·G-4·G-5·G-6·G-7: 모두 입증 ✅ (Day 2~Day 59)
12/12 완성 = 1탄 v2 새 8장 8-3 절 "4+6+2 패턴" 데이터 완전 입증
5확장 진행률 (Day 63 시점)
| 확장 | 진행률 |
|---|---|
| ⚖️ E1 회색지대 | 외부 노출 4자리 완성 ✅ |
| ★ E2 1인 페이스 | 자동 보호 5주 연속 사이클 ✅ |
| ⭐ E3 두 검토자 | 12/12 입증 ✅ |
| ⭐ E4 LogOnTable | ~73 트레이스 (권3 제5장 = 7 추가) |
| ⭐ E5 콘텐츠 SSOT | 7/7 완성 ✅ |
git add BUILD.md git commit -m "Phase 1.0 Day 63: 9주차 회고 + ⭐ E5 7 완성 + ⚖️ E1 4자리 + 12/12 패턴 입증"
| 구간 | 시간 |
|---|---|
| [권1·권2·권3 8주차 누적] | 152.5h |
| [권3 9주차] | 15h (Day 57 휴식 + Day 58~62 5일 작업 + Day 63 회고) |
| [권1+권2+권3 누적] | 167.5h |
| [4주 누적 (6~9주차)] | 18+12.5+12.5+18 = 61h (R4 트리거 1h 초과, 회복 진행) |
- ⚖️ E1 외부 노출 4자리 모두 일관 메시지
- 단속·신고 발생 시 변호 논리가 "가설"이 아닌 "사실"
- ⭐ E5 7 규칙 모두 완성
- ⭐ E3 12/12 패턴 입증
2탄 v2 시리즈의 가장 큰 메타 가치가 데이터 완성된 자리입니다.
📌 권3 제5장 정리
핵심 한 줄: Day 57~63 = ⚖️ E1 외부 노출 4자리 + ⭐ E5 7 규칙 완성 + ⭐ G-7 12/12 패턴 마지막 입증.
9주차 산출물:
- About + 약관 + 개인정보처리방침 (660줄, ⚖️ E1)
- Apple Privacy Manifest + EAS pre-build hook (G-7)
- 어드민 대시보드 (180줄)
- QA 1·2차 (380줄, 19 시나리오)
- 어드민 가이드 docs/
⚖️ E1 외부 노출 4자리 모두 일관 ✅:
- About (Day 58) + 약관 (Day 58) + 개인정보 (Day 59) + Footer (Day 38)
- 같은 메시지 = 변호 논리 사실 성립
⭐ E5 7 규칙 모두 완성 ✅:
- [1] SSOT / [2] 톤 분리 / [3] 닉네임 / [4] LLM 분리 / [5] 외부 4자리 / [6] 자동 테스트 / [7] 환각 방지
⭐ E3 12/12 패턴 ✅: C-1~C-5 + G-1~G-7 (G-7 Day 59 마지막)
★ E2 자동 보호 5주 연속 사이클 ✅ (5~9주차)
누적: 167.5h / 4주 누적 61h
다음 장: 권3 제6장 — Day 64~73 (★ G5 FINAL — 앱스토어 심사 + 1순위 커뮤니티 + Phase 1 종합 회고).
시리즈의 가장 큰 메타 가치가 데이터 완성된 자리 ✅
- ⚖️ E1 외부 노출 4자리 모두 일관 메시지 (변호 논리 사실 성립)
- ⭐ E5 7 규칙 모두 완성
- ⭐ E3 12/12 패턴 마지막 입증 (G-7)
- ★ E2 자동 보호 5주 연속 사이클
- 1탄 v2 메타 원칙 8개 모두 입증
5확장 5/5 + 모든 sub 항목 완성 ✅. 1탄 v2 새 1장 11-5의 "5파일+ 체계 완전 가동 검증"이 줍줍 사례에서 깊이 데이터로 박혔습니다.
다음 장에서 권3 마지막 — Day 64~73 ★ G5 FINAL 앱스토어 심사 + 1순위 커뮤니티 게시 + Phase 1 종합 회고 + Phase 2 예고. 줍줍이 사용자에게 가는 자리입니다.