OAuth 검증 신청 가이드

YouTube 업로드 권한 일반 공개를 위한 절차 기록
최종 작성: 2026년 5월 5일 · MotionStitch Lite

목차

  1. 왜 검증이 필요한가
  2. 사전 준비물 체크리스트
  3. Step 1 — Search Console 도메인 인증
  4. Step 2 — OAuth 동의 화면 브랜딩 등록
  5. Step 3 — 데이터 액세스 스코프 정리
  6. Step 4 — 게시 상태 프로덕션 전환
  7. Step 5 — 데모 동영상 촬영 및 업로드
  8. Step 6 — 검증 폼 작성 및 제출
  9. 제출 후 — 심사 진행 모니터링
  10. 자주 막히는 지점
  11. 실제 제출 정보 (참고)

1. 왜 검증이 필요한가

MotionStitch Lite는 사용자가 만든 영상을 자신의 YouTube 채널에 업로드하는 기능을 제공한다. 이를 위해 OAuth 2.0 권한 범위 https://www.googleapis.com/auth/youtube을 요청한다.

1-1. 스코프 분류

분류예시검증 요구
비민감 (Non-sensitive)profile, email없음
민감 (Sensitive)auth/youtube, gmail.modifyOAuth 검증 필요 (우리 케이스)
제한 (Restricted)gmail.readonly, drive.readonlyOAuth 검증 + CASA 보안 평가 (Tier에 따라 외부 평가 비용 발생 가능)

1-2. 검증을 받지 않으면 어떻게 되나

이 가이드의 결과: MotionStitch Lite는 2026-05-05에 검증을 신청했고, 6단계 자동·수동 심사 항목 중 2개(홈페이지·브랜드 가이드라인)가 즉시 통과한 상태에서 심사 대기 중이다.

2. 사전 준비물 체크리스트

검증 신청 직전까지 다음을 모두 갖춰야 한다.

2-1. 도메인 / 호스팅

2-2. 정적 페이지

2-3. OAuth 클라이언트

2-4. 앱 측

2-5. 데모 영상 환경

3. Step 1 — Search Console 도메인 인증

OAuth 동의 화면에 등록할 도메인은 Google Search Console에서 사전 인증되어야 한다.

Search Console 접속 + 속성 추가

search.google.com/search-console → 좌측 상단 "속성 추가" → "URL 접두어" 선택

URL 입력

예: https://agritool-dev.github.io/MotionStitch_Lite/ (끝에 슬래시 포함)

인증 방법 선택 — HTML 파일

가장 확실한 방법. Google이 제공하는 google[해시].html 파일을 다운로드.

파일을 docs 루트에 배치 + 푸시

다운로드한 파일을 docs/ 폴더 루트에 그대로 두고 git commit + push. GitHub Pages에 자동 배포됨 (1~2분 소요).

소유권 확인 클릭

배포 완료 후 Search Console 인증 화면에서 "확인" 클릭. "소유권이 확인되었습니다" 메시지가 뜨면 성공.

주의: github.io 같은 호스팅 서브도메인은 "URL 접두어" 속성으로만 인증된다. "도메인 속성"은 DNS 권한이 GitHub에 있어 사용 불가.

4. Step 2 — OAuth 동의 화면 브랜딩 등록

Google Cloud Console → "Google 인증 플랫폼" → 좌측 메뉴 브랜딩.

4-1. 입력 항목

필드입력값 예시비고
앱 이름 모션스티치 동의 화면 상단에 표시
사용자 지원 이메일 agritool@gmail.com 사용자가 문의할 이메일
앱 로고 app_icon_512.png (정사각형) 120x120 이상, 1MB 이하, JPG/PNG/BMP
애플리케이션 홈페이지 https://agritool-dev.github.io/MotionStitch_Lite/ 홈페이지 URL
애플리케이션 개인정보처리방침 링크 https://agritool-dev.github.io/MotionStitch_Lite/privacy.html 필수
애플리케이션 서비스 약관 링크 https://agritool-dev.github.io/MotionStitch_Lite/terms.html 권장 (없으면 동의 화면에 안내 문구 노출)
승인된 도메인 agritool-dev.github.io Search Console 인증된 호스트명만 (스킴/경로 제외)
개발자 연락처 이메일 agritool@naver.com Google이 검증 관련 메일 발송하는 주소
약관 페이지가 비어있으면: 동의 화면 두 번째 페이지에 "개인정보처리방침 또는 서비스 약관 링크가 표시되지 않는 이유 알아보기" 안내 박스가 노출된다. 기능 차단은 아니지만 어색하므로 약관 페이지를 추가하는 것이 좋다.

