4.3 KiB
4.3 KiB
App Store 심사 대응 — 커뮤니티 UGC 안전장치 (Guideline 1.2)
작성일: 2026-07-15
관련 커밋: sb-backend 0b027b3, sb-front 9b89d0b
배경 — 애플 심사 거부 내역
첫 제출(1.0) 심사에서 아래 사유로 거부됨.
- Guideline 2.3.6 (Accurate Metadata) — 연령 등급의 "In-App Controls"(Parental Controls / Age Assurance)를 선택했으나 앱에 해당 기능 없음 → App Store Connect 연령 등급에서 두 항목 None 으로 변경 (코드 아님, 콘솔 작업)
- Guideline 2.1(a) (Information Needed) — 데모 계정 + 커뮤니티/짠테크 수다방/재테크 팁에 콘텐츠 필요 → 데모 계정 등록 + 샘플 콘텐츠 채우기 (콘솔/데이터 작업)
- Guideline 1.2 (User-Generated Content) — UGC 안전장치 미비 ← 이번 코드 작업 대상
Guideline 1.2 요구사항 대비 구현 현황
| 요구사항 | 상태 | 구현 |
|---|---|---|
| EULA 동의(가입/로그인 전) | 기존+보강 | 가입 모달 동의 + 로그인 모달 동의 게이트 신설 |
| EULA 내 "무관용" 문구 | 신규 | 이용약관 제6조의2 추가 |
| 부적절 콘텐츠 필터 | 신규 | ContentFilter (작성/수정/댓글 차단) |
| 콘텐츠 신고(flag) | 기존 | reportPost/reportComment (5건 누적 블라인드) |
| 악성 사용자 차단(block) | 신규 | user_block — 차단 즉시 숨김 + 운영자 통지 |
| 24h 내 삭제/퇴출 | 기존 | 관리자 신고관리 + 회원 상태(이용정지/퇴출) |
변경 파일
백엔드 (sb-backend / 로컬 sb_bt)
db/board.sql—user_block테이블 추가 (CREATE TABLE IF NOT EXISTS, 멱등)board/service/ContentFilter.java(신규) — 욕설·비방 등 금지어 필터, 정규화 후 부분일치board/dto/BlockedUser.java,board/dto/UserBlockNotice.java(신규)board/mapper/UserBlockMapper.java+mapper/UserBlockMapper.xml(신규) — 차단 CRUD/조회board/service/BoardService.java— 차단 메서드, 목록/상세/댓글에 viewer 기준 차단 필터, ContentFilter 연동board/controller/BoardController.java— 차단 API (/board/users/{id}/block|unblock,/board/blocks,/board/user-blocks)board/mapper/PostMapper.*,CommentMapper.*— 목록/댓글 쿼리에NOT EXISTS user_block필터 (viewerId)
프론트 (sb-front)
constants/terms.js— 무관용 정책 조항(제6조의2), 시행일 2026-07-15components/LoginModal.vue— 로그인 전 약관 동의 체크박스(아이디·구글·애플 공통 게이트)api/boardApi.js— 차단 API 4종views/board/BoardDetailView.vue— 글·댓글 🚫차단 버튼 + 로직views/settings/BlockedUsersView.vue(신규) +router/index.js— 차단 사용자 관리 화면/settings/blockedviews/settings/SettingsView.vue— "차단한 사용자" 메뉴 링크views/admin/ReportAdminView.vue— 사용자 차단 통지 섹션
배포 메모
- 백엔드 프로덕션은
SQL_INIT_MODE=always→ 재기동 시board.sql의user_block자동 생성(멱등). main푸시 시 Gitea Actions 자동 배포.
⏳ 미해결 / 남은 작업 (다음 세션)
- 배포 SSH 인증 실패 — Deploy 워크플로가
Permission denied (publickey,password)로 실패 중.- root + 공개키 서버 등록됨, 로컬
ssh -i ~/deploy_key root@115.68.231.167접속은 성공. - 새 ed25519 키 발급 → 서버 authorized_keys 등록 → Gitea
DEPLOY_SSH_KEY시크릿 교체했으나 재실행 여전히 동일 실패. - 추정: 러너가 받는 시크릿 값이 실제 키와 다름(저장 안 됨 / org-level 시크릿 shadowing 등).
- 다음: 러너가 쥔 개인키 지문(fingerprint) 확인으로 확정 → 로컬
ssh-keygen -lf ~/deploy_key와 비교. org/repo 시크릿 위치 점검.
- root + 공개키 서버 등록됨, 로컬
- iOS 재제출
cd sb-front && npm run cap:sync→ Xcode 빌드 번호 1.0(3) 올려 업로드- 실기기 화면 녹화: ①로그인 전 약관 동의 ②신고 ③차단
- App Review Information Notes 에 영상 + 데모 계정(콘텐츠 포함) 첨부
- 연령 등급 In-App Controls → None 확인
- App Store Connect — 커뮤니티/짠테크 수다방/재테크 팁 샘플 콘텐츠 채우기, 데모 계정 로그인 검증