# 🛠️ Google Drive 파일 저장소 설정 가이드

InsuWiki의 파일 첨부 기능은 Google Drive API를 사용합니다. 개인 계정(@gmail.com)을 사용하는 경우 할당량(Quota) 제한 문제로 인해 **OAuth2 설정**이 반드시 필요합니다.

## 1. Google Drive 폴더 ID 확인

1.  파일이 저장될 구글 드라이브 폴더로 이동합니다.
2.  브라우저 주소창의 URL에서 `https://drive.google.com/drive/folders/` 뒤에 오는 문자열이 **폴더 ID**입니다.

## 2. 권한 설정 (계정 유형별)

### 유형 A: 개인 계정 (@gmail.com) - **필수**
개인 계정의 서비스 계정은 기본 할당량이 0이므로, 본인 계정의 저장 공간을 직접 사용하도록 설정해야 합니다.

1.  **Google Cloud Console** -> **Credentials** -> **Create Credentials** -> **OAuth client ID** 생성 (유형: Web application).
    -   여기서 생성된 **Client ID**와 **Client Secret**을 따로 복사해 두세요. (이것이 3번에서 입력할 값입니다)
2.  **Authorized redirect URIs**에 `https://developers.google.com/oauthplayground`를 반드시 추가하고 저장하세요.
    -   > [!WARNING]
    -   이 설정을 빠뜨리면 로그인 시 **"400 오류: redirect_uri_mismatch"**가 발생합니다. 반드시 저장 버튼을 눌러 확정해 주세요.
3.  [OAuth 2.0 Playground](https://developers.google.com/oauthplayground/)에서:
    -   오른쪽 설정(⚙️)에서 **Use your own OAuth credentials** 체크 후, 1번에서 생성한 **Client ID**와 **Client Secret**을 입력합니다.
    -   왼쪽 상단 **Step 1: Select & authorize APIs** 섹션 맨 아래에 있는 **Input your own scopes** 입력란에 `https://www.googleapis.com/auth/drive.file`을 직접 입력합니다.
    -   그 옆의 **Authorize APIs** 파란색 버튼을 클릭합니다.
    -   **Exchange authorization code for tokens** 클릭하여 `Refresh Token` 획득.
4.  아래 환경 변수를 등록합니다 (Vercel 및 `.env.local`).

### 유형 B: Google Workspace (Shared Drive)
조직용 계정은 **공유 드라이브(Shared Drive)**를 생성하고 서비스 계정을 멤버로 추가하면 기존 방식대로 사용 가능합니다.

## 3. 환경 변수 목록

| Key | 설명 |
| :--- | :--- |
| `GOOGLE_DRIVE_FOLDER_ID` | 업로드 폴더 ID |
| `DRIVE_CLIENT_ID` | OAuth2 Client ID (개인 계정용) |
| `DRIVE_CLIENT_SECRET` | OAuth2 Client Secret (개인 계정용) |
| `DRIVE_REFRESH_TOKEN` | OAuth2 Refresh Token (개인 계정용) |

---

## 4. 트러블슈팅 (자주 발생하는 오류)

### `invalid_grant` 에러가 발생한 경우
이 오류는 인증 토큰이 유효하지 않을 때 발생합니다. 다음을 확인하세요:

1.  **Vercel 환경 변수 오타 확인**: 값 앞뒤에 공백이나 `→` 같은 특수문자가 포함되지 않았는지 다시 확인하세요.
2.  **Google Cloud "내부 테스트" 모드 해제**: 
    -   Google Cloud Console의 **OAuth consent screen**으로 이동합니다.
    -   **Publishing status**가 `Testing`인 경우, 발행된 토큰이 **7일 후 만료**됩니다.
    -   **[PUBLISH APP]** 버튼을 눌러 상태를 `In Production`으로 변경하면 토큰이 영구적으로 유지됩니다.
3.  **다시 토큰 발급**: 위 설정을 마친 후 [OAuth Playground](https://developers.google.com/oauthplayground/)에서 토큰을 다시 발급받아 환경 변수를 업데이트하세요.

### `unauthorized_client` 에러가 발생한 경우
이 오류는 **Client Secret**이 정확하지 않거나, 토큰을 발급받을 때 사용한 정보와 앱에 설정된 정보가 다를 때 발생합니다.

1.  **Client Secret 재확인**: Google Cloud Console의 [사용자 인증 정보](https://console.cloud.google.com/apis/credentials) 페이지에서 해당 클라이언트 ID의 `클라이언트 보안 비밀번호`를 복사하여 Vercel의 **`DRIVE_CLIENT_SECRET`**에 정확히 붙여넣었는지 확인하세요.
2.  **Playground 설정 확인**: OAuth Playground의 우측 상단 **⚙️ 아이콘**을 눌러 `Use your own OAuth credentials` 체크박스가 켜져 있고, 여기에 입력한 ID/Secret이 Vercel에 넣은 것과 **완전히 동일**한지 확인하세요.
3.  **값 앞뒤 공백 제거**: Vercel에 값을 붙여넣을 때 앞뒤에 빈 칸(스페이스)이 포함되지 않도록 주의하세요.

> [!IMPORTANT]
> **"Service Accounts do not have storage quota"** 에러가 발생한다면, 이는 서비스 계정의 저장 공간이 없다는 뜻입니다. 반드시 위의 **유형 A (OAuth2)** 방식을 사용하여 본인 계정의 할당량을 사용하도록 설정하세요.
