Skip to content

Google Drive 모듈 — 워크허브 ↔ 드라이브 통합

워크허브의 모든 첨부 / 파일 / 명함 / 미팅 트랜스크립트를 Google Drive 원본으로 다룰 수 있게 해주는 모듈입니다. 워크허브가 파일을 자기 스토리지에 복사하지 않고, Drive 의 webViewLink 와 권한으로 직접 연결합니다.

왜 Drive 인가: 회사가 이미 Workspace 를 쓰고 있으면 파일을 두 곳에 복제하지 않고 원본 한 곳에서 관리할 수 있습니다. 권한·검색·버전관리·외부 공유가 모두 Drive 기준.


1. 동작 그림

   워크허브 화면                           Google Drive
   ─────────────                          ──────────────
   메시지/태스크/명함/미팅

        │ ① "Drive 첨부" 클릭

   Google Picker 팝업  ◀─── 본인 Drive 마이/공유 드라이브

        │ ② 파일 선택

   워크허브 첨부 행 생성 ─────▶ external_id = drive_file_id
        │                       (워크허브 안에 파일 본체 복사 X)

        │ ③ 수신자에게 자동 권한 부여 (선택 — grant_on_send=true)

   gdrive_grants 테이블 ──────▶ Drive permissions API
                                 (수신자가 "구글에서 열기" 클릭 시 열림)

핵심:

  • 워크허브 DB 에는 파일 본체가 들어가지 않음 — Drive ID + 미리보기 메타만
  • "구글에서 열기" 클릭 시 워크허브 백엔드가 Drive webViewLink 로 302 redirect
  • 메시지 삭제 / 멤버 변동 시 Drive 권한도 자동 회수

2. 사전 준비

기관관리자가 먼저 Google 모듈 + Drive 모듈 을 활성화하고 Picker API Key 를 등록해야 합니다 — 기관관리자 가이드 — Drive 모듈 참고.

활성화가 끝나면 메시지 첨부 / CRM 명함 인박스 / 미팅 트랜스크립트 등의 진입점이 노출됩니다.

본인 사용자 — 한 번만

기관관리자가 Drive 모듈을 활성한 후, 본인이 처음 Drive 첨부를 누르면:

  1. "Google 계정 연결" 안내 팝업 → 클릭
  2. Google 동의 화면에서 본인 Gmail 계정 선택 + "드라이브 파일 보기/관리" 권한 동의
  3. 워크허브에 본인 OAuth 토큰 (AES-GCM 암호화) 저장 → 이후 모든 Drive 흐름이 본인 계정 권한으로 동작

본인 계정 vs 공용 계정: 공유 드라이브를 쓰면 본인 계정이 공유 드라이브 멤버여야 첨부 가능. 마이드라이브 모드면 본인 드라이브 안의 파일만 접근.


3. 메시지 / DM / 토픽 — Drive 파일 첨부

3.1 첨부하기

메시지 입력창 우하단 📎 Drive 버튼 클릭:

┌──────────────────────────────────────────────┐
│  Google Picker (Google 가 제공하는 표준 팝업)  │
│  ┌──────────────┬─────────────────────────┐  │
│  │ 📁 내 드라이브 │ 📁 공유 드라이브        │  │
│  └──────────────┴─────────────────────────┘  │
│  최근 파일 / 검색 / 폴더 탐색                  │
└──────────────────────────────────────────────┘
  • 내 드라이브 탭: 본인 마이드라이브
  • 공유 드라이브 탭: 본인이 멤버인 공유 드라이브들
  • 업로드 탭: 로컬 파일을 Drive 의 이 채널 폴더 (자동 생성됨) 로 즉시 업로드 후 첨부

파일 선택 → 워크허브 메시지에 칩으로 표시:

📄 견적서_2026Q2.xlsx [구글에서 열기]

3.2 수신자 입장에서

수신자가 칩의 [구글에서 열기] 클릭 시:

  • 백엔드 /files/{id}/open 가 호출됨
  • 워크허브가 본인 (작성자) Drive 권한을 자동 부여 (grant_on_send=ON 인 경우)
  • 302 redirect 로 Drive webViewLink 이동
  • Drive 에서 본인 권한으로 열림

3.3 자동 권한 회수

다음 이벤트 시 워크허브가 부여한 Drive 권한을 자동 해제:

이벤트회수 동작
메시지/DM 삭제해당 첨부의 모든 grantee 권한 회수
채널/프로젝트에서 멤버 제외그 멤버의 모든 첨부 권한 일괄 회수
사용자 비활성화 (퇴사)해당 사용자가 받은 모든 권한 회수

gdrive_grants 테이블에 audit 기록 + Drive permissions API delete 호출.

본인이 직접 부여한 권한은 회수 안됨: 본인이 Drive 콘솔에서 직접 "공유" 한 권한은 워크허브가 만지지 않습니다. 워크허브가 자동 부여한 것만 추적.


4. CRM — Drive 인박스 / 트랜스크립트

4.1 명함 — Drive 인박스 (자동 OCR)

기관관리자가 모듈관리 → CRM 설정에서 명함 Drive 폴더 를 설정해두면:

  1. 본인이 폰으로 명함 사진을 찍어 그 Drive 폴더에 업로드 (Drive 앱 / Workspace 동기화 등)
  2. 워크허브 고객관리 → 명함 화면에 Drive 인박스 영역에 자동으로 나타남
  3. [OCR 처리] 클릭 → Gemini Vision 으로 명함 자동 인식
  4. [확정] → 워크허브 명함 행 생성 + Drive 원본은 폴더 이동 + 파일명에 고객사명 자동 prefix

이 흐름의 장점:

  • 폰 카메라 → Drive 업로드 → 워크허브 인식 → 고객 등록 = 한 동선
  • 원본 명함 사진은 Drive 에 영구 보관 (워크허브가 카피하지 않음)
  • 여러 사용자가 같은 폴더에 업로드하면 자동으로 인박스 공유

4.2 미팅 트랜스크립트 — Drive 가져오기

회의 녹음을 Otter/Plaud 같은 도구로 트랜스크립트 (.txt/.md/.srt/.vtt) 만들어 Drive 에 저장한 후:

  1. 워크허브 고객관리 → 미팅 → [트랜스크립트로 자동 생성]
  2. [Drive 에서 가져오기] 클릭 → Google Picker → 텍스트 파일 선택
  3. 백엔드가 1MB 까지 텍스트 가져옴 + LLM 으로 요약 + 미팅 행 자동 생성

Drive 모듈 비활성 기관: 위 버튼이 [파일에서 가져오기] (로컬 업로드) 로 자동 전환.

4.3 미팅 첨부

미팅 행에서 [첨부] → Drive Picker → 녹음 원본 / 회의 자료 등 첨부. 메시지 첨부와 동일하게 Drive 권한 자동 부여 / 회수.


5. Gmail 첨부 → Drive 저장

Gmail 모듈에서 받은 메일의 첨부 (영수증 / 견적서 / 인보이스 등) 를 Drive 로 영구 보관:

  1. 메일 본문 우상단 [첨부 보기]
  2. 첨부 행 우측 [Drive 로 저장] (명시적 동의 — 자동 import 금지)
  3. 워크허브 미리 정의된 Drive 폴더 (/Workhub/Gmail-imports/) 에 저장
  4. 저장 후:
    • 워크허브 첨부 행 생성 → 메일에서 역참조
    • 경비 생성 시 receipt 로 자동 연결 가능 (create_expense_from_email)

본인 명시 동의가 필요: 워크허브가 받은편지함 자동 스캔하면서 첨부를 Drive 로 옮기지 않습니다. 사용자가 그 메일에서 직접 누른 경우에만.


6. 파일 탭 — Drive 출처 메시징

채널/토픽/프로젝트의 파일 탭은 모든 첨부를 통합 표시합니다.

컬럼표시
출처 배지🟢 Drive / ⚪ 워크허브 업로드
이름클릭 시 미리보기 (Drive 파일은 webViewLink)
소유자Drive 파일은 Drive 의 원본 소유자, 아니면 업로드 사용자
액션🔗 구글에서 열기 / ⬇ 다운로드 / 🗑 삭제

→ 워크허브 안에서 일관된 파일 관리 흐름. Drive 원본의 권한·소유는 그대로 유지.


7. FAQ

Q. 공유 드라이브 안 쓰고 본인 마이드라이브로만 운영해도 되나요?

가능합니다. 단점:

  • 본인이 퇴사하면 본인 드라이브 자료가 사라짐 (회사가 백업할 수 없음)
  • 같은 채널의 다른 사람이 본인 드라이브 파일을 보려면 grant 가 필요 (Drive 모듈이 자동 처리하지만)