5. Step 3 — 데이터 액세스 스코프 정리

Google Cloud Console → 좌측 메뉴 데이터 액세스.

5-1. 코드 vs 콘솔 스코프 일치 확인

앱 코드가 실제로 요청하는 OAuth 스코프와 콘솔에 등록된 스코프가 완전히 일치해야 한다. 불일치 시 검증 단계에서 반려된다.

// lib/services/youtube_auth.dart
static const List<String> scopes = [
  'https://www.googleapis.com/auth/youtube',
];

5-2. 좁은 스코프로 충분한지 점검

YouTube 관련 스코프 사용 시 다음 표를 참고해 꼭 필요한 최소 스코프만 등록한다.

스코프가능 작업불가능 작업
youtube.upload 영상 업로드 (videos.insert) 재생목록 생성/수정, 채널 정보 조회
youtube.readonly 채널/재생목록/영상 메타 조회 모든 쓰기 작업
youtube (전체) 업로드 + 재생목록 생성/추가 + 메타 조회 + 삭제
MotionStitch Lite의 선택: 사용자 요청 기능에 "업로드한 영상을 새 재생목록에 자동 추가"가 포함되므로 playlists.insert + playlistItems.insert가 필수. 이를 위해 youtube 전체 스코프가 최소 필요 스코프다.

5-3. 콘솔 등록 절차

  1. 범위 추가 또는 삭제 클릭
  2. Google이 제공하는 목록에서 코드와 일치하는 스코프(예: auth/youtube) 체크박스 선택. 목록에 없으면 하단 "범위 수동 입력" 필드에 URL 형태로 입력
  3. 중복되거나 더 이상 사용하지 않는 좁은 스코프(예: youtube.upload, youtube.readonly) 체크 해제
  4. 업데이트 → 저장

6. Step 4 — 게시 상태 프로덕션 전환

Google Cloud Console → 대상 메뉴.

6-1. 전환 절차

  1. 게시 상태가 "테스트 중"인 경우 [앱 게시] 버튼 클릭
  2. 다이얼로그: "프로덕션으로 푸시하시겠어요?" → 확인
  3. 게시 상태가 "프로덕션 단계"로 변경됨
  4. 상단에 노란 경고 박스: "앱을 인증해야 합니다. 정보를 구성한 후 검토를 위해 앱을 제출하세요"
주의 — 전환 직후부터:
  • 임의 사용자도 OAuth 로그인 시도 가능 (단, "확인되지 않은 앱" 경고 표시)
  • 테스트 사용자 명단은 의미 없어짐
  • OAuth 사용자 한도 표시는 100명으로 남지만 검증 통과 시 자동 해제됨

7. Step 5 — 데모 동영상 촬영 및 업로드

Google 검증 심사관에게 앱이 OAuth 스코프를 어떻게 사용하는지 시각적으로 증명하는 영상.

7-1. 영상 필수 등장 요소 6가지

#요소심사관 확인 포인트
1OAuth Client ID검증 신청한 앱과 영상이 동일한 앱인지 매칭
2앱 실행 → 동의 화면 진입OAuth 흐름 시작 시점
3동의 화면에서 요청 스코프 표시요청 권한이 명확히 표시되는지
4사용자가 권한 동의 + 진행UI 흐름이 정상
5실제 API 호출이 동작하는 모습요청한 스코프가 실제로 쓰이는지 — 핵심
6결과물이 사용자 본인 계정에 반영된 모습제3자 데이터 접근 아님을 증명

