반응형

Google Drive는 구글이 제공하는 클라우드 스토리지 서비스로, 파일 저장, 공유, 동기화 등의 기능을 제공합니다. 다양한 애플리케이션에서 Google Drive API를 활용하여 연계하면 클라우드 기반 데이터 관리 및 작업 자동화가 가능합니다. 이 글에서는 Google Drive API를 사용하여 파일 업로드, 다운로드, 관리 등을 구현하는 방법을 자세히 설명합니다.


1. Google Drive 연계의 필요성

Google Drive와의 연계는 다음과 같은 장점이 있습니다.

  1. 데이터의 클라우드 관리:
    • 중요한 데이터를 클라우드에 안전하게 저장하고 여러 장치에서 접근 가능.
  2. 실시간 협업 가능:
    • 문서, 파일을 공유하고 여러 사용자가 동시에 작업 가능.
  3. 자동화:
    • API를 통해 파일 업로드, 정리, 다운로드 등의 작업을 자동화.
  4. 플랫폼 독립성:
    • Google Drive는 Windows, Mac, iOS, Android 등 다양한 환경에서 지원.

2. Google Drive API 연계 개요

Google Drive와 연계하려면 Google Drive API와 OAuth 2.0 인증을 사용해야 합니다. 주요 작업 단계는 다음과 같습니다.

  1. Google Cloud Platform에서 API 사용 설정.
  2. OAuth 2.0 인증을 통한 액세스 권한 요청.
  3. Google Drive API를 호출하여 파일 및 폴더 관리.

3. Google Drive API 설정

3.1 Google Cloud Console에서 API 설정

1) 프로젝트 생성

  • Google Cloud Console에 로그인합니다.
  • 프로젝트 만들기를 선택하고 프로젝트 이름을 입력합니다.

2) API 사용 설정

  • API 및 서비스 > 라이브러리로 이동.
  • Google Drive API를 검색하고 활성화합니다.

3) OAuth 동의 화면 구성

  • API 및 서비스 > OAuth 동의 화면으로 이동.
  • 사용자 유형을 선택합니다. (일반적으로 내부 또는 외부)
  • 앱 이름, 이메일, 권한 등을 설정합니다.

4) OAuth 클라이언트 ID 생성

  • API 및 서비스 > 인증 정보 > + 인증 정보 만들기를 선택.
  • OAuth 클라이언트 ID를 선택.
  • 애플리케이션 유형을 설정합니다. (예: 데스크톱 앱, 웹 애플리케이션 등)
  • 생성 후 클라이언트 ID클라이언트 비밀을 저장합니다.

3.2 권한 설정

Google Drive API를 사용하려면 적절한 OAuth 2.0 범위를 설정해야 합니다.

  • 기본 범위(Scope):
    • https://www.googleapis.com/auth/drive: 전체 드라이브 액세스.
    • https://www.googleapis.com/auth/drive.file: 사용자 생성/열람 파일에 대한 액세스.
    • https://www.googleapis.com/auth/drive.readonly: 읽기 전용 액세스.

4. OAuth 2.0 인증 구현

Google Drive와 연동하려면 OAuth 2.0 인증을 통해 사용자의 액세스 토큰을 받아야 합니다.

4.1 사용자 인증 요청

다음 URL을 사용하여 인증 요청을 보냅니다.

https://accounts.google.com/o/oauth2/auth?
client_id={클라이언트_ID}&
redirect_uri={리디렉션_URI}&
response_type=code&
scope=https://www.googleapis.com/auth/drive
  • client_id: Google Cloud에서 생성한 클라이언트 ID.
  • redirect_uri: 애플리케이션에서 설정한 리디렉션 URI.
  • scope: API 요청 범위.

4.2 인증 코드 교환

인증 코드(code)를 받은 후 액세스 토큰으로 교환합니다.

POST 요청:

POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded

