Google Drive 폴더 구조, Apps Script로 손쉽게 트리 형태로 만들기 (파일 포함)

Google Drive를 사용하다 보면 특정 폴더의 전체 구조를 한눈에 파악하거나 다른 사람에게 공유해야 할 때가 있습니다. 하지만 아쉽게도 Google Drive 자체에는 폴더 구조만을 깔끔하게 트리 형태로 보여주거나 내보내는 기능이 기본으로 제공되지 않습니다.

하지만 방법이 없는 것은 아닙니다! Google Workspace의 강력한 자동화 도구인 Google Apps Script를 활용하면, 몇 줄의 코드로 내 드라이브의 폴더와 파일 구조를 원하는 형태로 만들 수 있습니다.

이 글에서는 Google Drive의 특정 폴더 (또는 전체 드라이브)의 폴더 및 파일 구조를 텍스트 기반 트리 형태로 추출하는 Google Apps Script와 그 사용 방법을 공유하고자 합니다.

왜 기본 기능이 없을까? 그리고 Apps Script가 필요한 이유

"이렇게 유용한 기능이 왜 기본으로 없을까?" 궁금하실 수 있습니다. 몇 가지 이유를 추측해볼 수 있습니다:

  • 범용성: 모든 사용자에게 필요한 기능은 아닐 수 있습니다. Google은 핵심 기능 위주로 인터페이스를 간결하게 유지하려는 경향이 있습니다.
  • 성능: 매우 큰 드라이브의 경우, 전체 구조를 스캔하는 데 많은 자원이 소모될 수 있습니다.
  • Apps Script의 존재: Google은 Apps Script를 통해 사용자가 직접 필요한 기능을 맞춤 설정할 수 있도록 강력한 도구를 제공하고 있습니다.

Apps Script를 사용하면 다음과 같은 장점이 있습니다.

  • 원하는 폴더만 선택 가능
  • 파일 포함 여부 결정 가능
  • 출력 형식 커스터마이징 가능 (이 글에서는 텍스트 트리)

Google Apps Script 코드

아래는 지정된 폴더 ID를 기준으로 하위 폴더와 파일 목록을 트리 형태로 Logger.log (스크립트 편집기 내 로그)에 출력하는 코드입니다.

/**
 * 지정된 Google Drive 폴더의 폴더 및 파일 구조를 트리 형태로 로그에 출력합니다.
 * 맞춤 메뉴를 생성하여 Google Sheets, Docs 등에서 쉽게 실행할 수 있도록 합니다.
 */

// 스크립트가 연결된 문서(예: Google Sheets)가 열릴 때 맞춤 메뉴를 생성합니다.
function onOpen() {
  var ui = SpreadsheetApp.getUi(); // 또는 DocumentApp.getUi(), SlidesApp.getUi() 등 사용 환경에 맞게 변경
  ui.createMenu('🚀 Drive 도우미') // 메뉴 이름
      .addItem('선택 폴더 구조 보기', 'promptForFolderIdAndListTree') // 메뉴 항목 이름과 실행할 함수
      .addToUi();
}

// 사용자에게 폴더 ID를 입력받아 폴더/파일 트리를 생성하는 함수
function promptForFolderIdAndListTree() {
  var ui = SpreadsheetApp.getUi(); // 또는 DocumentApp.getUi() 등

  var result = ui.prompt(
      '폴더 구조 보기',
      '폴더 ID를 입력하세요 (비워두면 최상위 드라이브부터 시작):',
      ui.ButtonSet.OK_CANCEL);

  var button = result.getSelectedButton();
  var folderId = result.getResponseText();

  if (button == ui.Button.OK) {
    listFolderTreeWithFiles(folderId.trim()); // 입력받은 ID로 함수 호출
  } else if (button == ui.Button.CANCEL) {
    ui.alert('취소되었습니다.');
  } else {
    // 닫기 버튼 등
  }
}

