본문 바로가기
돈 버는 도구들

실전 워크플로우 & 자동화 심화 2 - 귀찮은 이메일 첨부파일 다운로드, 이제 자동화하세요! (Gmail & 구글 드라이브 연동)

by 디지털일잘러 2025. 7. 27.
728x90
반응형
이메일 첨부파일, 아직도 일일이 저장하고 계신가요? 중요한 청구서, 계약서, 보고서가 담긴 첨부파일을 놓치거나, 찾기 위해 받은 편지함을 전부 뒤지는 불편함, 이제 끝낼 수 있습니다. Gmail 라벨과 Google Drive를 연동하여 첨부파일을 자동으로 분류하고 백업하는 방법을 알아보세요!

매일 쏟아지는 이메일 속에서 중요한 첨부파일을 관리하는 건 정말 번거로운 일이죠. 특히 '세금계산서', '계약서'처럼 꼭 보관해야 하는 파일들은 나중에 찾으려면 한숨부터 나오더라고요. 저도 예전에는 중요한 메일에 별표 표시를 해두고, 나중에 하나씩 파일을 내려받아 폴더에 정리하곤 했는데요. 솔직히 말해서, 너무 귀찮고 시간도 많이 걸렸어요. 깜빡하고 놓치는 경우도 부지기수였고요. 😥

그래서 오늘은 저와 같은 고민을 하셨을 분들을 위해, Gmail의 특정 라벨이 붙은 이메일의 첨부파일을 알아서 Google Drive 폴더에 착착 저장해 주는 '자동화 시스템'을 만드는 방법을 소개해드리려고 해요. 코딩을 전혀 몰라도 괜찮아요! 제가 드리는 코드를 복사해서 붙여 넣기만 하면 되니까, 차근차근 따라와 보세요. 😊

자동화의 핵심, Gmail 라벨과 필터 이해하기 🏷️

자동화의 첫걸음은 이메일을 '분류'하는 것에서 시작해요. 이때 필요한 게 바로 Gmail의 라벨과 필터 기능입니다.

라벨(Label)은 이메일에 붙이는 '꼬리표' 같은 거예요. 예를 들어 '세금계산서', '프로젝트 A', '여행' 같은 라벨을 만들어두면, 관련 이메일을 한눈에 모아볼 수 있죠. 폴더와 비슷하지만, 하나의 이메일에 여러 개의 라벨을 붙일 수 있다는 점이 더 유연하고 강력해요.

필터(Filter)는 특정 규칙에 맞는 이메일이 들어왔을 때, 라벨을 자동으로 붙여주는 기능이에요. 예를 들어, '국세청'에서 온 이메일에는 '세금계산서' 라벨을 자동으로 붙이도록 설정할 수 있죠. 이 두 가지를 조합하면, 우리는 자동화의 기반을 마련하게 되는 셈이에요!

💡 알아두세요!
자동화를 시작하기 전에, 어떤 이메일의 첨부파일을 저장할지 미리 생각해보고 관련 라벨과 필터를 설정해두는 것이 중요해요. 예를 들어, '거래처A'에서 온 모든 메일의 첨부파일을 저장하고 싶다면, '거래처A'라는 이름의 라벨을 만들고, 해당 이메일 주소로 오는 메일에 이 라벨이 자동으로 붙도록 필터를 만들어두세요.

 

Google Apps Script로 날개 달기 🚀

이제 본격적으로 자동화 시스템을 구축할 시간이에요. 우리는 'Google Apps Script'라는 도구를 사용할 거예요. 이름이 좀 어려워 보이지만, 구글 서비스들을 연결하고 자동화시켜 주는 '마법의 접착제' 정도로 생각하시면 쉬워요. JavaScript 기반이지만, 코드를 직접 짤 필요는 없답니다.