7-2. MotionStitch Lite의 영상 시나리오 (약 2~3분)

  1. 인트로 자막 (Client ID, 패키지명, 스코프)
  2. 앱 실행 → 모션포토 선택
  3. 영상 미리보기 → 영상 생성 → 완료
  4. "YouTube 업로드" 버튼 탭
  5. Google 동의 화면 — auth/youtube 권한 항목 표시(예: "YouTube 계정 보기, 수정, 삭제") + 체크박스 체크 + [계속]
  6. 업로드 화면에서 재생목록 드롭다운 펼치기 (playlists.list 시연)
  7. "새 재생목록 만들기" 선택 (playlists.insert 시연)
  8. 업로드 시작 (videos.insert + playlistItems.insert 시연)
  9. YouTube에서 결과 확인 — 본인 채널 + 새 재생목록에 영상 있음
  10. 마무리 자막 ("All operations on user's own account")

7-3. YouTube 업로드 메타정보

항목입력값
제목App Name — OAuth Verification Demo
공개 설정미등록(Unlisted) — URL 가진 사람만 접근. 일반 검색 노출 안 됨
설명아래 템플릿 참조

설명란 템플릿 (영문)

Demo video for Google OAuth API verification.

App: [앱 이름]
Package: [패키지명]
OAuth Client ID: [전체 Client ID].apps.googleusercontent.com
Scope requested: https://www.googleapis.com/auth/youtube

Privacy Policy: [개인정보처리방침 URL]
Terms of Service: [약관 URL]

This video shows:
- App generates output (no scope used)
- User taps the OAuth-triggering action
- OAuth consent screen displays the requested scope
- App calls [API 1, API 2, ...] on user's own account
- Result on YouTube: data appears in user's own account

All operations are performed on the authenticated user's own
YouTube account. No third-party data is accessed.
No backend server. OAuth tokens are stored only in the
device's OS secure keystore.
YouTube Shorts도 사용 가능: 가로 영상 대신 세로 Shorts(수 분 단위)로 촬영해도 검증 가능. 단, 6요소를 모두 명확히 보이게 시간 배분 필요. MotionStitch Lite는 실제로 Shorts 형식으로 제출했음 (Section 11-1 영상 URL 참조). Shorts는 일반적으로 공개(Public)로 업로드해야 Shorts 피드에 노출되며, Google 검증에서는 미등록(Unlisted)/공개 모두 URL로 접근 가능하면 OK.

8. Step 6 — 검증 폼 작성 및 제출

Google Cloud Console → 인증 센터 → Data access status 카드의 Prepare for verification 버튼.

8-1. 폼 필드

필드설명
범위가 어떤 방식으로 사용되나요? 요청 스코프의 사용 사유 (justification). 1000자 제한, 영문 권장 (심사 속도)
YouTube 링크 (데모 동영상) 위 Step 5에서 업로드한 영상 URL
추가 정보 Play Store 링크, 테스트 계정, 관련 프로젝트 ID 등 (1000자, 선택)

8-2. 정당화 텍스트 작성 원칙

8-3. 인증 설문지 (제출 직전)

제출하여 확인받기 버튼 누르면 설문지 등장. 일반 소비자용 공개 앱 기준 답변:

질문
개인적인 용도로만 사용되나요?아니요
내부 전용인가요?아니요
개발/테스트/스테이징 용도인가요?아니요
WordPress Gmail SMTP 플러그인인가요?아니요

체크박스 2개 (인증 요구사항 확인 + CASA 이해) 모두 체크 후 제출하여 확인받기 클릭.

CASA (Cloud App Security Assessment): 제한 스코프(restricted)를 요청하는 앱만 받는 외부 보안 평가. 민감(sensitive) 스코프만 쓰는 우리 앱은 해당 사항 없음. 체크박스는 단순 이해 진술이므로 체크해도 비용 발생 없음.

9. 제출 후 — 심사 진행 모니터링

9-1. 6단계 심사 항목

인증 센터 → "인증 진행 상황 보기"에서 단계별 상태 확인 가능.

  1. 홈페이지 요구사항 — 자동 (도메인 인증 + URL 응답 확인)
  2. 브랜드 가이드라인 — 자동 (로고/이름/지원 이메일)
  3. 개인정보처리방침 요구사항 — 반자동 (privacy.html 내용 분석)
  4. 앱 기능 — 수동 (데모 영상 시청)
  5. 적절한 데이터 액세스 요구사항 — 수동 (스코프 사용이 설명대로인지)
  6. 최소 범위 요청 — 수동 (좁은 스코프로 대체 가능한지 검토)

9-2. 타임라인