client_id={클라이언트_ID}
&client_secret={클라이언트_비밀}
&grant_type=authorization_code
&code={인증_코드}
&redirect_uri={리디렉션_URI}

응답 예시:

{
  "access_token": "{액세스_토큰}",
  "expires_in": 3600,
  "refresh_token": "{리프레시_토큰}",
  "scope": "https://www.googleapis.com/auth/drive",
  "token_type": "Bearer"
}

5. Google Drive API 사용법

5.1 파일 업로드

1) 업로드 요청

POST 요청:

POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
Authorization: Bearer {액세스_토큰}
Content-Type: multipart/related; boundary=boundary_string

--boundary_string
Content-Type: application/json; charset=UTF-8

{
  "name": "example.txt",
  "mimeType": "text/plain"
}

--boundary_string
Content-Type: text/plain

파일 내용 예시
--boundary_string--

응답 예시:

{
  "id": "1A2B3C",
  "name": "example.txt",
  "mimeType": "text/plain"
}

2) 대용량 파일 업로드

대용량 파일은 resumable upload 방식을 사용합니다. 파일의 일부를 전송하며 업로드를 완료할 수 있습니다.


5.2 파일 다운로드

GET 요청:

GET https://www.googleapis.com/drive/v3/files/{file_id}?alt=media
Authorization: Bearer {액세스_토큰}

5.3 파일 리스트 조회

GET 요청:

GET https://www.googleapis.com/drive/v3/files
Authorization: Bearer {액세스_토큰}

응답 예시:

{
  "files": [
    {
      "id": "1A2B3C",
      "name": "example.txt"
    },
    {
      "id": "4D5E6F",
      "name": "document.pdf"
    }
  ]
}

5.4 폴더 생성

POST 요청:

POST https://www.googleapis.com/drive/v3/files
Authorization: Bearer {액세스_토큰}
Content-Type: application/json

{
  "name": "NewFolder",
  "mimeType": "application/vnd.google-apps.folder"
}

응답 예시:

{
  "id": "7G8H9I",
  "name": "NewFolder",
  "mimeType": "application/vnd.google-apps.folder"
}

5.5 파일 삭제

DELETE 요청:

DELETE https://www.googleapis.com/drive/v3/files/{file_id}
Authorization: Bearer {액세스_토큰}

6. 코드 예제: Java로 구현

Maven 종속성 추가

<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client</artifactId>
    <version>1.32.1</version>
</dependency>
<dependency>
    <groupId>com.google.oauth-client</groupId>
    <artifactId>google-oauth-client-jetty</artifactId>
    <version>1.32.1</version>
</dependency>
<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-drive</artifactId>
    <version>v3-rev20220703-1.32.1</version>
</dependency>

코드 예제

import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.UserCredentials;

import java.io.FileInputStream;
import java.util.Collections;

public class GoogleDriveExample {
    public static void main(String[] args) throws Exception {
        // OAuth 인증
        GoogleCredentials credentials = UserCredentials.fromStream(new FileInputStream("credentials.json"))
                .createScoped(Collections.singleton(DriveScopes.DRIVE));

        // Drive 서비스 객체 생성
        Drive driveService = new Drive.Builder(
                new com.google.api.client.http.javanet.NetHttpTransport(),
                new com.google.api.client.json.JsonFactory(),
                credentials
        ).setApplicationName("My App").build();

        // 파일 업로드
        File fileMetadata = new File();
        fileMetadata.setName("example.txt");
        File file = driveService.files().create(fileMetadata).execute();

        System.out.println("Uploaded File ID: " + file.getId());
    }
}

7. 결론

Google Drive API는 강력하고 유연한 클라우드 연동 기능을 제공합니다. OAuth 2.0 인증을 통해 안전한 액세스가 가능하며, 파일 업로드, 다운로드, 공유 등 다양한 작업을 자동화할 수 있습니다. 위 내용을 기반으로 여러분의 애플리케이션에서 Google Drive와의 연계를 구현해 보세요!

반응형

+ Recent posts