docs(auth): 인증 종료 요구사항과 검증 결과를 기록한다

This commit is contained in:
Yu Sung
2026-10-14 00:33:59 +09:00
parent 228e7d0be5
commit d50a8a9b15
3 changed files with 302 additions and 4 deletions
@@ -4,9 +4,9 @@
| 항목 | 내용 |
|---|---|
| 문서 상태 | 코드 구현·빌드 검증 완료 / 실제 인증 통합 QA 대기 |
| 문서 상태 | Phase 7·R1 구현·로컬 기능/시각 검증 완료 / 실제 인증 통합 QA는 기존 대기 유지 |
| 작성일 | 2026-10-12 |
| 최종 수정일 | 2026-10-12 |
| 최종 수정일 | 2026-10-14 |
| 대상 제품 | SodaLive iOS 본인인증 완료 흐름 |
| 작성자·결정권자 | 사용자 승인 완료 (2026-10-12) |
| API Contract | 본 문서 §11 |
@@ -250,3 +250,69 @@ Bootpay 본인인증 완료 직후 인증 요청을 보내는 현재 흐름을,
- 2026-10-12: 마이페이지의 기존 재시작과 callback 경로의 GET 동기화를 분리하고, 문서 승인 한 번을 구현 시작 허가로 처리하도록 사용자 지시와 대조했다. 변경 범위와 공백 오류를 확인했으며 구현 승인은 여전히 대기 중이다.
- 2026-10-12 후속: 사용자가 문서를 승인했다. 이전 승인 대기 기록은 이력으로 보존하며, 승인된 범위의 구현·검증을 시작한다.
- 2026-10-12 구현 후속: 7개 인증 진입점과 결합 전송·단계별 복구를 구현했다. 실제 DTO/VM 격리 실행, 네이티브 sheet UI 검사, 두 앱 Debug 시뮬레이터 빌드가 통과했다. 실제 인증 7개 경로와 실패 재시작 후 실서버 회원정보 갱신은 QA 환경이 없어 미검증이며 최종 수용 기준을 일괄 완료 처리하지 않는다. 상세 증거와 한계는 plan-task의 Progress 및 `reviews/phase2-auth-content-settings.md`에 기록한다.
## Phase 7 후속 요구사항: 인증 중 설정 패널 종료
### 상태와 우선순위
- 2026-10-13 사용자 인터뷰로 범위와 문구를 확정했다. 현재 허용 범위는 문서·계획 작성까지이며, **Phase 7 구현은 이 계획에 대한 별도 승인 후 시작한다.** 이전 Phase의 승인이나 문구에 대한 “그대로 진행”은 이번 구현 승인으로 처리하지 않는다.
- 아래 요구사항은 기존 `AUTH-003`, §3.2·§7의 닫기 금지, §10.1 문구 및 §14.2 관련 수용 기준을 이번 범위에서 정정한다. 과거 결정·검증 기록은 이력으로 보존한다.
- 목표: 최초 설정 및 저장 실패 후 재표시된 패널에서 사용자가 명시적으로 본인인증 과정을 중단할 수 있게 한다.
- 범위: 인증 중 `AuthContentSettingsSheet`와 종료 팝업만 변경한다. 일반 콘텐츠 설정 화면, 다른 인증 안내, API·Bootpay·개발 mock 정책은 변경하지 않는다.
### 요구사항과 수용 기준
| ID | 상태 | 요구사항 | 수용 기준 | Goal |
|---|---|---|---|---|
| AUTH-012 | 사용자 확정 | 패널 우측 상단 X는 종료 확인 팝업을 연다. | 최초 패널과 POST 실패 후 패널 모두에서 동작한다. X 자체는 제출하거나 패널을 닫지 않는다. | `P7-T1` |
| AUTH-013 | 사용자 확정 | V2 내부 기존 팝업을 재사용한다. | `V2/Component/Modal/SodaV2ActionModal.swift`를 그대로 사용하며 구형 `SodaDialog`나 새 팝업 컴포넌트를 만들지 않는다. | `P7-T1` |
| AUTH-014 | 사용자 확정 | confirm은 패널까지 닫고 인증 과정을 중단한다. | 영수증·요청·성공 callback과 caller의 대기 action을 폐기한다. 종료에 따른 추가 POST/GET·설정 저장·성공 동작·재시작은 0회다. 새 인증으로 다시 진입할 수 있다. | `P7-T1` |
| AUTH-015 | 사용자 확정 | cancel과 팝업 바깥 터치는 팝업만 닫는다. | 선택한 ON/OFF·선호와 인증 대기 상태를 유지한다. 팝업 표시 중 뒤 패널의 저장·토글은 조작되지 않는다. | `P7-T1` |
| AUTH-016 | 사용자 확정 | 인증 패널과 종료 팝업에서 인증·콘텐츠 용어를 통일한다. | ‘본인인증’과 ‘민감한 콘텐츠’를 사용한다. 일반 설정과 다른 인증 안내 문구는 그대로다. 팝업 본문의 두 문장 사이에 명시적인 줄바꿈이 있다. | `P7-T1` |
| AUTH-017 | 설계 제안 | X는 SwiftUI 접근성·터치·레이아웃 기준을 따른다. | SF Symbol `xmark`, 44×44pt 터치 영역, 의미 있는 VoiceOver 레이블, 제목 가운데 정렬, 큰 글자·가로 화면에서도 닫기 접근 가능. | `P7-T1`, `P7-QA` |
### 확정 문구
| 위치 | 한국어 문구 |
|---|---|
| 패널 제목 / 토글 제목 | 기존 `콘텐츠 보기 설정` / `민감한 콘텐츠 보기` 유지 |
| ON 설명 | `본인인증 완료 후 민감한 콘텐츠를 볼 수 있어요` |
| OFF 설명 | `민감한 콘텐츠가 목록과 검색에 노출되지 않아요` |
| X 접근성 레이블 / 팝업 제목 | `본인인증 종료` |
| 팝업 본문 | `본인인증을 종료하시겠어요?\n종료하면 다시 본인인증을 진행해야 해요.` |
| confirm / cancel | `종료하기` / `계속하기` |
| 저장 CTA | 기존 `설정 완료` 유지 |
- 본문에서 `\n`은 실제 줄바꿈으로 표시한다. 화면 폭에 따른 추가 자연 줄바꿈은 허용한다.
- 기존 `I18n.pick`의 한국어·영어·일본어 방식을 유지하고 번역도 같은 의미와 두 문장 사이 줄바꿈을 따른다. 공용 `sensitiveContentTitle`은 수정하지 않는다.
### UI와 상태 설계 제안
- `ui-ux-pro-max`의 SwiftUI 레이블·네이티브 Button 및 iOS 44pt 터치 영역 지침을 적용한다. 기존 dark 패널·색상·간격·모션을 유지한다.
- 헤더는 최소 54pt 높이, 기존 상단 26pt·좌우 14pt 간격을 유지한다. 좌우 동일한 44pt 영역 사이에 제목을 가운데 배치한다. 우측 16pt medium `xmark`는 `.gray400`을 사용하고 별도 원형 배경은 추가하지 않는다. 눌림 피드백을 제공한다.
- 헤더와 저장 CTA는 스크롤 밖에 두고 내용만 필요할 때 스크롤한다. 큰 글자에서는 제목 줄바꿈과 헤더 높이 증가를 허용한다. X 식별자는 `authContentSettings.close`로 한다.
- 종료 팝업은 패널이 아닌 전체 화면 host 위에 표시한다. 기존 V2 순서대로 왼쪽 ‘계속하기’, 오른쪽 ‘종료하기’를 배치한다. 팝업 동안 뒤 패널 터치와 접근성 탐색을 차단한다.
- 배경 탭·drag로 패널을 바로 닫는 동작은 계속 금지한다. 종료는 X → 팝업 → ‘종료하기’로만 수행한다. 제출 중 취소는 허용하지 않는다.
- 패널 단독 퇴장 및 host `onDismiss` 제출 연결을 유지한다. 종료로 대기 상태를 먼저 비우므로 `submitPendingAuthVerification()`의 기존 guard가 추가 제출을 차단한다.
### 제외와 검증 위험
- 서버에 이미 도달했을 수 있는 실패 요청의 인증 결과를 취소하거나 되돌리는 기능은 없다. 종료는 앱의 로컬 진행 중단이며 서버 rollback을 보장하지 않는다.
- V2 팝업의 기존 340pt 폭·64pt 제목 높이는 공용 컴포넌트 제약이다. 좁은 화면·큰 글자에서 문제가 확인되면 보고하고, 이번 작업에 공용 팝업 리팩터링을 임의로 포함하지 않는다.
- 기능·native UI·두 앱 빌드는 구현 승인 후 검증한다. 기존 실서버 통합 QA 미검증은 별도로 유지한다.
### 후속 결정과 인터뷰 종료
| 날짜 | ID | 상태 | 결정 | 근거 | 영향 |
|---|---|---|---|---|---|
| 2026-10-13 | DEC-007 | 정정·사용자 확정 | 명시적 종료 확인을 허용하고 변경 범위를 인증 패널·종료 팝업에 제한한다. V2 팝업을 재사용한다. | 사용자 요청과 인터뷰 | `AUTH-012`~`AUTH-016`, `P7-T1` |
| 2026-10-13 | DEC-008 | 사용자 확정 | 종료 문구를 채택하고 본문 두 문장 사이를 줄바꿈한다. 계획까지만 작성한 뒤 구현 승인을 기다린다. | 최신 사용자 지시 | 확정 문구·Phase 7 승인 gate |
- 최종 모호성 0.02: 목표 1.0, 범위 1.0, 제약 1.0, 성공 기준 1.0, 코드 문맥 0.9의 휴리스틱 평가. 제품 미결 질문 없음. UI 세부 수치는 승인 대상 설계 제안이다.
- 2026-10-13 문서 작성: 현재 패널·VM·V2 팝업·호출부·I18n·일반 설정·기존 검증 스크립트를 대조했다. 앱 코드 변경, 빌드, 앱 실행, 서버 요청은 수행하지 않았다.
- 2026-10-13 후속 승인: 사용자가 **“구현 승인”**으로 Phase 7 PRD·계획 구현을 허가했다. 위 승인 대기 기록은 이력으로 보존하며 현재 작업 디렉터리에서 승인된 최소 변경과 검증을 진행한다.
- 2026-10-13 구현 후속: X·V2 종료 팝업·줄바꿈·scoped 용어·VM/caller 정리를 구현했다. 실제 VM 검사, 전체 기존 shell suite, 두 앱 빌드, native 기능 matrix 20개와 추가 반복 1개 및 coordinator 핵심 시나리오 재실행 1개가 통과했다. Oracle은 코드·VM 로직 범위 APPROVE이며 전체 시각 승인은 아니다.
- **[blocked] 추가 범위 결정 필요:** 가로 화면 + 최대 Dynamic Type에서 변경 없는 `SodaV2ActionModal`의 본문과 버튼이 잘려 경고 두 번째 문장과 동작명이 보이지 않는다(`REV-P7-001`). 공용 컴포넌트 수정은 승인 범위 밖이므로 수정하지 않았다. 이 제한 수용 또는 공용 팝업의 큰 글자 대응 수정 승인 전까지 최종 완료로 표시하지 않는다. 상세 증거는 `reviews/phase7-auth-settings-exit.md` 참조.
- 2026-10-13 `P7-R1` 승인: 사용자 **“최소한 수정”**으로 공용 `SodaV2ActionModal`의 큰 글자 레이아웃 최소 보정을 승인했다. 공용 modal 무변경 제약은 이번 결함 보정에 한해 해제한다. 기본 크기 디자인·문구·버튼 순서·색상·callback은 보존하고, 글자 크기 제한으로 우회하지 않는다. 화면 공간에 맞춘 크기와 줄바꿈·필요한 overflow 처리만 허용한다.
- 2026-10-14 `P7-R1` 완료: 공용 modal 한 파일(+46/-22, 순증24줄)을 수정해 접근성 글자에서 가용 폭·자연 높이를 사용하고 넘치는 제목/본문만 스크롤한다. 버튼은 고정되며 기본340pt 디자인·동작은 보존한다. 최대 글자 가로/375pt세로와 기본 크기·단일/두 버튼 native 검증, 현재 소스의 두 앱 빌드·전체 shell suite 및 독립 기능 APPROVE/집중 시각 PASS를 확인했다. `REV-P7-001`은 해결됐으며 이전 보류 기록은 이력이다.
- 검증 한계: 실제 VoiceOver 제스처와 실서버7경로 통합은 미실행이다. native 접근성 노드와 VM doubles를 그 증거로 확대하지 않는다. 기존 일본어 단어 중간 줄바꿈은 의미 생략이 없는 경미 사항으로 유지했다. QA 앱·runner·기기·설정은 정리했다.