티스토리 뷰

반응형

1. 현재 방식 (OAuth2 사용자 인증):
특정 Google 계정과 직접 연동됩니다.
Refresh Token을 사용해 만료된 Access Token을 갱신해야 합니다.
일반 사용자가 인증을 통해 Google Drive에 접근하는 구조입니다.
클라이언트 계정을 사용하기 때문에 인증 URL로 리디렉션 및 인증 과정이 필요합니다.


2. 서비스 계정:
특정 사용자가 아닌 서버에서 Google Drive를 관리하는 데 적합합니다.
인증 과정이 필요 없으며, JSON 키 파일로 인증이 자동으로 이루어집니다.
서버 전용 Google Drive 공간을 사용하는 구조입니다.
**공유 드라이브(Shared Drive)**와 연동하거나 파일/폴더에 대해 접근 권한을 명시적으로 추가해야 할 수도 있습니다.

이 부분을 잘 몰라서 많은 시간을 허비했습니다.

코드를 분석한 결과, 작성하신 코드 대부분이 Google Drive API를 사용하여 파일 업로드, 다운로드, 썸네일 표시, 삭제 등의 기능을 잘 처리하고 있습니다. 서비스 계정을 활용하지 않고 클라이언트 계정을 사용하는 현재 구조에서는 다음 사항을 보완하면 더 안정적이고 실용적으로 개선할 수 있습니다.

개선 및 확인 사항
refresh_token 갱신 및 자동화

isAccessTokenExpired에서 토큰 만료 시 오류가 반복 발생할 수 있습니다.

Refresh Token이 유효하지 않거나 만료될 가능성을 대비해, 특정 조건에서 인증 URL로 리다이렉트하지 않고 사용자 경험을 유지할 수 있도록 합니다.

서비스 계정을 도입하면 이 문제를 해결할 수 있습니다.

대안: 서비스 계정을 도입해 refresh_token 문제를 근본적으로 제거하거나, 현재 방식 유지 시 unlink 처리를 최종적으로만 실행.

썸네일 URL 처리

현재 썸네일 URL을 생성하는 방식은 적합하며, 썸네일이 제공되지 않을 경우 기본 파일 URL을 사용하는 논리가 잘 구성되어 있습니다.
삭제 로직

파일 삭제 시 파일 ID만 전달하도록 구현되어 있으며, delPicFn 함수에서도 해당 ID를 추출해 사용하는 방식이 적절합니다.

require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';

// 서비스 계정 JSON 키 파일 경로
putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json');

// Google 클라이언트 설정
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Drive::DRIVE);

$service = new Google_Service_Drive($client);

// Google Drive에서 파일 목록 가져오기
$folderId = 'YOUR_FOLDER_ID'; // 대상 Google Drive 폴더 ID
$query = "'$folderId' in parents and trashed=false";

$results = $service->files->listFiles([
    'q' => $query,
    'fields' => 'files(id, name, thumbnailLink)'
]);

if (count($results->getFiles()) == 0) {
    echo "파일이 없습니다.";
} else {
    foreach ($results->getFiles() as $file) {
        echo "파일 이름: " . $file->getName() . "<br>";
        echo "썸네일: " . $file->getThumbnailLink() . "<br>";
    }
}



썸네일 이미지가 너무 작거나 비율이 이상해질 경우를 대비하여 CSS에 object-fit: cover; 속성을 추가해 이미지를 깔끔하게 보이도록 조정.

전환이 필요한 경우
인증 과정이 사용자에게 불편하다면 서비스 계정으로 전환이 적합합니다.
대규모 파일 관리나 다수 사용자 사이트에 파일 업로드/다운로드 기능을 제공하려는 경우에도 서비스 계정이 유리합니다.
현재 코드는 사용자 인증 기반이므로 인증 URL 리디렉션이 불가피합니다. 서비스 계정으로 전환하면 인증 과정 없이 보다 안정적으로 Google Drive를 사용할 수 있습니다. 필요한 경우 서비스 계정으로 변경하는 작업도 도와드릴 수 있습니다! 😊


서비스 계정을 사용하는 것은 OAuth2.0 사용자 인증 방식과 목적이 다릅니다. 이를 이해하려면 두 방식의 주요 차이점과 서비스 계정의 고유한 특징을 명확히 파악해야 합니다.

1. OAuth2.0 사용자 인증 방식
주요 특징:

사용자가 직접 인증을 수행해야 합니다.
사용자의 Google Drive에 접근하기 위해 권한 승인이 필요합니다.
사용자의 이메일과 비밀번호를 직접 사용하지 않고, Google 계정으로 토큰을 발급받습니다.
사용자의 Google Drive 내 폴더와 파일에 접근할 수 있습니다.


장점:

개인 계정에 접근이 용이하며, 사용자가 인증을 완료하면 모든 작업이 간단히 이루어집니다.
파일 업로드와 관련된 복잡한 설정이 거의 필요하지 않습니다.


단점:

사용자가 직접 인증해야 하므로 비즈니스 환경에서는 자동화가 어렵습니다.
특정 계정에서만 파일 관리를 수행해야 할 경우 불편합니다.


2. 서비스 계정 방식
주요 특징:
Google Workspace(이전의 G Suite) 환경에서 조직 내 리소스에 접근하거나 관리 작업을 자동화하는 데 주로 사용됩니다.
Google이 제공하는 독립적인 "봇 계정"입니다.
사용자와 별도로 동작하며, 특정 Google Drive 폴더에 접근할 권한을 수동으로 부여해야 합니다.
장점:
자동화가 가능하며, 사용자가 개입할 필요가 없습니다.
조직이나 프로젝트별로 접근 권한을 중앙화하여 관리할 수 있습니다.


단점:
서비스 계정이 Google Drive에 접근하려면 권한을 명시적으로 설정해야 합니다.
기본적으로 서비스 계정은 Google Drive를 사용할 수 없으며, 수동으로 폴더 공유를 통해 권한을 부여해야 합니다.
인증 설정이 OAuth2.0보다 복잡할 수 있습니다.

 

반응형
댓글