// 메인 함수: 폴더 및 파일 트리를 로깅합니다.
function listFolderTreeWithFiles(rootFolderId) {
  var rootFolder;

  if (rootFolderId && rootFolderId !== '') {
    try {
      rootFolder = DriveApp.getFolderById(rootFolderId);
    } catch (e) {
      Logger.log('오류: 잘못된 폴더 ID이거나 접근 권한이 없습니다. ' + e.toString());
      SpreadsheetApp.getUi().alert('오류', '잘못된 폴더 ID이거나 접근 권한이 없습니다. ID와 권한을 확인해주세요.', SpreadsheetApp.getUi().ButtonSet.OK);
      return;
    }
  } else {
    rootFolder = DriveApp.getRootFolder(); // ID가 없으면 내 드라이브 최상위 기준
    Logger.log('알림: 폴더 ID가 지정되지 않아 내 드라이브 최상위부터 시작합니다. 시간이 오래 걸릴 수 있습니다.');
  }

  Logger.log('📂 폴더 및 파일 트리: ' + rootFolder.getName() + ' (ID: ' + rootFolder.getId() + ')');
  // 최상위 폴더의 파일 먼저 나열
  logFiles(rootFolder, '📄 '); // 파일 접두사 변경
  // 그 다음 하위 폴더 처리
  getChildFoldersAndFiles(rootFolder, ''); // 초기 들여쓰기는 없음
  Logger.log('✅ 작업 완료!');
  SpreadsheetApp.getUi().alert('성공', '폴더 구조를 로그에 출력했습니다. (보기 > 로그)', SpreadsheetApp.getUi().ButtonSet.OK);
}

// 특정 폴더 내의 파일 목록을 로깅하는 함수
function logFiles(folder, indentPrefix) {
  var files = folder.getFiles();
  var fileIndent = indentPrefix;
  while (files.hasNext()) {
    var file = files.next();
    Logger.log(fileIndent + file.getName() + ' (ID: ' + file.getId() + ')');
  }
}

// 하위 폴더와 해당 폴더 내의 파일들을 재귀적으로 로깅하는 함수
function getChildFoldersAndFiles(parentFolder, indent) {
  var childFolders = parentFolder.getFolders();

  while (childFolders.hasNext()) {
    var childFolder = childFolders.next();
    Logger.log(indent + '📁├── ' + childFolder.getName() + ' (ID: ' + childFolder.getId() + ')');

    // 현재 폴더(childFolder) 내부의 파일들을 로그에 기록 (들여쓰기 및 파일 접두사 적용)
    logFiles(childFolder, indent + '│   📄 ');

    // 하위 폴더가 더 있으면 재귀 호출 (다음 레벨 들여쓰기 추가)
    getChildFoldersAndFiles(childFolder, indent + '│   ');
  }
}

주요 변경점 및 설명:

  • onOpen(): Google Sheets, Docs 등에서 문서를 열 때 '🚀 Drive 도우미'라는 맞춤 메뉴를 생성합니다.
  • promptForFolderIdAndListTree(): 메뉴 클릭 시 사용자에게 폴더 ID를 입력받는 대화상자를 띄웁니다. ID를 입력하지 않으면 최상위 드라이브부터 시작합니다.
  • listFolderTreeWithFiles(rootFolderId): 핵심 로직이 담긴 함수입니다. 폴더 ID 유효성을 검사하고, 루트 폴더부터 파일 및 하위 폴더 탐색을 시작합니다.
  • 기호 변경: 폴더는 📁├──, 파일은 📄 로 시작하여 가독성을 높였습니다.
  • 알림: 작업 시작 및 완료 시 간단한 알림창을 띄웁니다.

