OAuth 개념 Q&A

관리자의 Client ID로 다른 사용자 계정이 로그인해도 되는 이유

2026-07-27 · 개념 Q&A

Q. 코드에 심어놓은 Client ID·API Key는 관리자 것인데, 사용자들의 계정은 다르다 — 문제 없나? 관리자 계정과 사용자 계정의 관계와 무관하게 적용 가능한가?

A. 문제 없다. 관리자 계정과 사용자 계정 사이에 아무 관계가 없어도 되고, 오히려 그렇게 설계된 표준 구조다. 아래 개념 순서대로 이해하면 된다.

1. Client ID는 "계정의 열쇠"가 아니라 "앱의 신분증"

OAuth에는 세 주체가 있다:

주체이 프로젝트에서가진 것
앱 (클라이언트)러닝 누적기록 웹앱Client ID = "저는 이 앱입니다"라는 신분증
사용자 (리소스 소유자)각 사용자자기 구글 계정 · 자기 드라이브
Google (인증 서버)—동의 화면을 띄우고 토큰을 발급

Client ID가 관리자의 Google Cloud 프로젝트에서 발급된 것은 맞지만, 이 값에는 관리자 계정의 어떤 권한도 들어있지 않다. 관리자의 드라이브·이메일·비밀번호와 완전히 무관하며, "이 앱이 어느 앱인지"를 Google에 알려주는 라벨일 뿐이다. 그래서 공개해도 안전한 값이고 코드에 심어도 되는 것이다.

2. 실제 권한은 "사용자별 토큰"이 담는다

사용자 A가 로그인 버튼을 누르면:

A의 브라우저 → Google : "Client ID ○○인 앱이, 지금 로그인한 A의
                          drive.file 권한을 요청합니다"
Google → A에게 동의 화면 : "러닝 누적기록 앱이 회원님의 드라이브 파일에
                          접근하려 합니다. 허용?"
A가 허용 → Google이 "A 전용 액세스 토큰"을 A의 브라우저에만 발급
💡 비유: Client ID는 "○○은행 앱"이라는 앱 서명이고, 로그인은 각자 자기 계좌에 자기 지문으로 접속하는 것. 앱을 만든 사람이 은행 앱을 배포했다고 해서 고객 계좌에 들어갈 수 없는 것과 같다.

3. 관리자 프로젝트가 "책임"지는 것

관리자 계정과 사용자 계정의 유일한 연결고리는 다음 3가지 — 전부 데이터 접근과는 무관하다:

  1. 동의 화면의 얼굴 — 사용자가 보는 앱 이름·로고는 관리자가 동의 화면에 설정한 값.
  2. 게시 상태 — 프로젝트가 '테스트' 상태면 등록된 테스트 사용자만 로그인 가능. '프로덕션' 게시여야 아무 구글 계정이나 로그인 가능(비민감 스코프만 쓰므로 심사 없이 전환 가능).
  3. API 할당량(quota) 공유 — API 호출 한도는 프로젝트 단위로 집계된다. Drive API 기본 할당량은 분당 수천~수만 건 수준이라 이 앱의 패턴(저장 시 업로드 1건 · 60초 폴링)으로는 걱정할 수준이 아니며, 초과해도 과금이 아니라 일시적 속도 제한이 걸릴 뿐이다.

4. API Key는 뭔가

API Key는 OAuth와 별개로, Picker(파일 선택창) 위젯을 로드할 때 "이 호출이 어느 프로젝트 소속인지" 식별하는 용도다. 이 키로는 누구의 데이터에도 접근할 수 없다. 도메인 제한(승인된 웹사이트에서만 동작)을 걸어두면 다른 사이트의 도용도 막힌다.

5. 결론