아래 순서대로만 따라오시면 됩니다.

  1. Google Drive에서 Apps Script 시작하기: 먼저 Google Drive에 접속해서, [새로 만들기] > [더보기] > [Google Apps Script]를 클릭해 새 프로젝트를 엽니다.
  2. 코드 붙여넣기: 열리는 코드 편집기 창에 기존에 있던 코드는 모두 지우고, 아래에 있는 코드를 전체 복사해서 붙여넣으세요.
  3. 설정값 수정하기: 코드 상단의 `// --- 설정 ---` 부분에 있는 3가지 항목을 자신의 환경에 맞게 수정해야 해요.
    • `SOURCE_LABEL_NAME`: 첨부파일을 가져올 Gmail 라벨 이름을 정확하게 입력하세요. (예: "세금계산서")
    • `DESTINATION_FOLDER_NAME`: 첨부파일을 저장할 Google Drive 폴더 이름을 입력하세요. 이 이름의 폴더가 없으면 자동으로 생성돼요. (예: "이메일 첨부파일/세금계산서")
    • `PROCESSED_LABEL_NAME`: 처리가 완료된 이메일에 붙일 라벨 이름이에요. 중복 저장을 막기 위한 것이니, 원하는 이름으로 설정하세요. (예: "자동저장_완료")
  4. 프로젝트 저장 및 권한 승인: 상단 디스크 모양 아이콘을 눌러 프로젝트를 저장하고, `실행` 버튼을 눌러 `processGmailAttachments` 함수를 최초 1회 실행하세요. 중간에 '권한 검토' 팝업이 뜨면, 자신의 구글 계정을 선택하고 '고급' > '(안전하지 않음)으로 이동'을 클릭하여 권한을 허용해주세요. (우리가 직접 만든 스크립트라 뜨는 메시지이니 안심하셔도 됩니다.)
  5. 트리거 설정으로 자동화 완성하기: 왼쪽 메뉴에서 시계 모양의 '트리거'를 클릭하고, 오른쪽 하단의 '트리거 추가' 버튼을 누르세요. 그리고 다음과 같이 설정합니다.
    • 실행할 함수 선택: `processGmailAttachments`
    • 이벤트 소스 선택: `시간 기반`
    • 시간 기반 트리거 유형 선택: `시간 기반 타이머` (또는 `분 기반 타이머`)
    • 시간 간격 선택: `매 1시간마다` (원하는 주기로 설정 가능)
⚠️ 주의하세요!
라벨과 폴더 이름은 코드에 입력한 값과 정확히 일치해야 해요. 띄어쓰기 하나라도 다르면 스크립트가 제대로 작동하지 않을 수 있습니다. 또한, 처음 권한을 승인할 때 나타나는 경고 메시지는 구글이 외부 앱의 무분별한 접근을 막기 위한 기본 조치이니, 내용을 확인하고 '허용'을 눌러주셔야 정상적으로 작동합니다.

⚙️ Gmail 첨부파일 자동 저장 스크립트 ⚙️

function processGmailAttachments() {
  // --- 설정 ---
  const SOURCE_LABEL_NAME = "세금계산서"; // 첨부파일을 가져올 Gmail 라벨 이름
  const DESTINATION_FOLDER_NAME = "이메일 첨부파일/세금계산서"; // 저장할 구글 드라이브 폴더 경로
  const PROCESSED_LABEL_NAME = "자동저장_완료"; // 작업 완료 후 붙일 라벨 이름
  // --- 설정 끝 ---

  // 1. 라벨 및 폴더 가져오기 (없으면 생성)
  const sourceLabel = getOrCreateLabel(SOURCE_LABEL_NAME);
  const processedLabel = getOrCreateLabel(PROCESSED_LABEL_NAME);
  const destinationFolder = getOrCreateFolder(DESTINATION_FOLDER_NAME);

  // 2. 처리할 이메일 스레드 검색
  const query = `label:${SOURCE_LABEL_NAME} -label:${PROCESSED_LABEL_NAME} has:attachment`;
  const threads = GmailApp.search(query);

  if (threads.length === 0) {
    Logger.log("처리할 새 이메일이 없습니다.");
    return;
  }

  // 3. 각 이메일 스레드 및 메시지 처리
  for (const thread of threads) {
    const messages = thread.getMessages();
    for (const message of messages) {
      const attachments = message.getAttachments();
      
      for (const attachment of attachments) {
        try {
          // 파일 이름 중복 방지 처리
          let fileName = attachment.getName();
          let file = destinationFolder.getFilesByName(fileName);
          let count = 0;
          while (file.hasNext()) {
            count++;
            const parts = fileName.split('.');
            const extension = parts.pop();
            const name = parts.join('.');
            fileName = `${name}_${count}.${extension}`;
            file = destinationFolder.getFilesByName(fileName);
          }
          
          destinationFolder.createFile(attachment.copyBlob()).setName(fileName);
          Logger.log(`'${fileName}' 파일을 '${destinationFolder.getName()}' 폴더에 저장했습니다.`);
        } catch (e) {
          Logger.log(`파일 저장 중 오류 발생: ${e.toString()}`);
        }
      }
    }
    // 4. 처리 완료 라벨 추가
    thread.addLabel(processedLabel);
    Logger.log(`'${thread.getFirstMessageSubject()}' 스레드 처리를 완료하고 '${PROCESSED_LABEL_NAME}' 라벨을 추가했습니다.`);
  }
}