시점일어나는 일
제출 즉시자동 단계 1~2개 통과, 인증 진행 상황 표시
3~5일Google 신용안전팀의 첫 자동 응답 메일
1~6주심사 완료 (승인 / 추가 정보 요청 / 반려)

9-3. 심사 중 절대 하지 말 것

위 변경은 심사를 처음부터 다시 시작시킬 수 있다.

9-4. 결과별 대응

결과대응
승인 (Approved) "확인되지 않은 앱" 경고 사라짐. 작업 종료.
추가 정보 요청 메일 내용 확인 후 보완 자료 답신. 영상 보완·정당화 보강 등.
반려 (Rejected) 사유 분석 후 문제 해결 → 재신청. 흔한 사유: 데모 영상 불충분, 정당화 텍스트 부실, 스코프 과다 요청.

10. 자주 막히는 지점

막힘 1 — "누락된 도메인" 빨간 경고

증상: 브랜딩 페이지 하단에 "누락된 도메인: xxx.com" 표시.

원인: 해당 도메인이 Search Console에서 인증되지 않음.

해결: Step 1 (Search Console 도메인 인증)을 먼저 완료.

막힘 2 — Data access status 카드 회색 잠금

증상: "Prepare for verification" 버튼이 회색이고 클릭 안 됨.

원인: 브랜딩이 아직 인증되지 않았거나 게시 상태가 "테스트 중".

해결: Step 2 (브랜딩) + Step 4 (프로덕션 전환) 먼저 완료.

막힘 3 — 정당화 텍스트 1000자 초과

증상: 폼에 붙여넣었는데 카운터가 빨갛게 1000자 초과.

해결: 영문은 한국어보다 짧게 쓸 수 있음. 각 API 호출 설명을 한 줄로 압축. 군더더기 어휘 제거.

막힘 4 — 데모 영상에 OAuth Client ID가 안 보임

해결:

막힘 5 — 동의 화면이 안 뜸 (이미 로그인된 상태)

해결: 데모 영상 촬영 전에 myaccount.google.com/permissions에서 앱의 액세스 권한 삭제. 그러면 다시 로그인 시 동의 화면이 새로 표시됨.

막힘 6 — 스코프 불일치 (코드 vs 콘솔)

증상: 코드는 auth/youtube를 요청하는데 콘솔에는 youtube.upload+youtube.readonly만 등록.

해결: 둘을 일치시킨다. 일반적으로 콘솔을 코드에 맞춰 조정 (Step 3).

11. 실제 제출 정보 (참고)

MotionStitch Lite가 2026-05-05에 제출한 검증 신청의 핵심 데이터. 향후 재신청 또는 다른 앱 신청 시 참고용.

11-1. 메타데이터

앱 이름모션스티치
패키지명 (Android)com.agritool.motion_stitch_lite
요청 스코프https://www.googleapis.com/auth/youtube
스코프 분류민감 (Sensitive). CASA 불필요
Cloud Project ID916828115892
OAuth 클라이언트 (검증 대상)Android - Play Signing
OAuth Client ID (전체)916828115892-3kaju9rc1t47dj57af74b467sejt668l.apps.googleusercontent.com
승인된 도메인agritool-dev.github.io
지원 이메일agritool@gmail.com
담당자 이메일agritool@naver.com
제출한 데모 영상https://youtube.com/shorts/V25azszjEvw (YouTube Shorts, 공개)

11-2. 제출한 정당화 텍스트 (영문, 905자)

MotionStitch Lite is a free mobile app that generates highlight videos from a user's motion photos and uploads them to the user's own YouTube channel.

auth/youtube is required for these calls on the user's own account:

1. videos.insert — upload the generated video to the user's channel
2. channels.list(mine=true) — confirm upload target is user's own channel
3. playlists.list(mine=true) — show user's existing playlists for selection
4. playlists.insert — create a new playlist on user's request
5. playlistItems.insert — add the uploaded video to the chosen playlist

Narrower scopes are insufficient: youtube.upload cannot create playlists or add items, but our 'auto-add to playlist' feature requires playlists.insert and playlistItems.insert.

The app accesses no other user data (comments, history, subscriptions). No backend server; OAuth tokens stored only in the device's OS keystore.

11-3. 제출 직후 진행 상황

전체 심사 완료까지 최대 4~6주, 첫 자동 응답 메일은 3~5일 내 도착 예정.