회사 자료의 영속성/공유성을 위해 공유 드라이브 권장 — 기관관리자가 모듈 설정에서 지정.

Q. Drive 콘솔에서 직접 권한 추가하면 워크허브에 영향이 있나요?

영향 없음. 워크허브는 본인이 자동 부여한 권한만 추적 (gdrive_grants 테이블). Drive 콘솔에서 직접 부여한 권한은 회수 대상이 아니고, 그대로 유지됩니다.

Q. 파일 첨부 한도가 있나요?

Drive 첨부는 파일 본체를 워크허브가 보관하지 않으므로 워크허브 스토리지 한도와 무관. Drive 자체 한도 (Workspace 플랜에 따른 GB) 만 적용.

Q. 모바일 (Flutter) 앱에서도 Drive 첨부 되나요?

현재 Drive Picker 는 웹 화면 전용. 모바일에서는 카메라/갤러리 → 일반 업로드만. 단:

  • Drive 모바일 앱에서 파일을 워크허브 첨부로 공유는 가능 (운영체제의 "공유" 메뉴)
  • CRM 명함 인박스 흐름은 폰 카메라 → Drive 앱 업로드 → 워크허브 자동 인식으로 사실상 모바일 지원

Q. 본인이 Drive 권한 회수했는데 워크허브 화면에는 칩이 남아있어요.

워크허브가 알지 못함 (Drive 측 외부 변경은 watch 하지 않음). 클릭 시 Drive 가 403 → 워크허브가 "권한 없음" 안내. 시각적 정리는 별도 cron 으로 검토 예정 (현재는 즉시 반영 안됨).

Q. 공유 드라이브 멤버가 아닌 사람이 첨부 클릭하면?

  • grant_on_send=ON 인 경우: 워크허브가 자동으로 read 권한 부여 → 열림
  • grant_on_send=OFF 인 경우: Drive 가 "접근 권한 없음" → 사용자가 본인 Drive 콘솔에서 요청 필요

Q. Drive 모듈을 켰는데 메시지에 Drive 버튼이 안 보여요.

체크:

  1. 기관관리자가 Drive 모듈 을 실제로 ON 했는지 (/app/admin/modules)
  2. 본인이 Drive OAuth 연결을 했는지 (메시지 첨부 화면에 "Google 계정 연결" 안내가 떴어야 함)
  3. 기관관리자가 Google Picker API Key 를 입력했는지 — 없으면 Picker 가 안 뜸

8. 트러블슈팅

"본인 Google 계정 권한 만료"

본인이 https://myaccount.google.com/permissions 에서 워크허브 권한을 회수했거나 토큰이 만료된 경우. 워크허브에서 다시 Drive 첨부 클릭 시 자동으로 재연결 안내.

"Drive 첨부 후 칩이 빨갛게 표시됨"

gdrive_grants 의 상태가 error — Drive permissions API 호출 실패. 원인:

  • 본인이 그 파일의 소유자가 아니라 권한 부여 못함 (공유 드라이브 사용 권장)
  • Drive 측 quota 초과
  • 파일이 이미 삭제됨

칩 클릭 시 에러 메시지 노출. 본인 Drive 콘솔에서 직접 권한 부여로 우회 가능.

"공유 드라이브의 파일인데 워크허브 첨부 시 본인 권한이 회수되더라"

워크허브는 본인이 자동 부여한 grant 만 회수합니다. 본인이 공유 드라이브 멤버 자격으로 갖고 있던 원래 권한은 절대 회수 안 함. 회수 대상이 아닌데 그렇게 보이면 우연한 다른 원인.


9. 보안 / 개인정보

  • OAuth refresh token 은 AES-GCM 으로 암호화돼 DB 저장 — 시스템관리자도 평문 조회 불가
  • 워크허브는 본인 Drive 파일을 복사하지 않음 — Drive ID 와 미리보기 메타만 보관
  • 워크허브가 부여한 권한은 모두 gdrive_grants 에 audit 기록 — 누가 / 언제 / 어떤 파일 / 누구에게
  • 본인이 언제든 https://myaccount.google.com/permissions 에서 워크허브 권한 회수 → 즉시 sync 중단
  • 권한 회수 시 워크허브가 부여한 grant 도 자동 정리 (다음 호출에서 403 → 상태 갱신)

관련 가이드

Workhub 업무협업 플랫폼