// 폴더 경로를 받아 폴더를 생성하거나 반환하는 함수
function getOrCreateFolder(path) {
  let folder = DriveApp.getRootFolder();
  const folderNames = path.split('/');
  for (const folderName of folderNames) {
    const folders = folder.getFoldersByName(folderName);
    if (folders.hasNext()) {
      folder = folders.next();
    } else {
      folder = folder.createFolder(folderName);
    }
  }
  return folder;
}

// 라벨 이름을 받아 라벨을 생성하거나 반환하는 함수
function getOrCreateLabel(labelName) {
  let label = GmailApp.getUserLabelByName(labelName);
  if (!label) {
    label = GmailApp.createLabel(labelName);
  }
  return label;
}

 

 
💡

첨부파일 자동화 핵심 요약

1. 사전 준비: Gmail 필터와 라벨을 설정하여 자동 분류의 기반을 만듭니다.
2. 자동화 설정: Google Apps Script에 제공된 코드를 붙여넣고, 3가지 설정값(원본 라벨, 저장 폴더, 완료 라벨)만 수정합니다.
3. 실행 및 권한: 스크립트를 저장하고, 최초 1회 실행하여 구글 서비스 접근 권한을 허용합니다.
4. 자동 실행: 시간 기반 트리거를 설정하여 원하는 주기(예: 1시간)마다 스크립트가 자동으로 실행되게 합니다.

자주 묻는 질문 ❓

Q: 특정 형식의 파일(예: PDF, 이미지)만 저장할 수 있나요?
A: 네, 가능합니다. Apps Script 코드에 파일 형식을 확인하는 로직(예: `if (attachment.getContentType() === 'application/pdf')`)을 추가하면 특정 파일만 필터링하여 저장할 수 있습니다. 위에서 제공된 기본 코드에는 포함되지 않았지만, 약간의 수정으로 구현할 수 있습니다.
Q: 스크립트 실행 로그는 어디서 확인하나요?
A: Apps Script 편집기 화면의 왼쪽 메뉴에서 '실행'을 클릭하면, 각 실행 기록과 `Logger.log()`로 기록된 로그를 확인할 수 있습니다. 스크립트가 예상대로 동작하지 않을 때 오류를 찾는 데 유용합니다.
Q: 트리거는 얼마나 자주 설정하는 게 좋을까요?
A: 사용자의 이메일 수신 빈도에 따라 다릅니다. 중요한 첨부파일을 거의 실시간으로 백업하고 싶다면 '10분마다', 그다지 급하지 않다면 '1시간마다' 또는 '매일'로 설정해도 충분합니다. 너무 짧게 설정하면 불필요한 리소스가 소모될 수 있습니다.
Q: 구글 드라이브 용량이 꽉 차면 어떻게 되나요?
A: 스크립트가 파일을 저장하려 할 때 용량 부족 오류가 발생하며 저장이 실패합니다. 실행 로그에 관련 오류 메시지가 남게 되니, 정기적으로 구글 드라이브 용량을 확인하고 관리해주는 것이 좋습니다.

이제 여러분의 이메일함과 클라우드 스토리지는 훨씬 더 깔끔하고 효율적으로 관리될 거예요. 단순 반복 업무는 똑똑한 스크립트에게 맡기고, 우리는 더 중요한 일에 집중하자고요! 이 방법이 여러분의 디지털 라이프에 작은 도움이 되었으면 좋겠습니다. 더 궁금한 점이 있다면 언제든지 댓글로 물어봐 주세요~ 😊

📚 실전 워크플로우 & 자동화 심화 시리즈

  1. "코딩없이 Notion API 활용: Make/Zapier로 나만의 자동화 만들기"
  2. "귀찮은 이메일 첨부파일 다운로드, 이제 자동화하세요!(Gmail & 구글드라이브 연동)"
  3. "구글 폼과 Looker Studio 연동: 클릭 한번으로 끝내는 보고서 자동화 비법"
  4. "브런치/블로그 글, SNS에 자동으로 공유하는 가장 쉬운방법(IFTT,RSS활용)"
  5. "엑셀 파워 쿼리 하나로 보고서 지옥 탈출! (복사 붙여넣기 이제 그만)"
  6. "단한번의 클릭으로 집중모드 ON! Flic & 스마트싱스 버튼 뽀모도로 자동화 완벽 가이드"
  7. "스마트홈 버튼으로 PC까지 제어? IFTTT와 Power Automate 연동 가이드"
  8. "아이폰 NFC 태그 자동화, '단축어' 하나로 삶의 질 200% 올리는 방법"
  9. "웹훅(Webhook)이란? API 폴링과의 차이점부터 실전 활용까지 총정리"
  10. "잘 만든 자동화는 왜 멈출까? 실패 원인과 오류 처리 완벽 가이드"
728x90
반응형