Repository navigation
Legal Review
SeHyun edited this page Sep 30, 2026
·
7 revisions
⚠ 법률 자문이 아니다. 코드 · 문서의 사실과 App Store 심사 지침을 대조한 결과다. 기준: 2026-09-30
main(c46ce62) +feat/ui-language-catalog(#163). 갱신: 2026-09-30main(e6b2e5c) — 나라 추정 켬(#164) · IP 미저장 · 방침 · 약관 칸 채움을 반영했다.
결론: 그대로 쓰면 안 된다. 원래 자리표 본문을 번역한 것이라, 사실과 다른 문장이 셋, 빠진 필수 항목이 넷 있다. 본문은 Privacy Policy (draft)로 바꾸고, 앱 안에서는 그 URL로 보내는 것을 권한다.
| 절 | 초안 문장 | 문제 | 실제 |
|---|---|---|---|
| collected | "we ask for your name, learning language, and learning goal" | 사실과 다름 | 온보딩에 입력이 없다. 프로필 값은 고정 자리표 |
| collected | "usage records … correct and incorrect answers and study time" | 사실과 다름 | 학습 기록은 메모리에만 있고 서버로 가지 않는다. 대신 화면 · 유닛 이벤트가 PostHog로 간다 |
| usage | "used only to show you content that suits you" | 사실과 다름 | 분석(PostHog, 미국)에 쓴다. ADR-0029의 확인 필요 항목 |
| usage | "don't share it with partners without your separate consent" | 오해 소지 | 처리 위탁(Supabase · PostHog)을 밝혀야 한다 |
| retention | "Any records left on paper are shredded or incinerated" | 해당 없음 | 종이 기록이 없다. 한국 방침 서식을 옮긴 문장 |
| contact | "Contact menu in the app or by email" | 없는 기능 | 앱에 Contact 메뉴가 없고 이메일도 정해지지 않았다 |
| — | (없음) | 빠짐 | 로그인 제공자에서 받는 정보, 처리 위탁 · 국외 이전, 보유 기간, 음성 · 손글씨 처리, 권리 행사 방법, 연령, 보호책임자 |
| # | 무엇 | 근거 | 할 일 |
|---|---|---|---|
| B1 |
|
App Store 심사 지침 5.1.1(v) — 계정을 만들 수 있으면 앱 안에서 삭제를 시작할 수 있어야 한다 | 설정에 계정 삭제 추가(Supabase 사용자 삭제는 서버 권한이 필요 — Edge Function 등). Apple 로그인 사용자는 토큰 revoke도 권장 |
| B2 | 앱 안에서 방침에 닿지 않는다 | 5.1.1(i) — 앱 안에서 쉽게 접근 가능해야 한다 | 로그인 화면 문구와 설정 「Privacy and terms」를 호스팅 URL로 연결. |
| B3 | 설정의 약관 본문이 사실과 다르다 | 위 1절 | 해결(PR #166) — 임시 본문 화면을 지웠다 |
| B4 | Facebook 로그인 — 데이터 삭제 안내 URL | Meta 앱 설정의 필수 항목(Data Deletion Instructions URL) · 라이브 전환 때 방침 URL도 필요 | 방침 5절(삭제 방법) URL을 넣는다 — 5절을 채웠다(#165) — 호스팅 URL의 5절 앵커를 넣는다 |
| B5 | Google 로그인 — OAuth 동의 화면 | 외부 공개 시 방침 URL · 홈페이지 필요 | 방침 URL을 넣는다 |
-
분석 옵트아웃.2026-09-30 두지 않기로 했다(5절). 이메일 요청으로 처리한다. - 로그인 동의 문구. 「By signing up, you agree to …」가 링크 없는 텍스트다. 링크를 달면 충분하다(체크박스는 필수 아님).
-
토큰 저장. 로그인 토큰이
UserDefaults평문이다. Keychain 이전을 권장 — 방침 6절(Security)의 문장이 더 떳떳해진다. - 한국어 방침. 한국 사용자에게 서비스한다면 한국어판도 두는 편이 좋다(개인정보 보호법 제30조 공개 의무).
추적(Tracking): 아니요 — 광고 · 제3자 데이터 결합 · IDFA 없음.
| Apple 분류 | 항목 | 수집 | 사용자에 연결 | 목적 |
|---|---|---|---|---|
| Contact Info | Name · Email Address | 예 (Google · Facebook 로그인 시. Apple은 이름 · 이메일을 요청하지 않는다 — requestedScopes = []) |
예 | App Functionality |
| Contact Info | Phone Number | 아니요 — 전화 로그인 숨김 중(#158). 되살리면 예 | 예 | App Functionality |
| Identifiers | User ID | 예 | 예 | App Functionality · Analytics |
| Usage Data | Product Interaction | 예 (PostHog) | 예 (로그인 뒤 식별) | Analytics |
| Location | Coarse Location | 예 (PostHog — IP로 나라 · 주 · 시간대 추정, IP는 저장 안 함) | 예 (로그인 뒤 식별) | Analytics |
| Audio Data | — | ⚠ 확인 필요 — 아니요로 볼 가능성이 크다 | — | 개발자 · 제3자 서버로 음성이 가지 않는다. 기기가 온디바이스를 못 하면 iOS의 Apple 음성 인식이 처리한다(방침 1절 · 3절에는 적었다). 라벨에 넣을지는 심사 전에 Apple 기준을 확인 |
| Precise Location · Contacts · Photos · Health · Financial · Purchases | — | 아니요 | — | 젬 결제는 목업 |
- 운영 주체 · 보호책임자 — YEONWOONG JUNG(개인 개발자, Apple 계정 소유자). ⚠ 게시 전에 본인 동의를 받는다
- 문의 이메일 — 서비스 전용 주소를 권장. 방침 · 약관 · App Store · Google · Meta에 같은 주소
- 최소 연령 — 14세, 그 나라 기준이 더 높으면 그 나이(방침 7절 · 약관 1절)
- PostHog 보유 기간 — 무료 요금제 1년(유료는 7년). 기간이 지나면 조회에서 빠질 뿐 물리 삭제 시점은 PostHog가 밝히지 않아, 방침에는 「1년 뒤 분석에 쓰지 않는다」로 적었다. 요금제를 바꾸면 방침을 고친다
- Supabase 리전 — 도쿄(ap-northeast-1). 방침에는 Japan
- 위치 — 나라 · 주 · 시간대만 IP로 추정, IP는 저장하지 않는다(ADR-0029 D15). 라벨에 Coarse Location
- 계정 삭제 구현 방식(B1) — #165: Edge Function이 토큰 검증 → (Apple) 재인증 코드 교환 · 철회 → 사용자 삭제. 방침 4절 · 5절 반영
- 삭제 함수 배포 · Apple 키(.p8) 시크릿 등록(
apps/supabase-functions/README.md) - 계정 삭제 때 PostHog 기록을 지울지 — #165는 (B)까지 구현했다(
reset· 대기열 삭제). (A) PostHog API로 사람 · 이벤트 삭제 (B) 앱에서reset· 대기열 삭제만 하고 무작위 ID로 남김. 어느 쪽이든 앱의reset· 대기열 삭제는 필요하다. 방침 4절 · 5절 문구가 이 선택에 따라 달라진다 — 법률 검토 때 확인 - 앱 안에서 외부 URL을 여는 방식(B2) — 앱 안 브라우저(SFSafariViewController), URL은 호스트에 고정
- 분석 옵트아웃을 둘지 — 두지 않는다(2026-09-30). App Store 심사가 요구하지 않고 법상 필수 조항도 없다. 방침 5절에 「끄는 설정은 없고, 이메일로 요청하면 사용 기록을 계정과 잇지 않는다」고 적고, 요청은 수동으로 처리한다
- 한국어판 방침을 둘지
- 관할 조항(약관 10절) — 법에 따른 관할 + 소비자는 거주국 권리 유지로 적었다. 법률 검토 때 확인