스크립트 사용 방법

  1. 스크립트 편집기 열기:
    • Google Sheets (추천), Google Docs 또는 Google Drive 홈 화면에서 새로 만들기 > 더보기 > Google Apps Script를 선택합니다.
    • 기존 Google Sheets 또는 Docs 파일에 추가하려면 해당 파일을 열고 확장 프로그램 > Apps Script를 클릭합니다.
  2. 코드 복사 및 붙여넣기:
    • 위에 제공된 전체 코드를 복사하여 스크립트 편집기의 Code.gs 파일에 붙여넣습니다. (기존에 있던 내용은 모두 삭제해도 됩니다.)
  3. 스크립트 저장:
    • 스크립트 편집기 상단의 저장 아이콘(💾)을 클릭하거나 Ctrl+S (또는 Cmd+S)를 눌러 스크립트를 저장합니다. 프로젝트 이름을 지정하라는 메시지가 나오면 적절한 이름을 입력합니다.
  4. 스크립트 실행 (처음 실행 시 권한 부여 필요):
    • 방법 1: 메뉴 사용 (추천)
      1. 스크립트를 저장한 Google Sheets 또는 Docs 파일을 새로고침하거나 다시 엽니다.
      2. 상단 메뉴에 '🚀 Drive 도우미'가 나타납니다.
      3. '🚀 Drive 도우미' > '선택 폴더 구조 보기'를 클릭합니다.
      4. 폴더 ID를 입력하는 창이 나타납니다.
        • 특정 폴더의 구조를 보려면: 해당 폴더를 Google Drive에서 열었을 때 URL의 folders/ 뒤에 있는 문자열(예: 1a2b3c4d5e6f7g8h9i0j)을 입력합니다.
        • 내 드라이브 전체 구조를 보려면: 입력창을 비워두고 '확인'을 누릅니다. (주의: 드라이브 크기에 따라 매우 오래 걸리거나 시간제한으로 중단될 수 있습니다.)
    • 방법 2: 스크립트 편집기에서 직접 실행 (테스트용)
      1. 스크립트 편집기 상단의 함수 선택 드롭다운에서 promptForFolderIdAndListTree 또는 listFolderTreeWithFiles를 선택합니다. (listFolderTreeWithFiles를 직접 실행하려면 코드 내 rootFolderId를 직접 지정해야 합니다.)
      2. 실행(▶) 버튼을 클릭합니다.
  5. 권한 부여 (최초 1회):
    • 스크립트를 처음 실행하면 '권한 필요' 대화상자가 나타납니다.
    • 권한 검토를 클릭하고, 스크립트를 실행할 Google 계정을 선택합니다.
    • '이 앱은 Google에서 확인하지 않았습니다.'라는 경고가 표시될 수 있습니다. 직접 작성한 스크립트이므로 고급을 클릭하고 (프로젝트 이름)(으)로 이동 (안전하지 않음)을 선택하여 권한을 부여합니다.
    • 요청하는 권한(Google Drive 파일 보기 및 관리 등)을 확인하고 허용을 클릭합니다.
  6. 결과 확인:
    • 스크립트 실행이 완료되면 "성공" 알림창이 뜹니다.
    • 스크립트 편집기에서 보기 > 로그 (단축키: Ctrl+Enter 또는 Cmd+Enter)를 클릭하면 실행 로그 창에 폴더와 파일 구조가 트리 형태로 출력된 것을 확인할 수 있습니다.
    📂 폴더 및 파일 트리: 내 드라이브 (ID: 0Axxxxxxxxxxxxxxxxx)
    📄 내 드라이브 최상위 파일1.gdoc (ID: 1B...)
    📄 내 드라이브 최상위 이미지.jpg (ID: 1C...)
    📁├── 중요 문서 (ID: 1D...)
    │   📄 계약서_v1.pdf (ID: 1E...)
    │   📄 발표자료_최종.gslides (ID: 1F...)
    │   📁├── 이전 버전 (ID: 1G...)
    │   │   📄 계약서_v0.9.pdf (ID: 1H...)
    📁├── 프로젝트 A (ID: 1I...)
    │   📄 계획안.docx (ID: 1J...)
    │   📄 참고자료.zip (ID: 1K...)
    ✅ 작업 완료!

추가 활용 팁

  • 출력 위치 변경: Logger.log() 대신 DocumentApp.getActiveDocument().getBody().appendParagraph() 등을 사용하면 결과를 Google Docs 문서에 직접 작성할 수도 있습니다. 또는 Google Sheets에 행별로 정리할 수도 있습니다.
  • 특정 조건 필터링: 스크립트를 수정하여 특정 이름의 파일/폴더만 포함하거나 제외할 수 있습니다.
  • HTML 출력: HtmlService를 사용하면 접고 펼 수 있는 동적인 트리 뷰를 웹 앱이나 사이드바로 만들 수도 있습니다.

마무리

Google Apps Script를 사용하면 Google Drive의 폴더 구조를 원하는 대로 추출하고 관리하는 데 큰 도움이 될 수 있습니다. 처음에는 조금 복잡해 보일 수 있지만, 한번 설정해두면 반복적인 작업을 자동화하여 시간을 절약할 수 있습니다. 이 글이 여러분의 Drive 생활에 조금이나마 도움이 되었기를 바랍니다!

+ Recent posts