Skip to content

구글 드라이브 / 메일 연동 설정 ​

기관의 공용 Google 계정을 연결해 Workhub 메시지/태스크에 구글 드라이브 파일을 첨부하고, Gmail 메일함을 Workhub 안에서 열람·발신할 수 있게 합니다.

개요 ​

  • 운영 모델: 기관별로 자체 GCP(Google Cloud Platform) OAuth Client 를 발급받아 등록 — Workhub 가 중간에 자격증명을 보유하지 않는 SaaS 표준 모델
  • 연결 단위: 조직(org) 당 1개. 기관 관리자가 한 번 등록하면 같은 조직의 모든 허가된 사용자가 공유
  • 저장: 자격증명은 모두 AES-256-GCM 으로 암호화되어 DB 에 저장. 평문 secret 은 응답에 노출되지 않음
  • 사전 준비 시간: 약 15~30분 (GCP Console 작업 포함)

전체 흐름:

[GCP 작업]         [Workhub]              [구글 OAuth]
─────────────     ──────────────────     ──────────────
1. 프로젝트 생성   →                       
2. API 활성화      →
3. 동의 화면 설정  →
4. OAuth Client   → 5. 관리자 화면 등록  → 6. 구글 계정 연결
   발급                                       (관리자 OAuth)
                                          ↓
                  ← 7. 모듈 활성화 (드라이브 / 메일)
                  ← 8. 사용자 사용 (첨부 / 메일함)

1. GCP 사전 작업 ​

Google Cloud Console (https://console.cloud.google.com) 에 기관 대표 Gmail 계정으로 로그인한 상태에서 진행합니다.

Google Workspace 도메인(예: 회사 도메인 Gmail) 이면 별도 운영 검토 — 본 문서 끝의 운영 모드 결정 참고.

1-1. 프로젝트 생성 또는 선택 ​

  1. 좌측 상단 프로젝트 드롭다운 → "새 프로젝트" 또는 기존 프로젝트 선택
  2. 프로젝트 이름 예시: workhub-koavio (기관명 포함 권장)

1-2. API 활성화 ​

좌측 햄버거(≡) 메뉴 → "API 및 서비스" → "라이브러리" 에서 아래 3개 API 검색·활성화:

API용도필수
Google Drive API파일 메타/권한 조회드라이브 모듈 사용 시 필수
Gmail API메일 조회/발신메일 모듈 사용 시 필수
Google Picker API브라우저 파일 선택 UI드라이브 첨부 기능 필수

각각 클릭 → "사용 설정" 버튼.

1-3. OAuth 동의 화면 설정 ​

좌측 메뉴 "Google 인증 플랫폼" → "브랜딩" (구 UI 에선 "OAuth 동의 화면"):

항목값
User TypeExternal (Workspace 도메인 한정이면 Internal)
앱 이름사용자 동의 화면에 표시될 이름 (예: "Workhub 통합")
사용자 지원 이메일기관 관리자 Gmail
개발자 연락처동일
앱 도메인(선택) Workhub 운영 도메인

대상(테스트 사용자) 등록 ​

브랜딩 저장 후 좌측 "대상"(Audience) 메뉴로 이동합니다. 새로 만든 동의 화면은 게시 상태가 "테스트 중(Testing)" 이 기본값이며, 이 상태에서는 테스트 사용자 명단에 등록된 Google 계정만 OAuth 를 통과할 수 있습니다. 명단에 없는 계정은 동의 화면도 보지 못하고 오류 403: access_denied 로 차단됩니다.

  1. "대상" 메뉴 → 테스트 사용자 섹션 → "+ Add users" 클릭
  2. OAuth 연동에 사용할 Google 계정 이메일 입력 → 저장
  3. 등록 직후부터 해당 계정으로 연동 가능 (별도 반영 대기 없음)

누구를 등록해야 하나:

  • 3. 구글 계정 연결 단계에서 [구글 계정 연결] 버튼을 누른 뒤 Google 로그인 화면에서 선택하는 그 계정 — 보통 기관 공용 Gmail 계정
  • GCP Console 에 로그인한 관리자 계정과 연동용 계정이 다르면 연동용 계정 기준으로 등록해야 함 (가장 흔한 실수)

제한 사항:

  • 테스트 사용자는 앱 수명 주기 전체 기준 최대 100명
  • Testing 상태에서는 refresh_token 이 7일마다 만료 → 운영 전환 시 운영 모드 결정 참고
  • "앱 게시" (프로덕션 전환) 는 Google 검증 필요 — drive 등 sensitive/restricted scope 포함 시 심사 기간·비용 발생

1-4. OAuth 2.0 Client ID 발급 ​

좌측 "클라이언트" 메뉴 → 상단 "+ 클라이언트 만들기" (구 UI 에선 "사용자 인증 정보 만들기 → OAuth 클라이언트 ID"):

항목값
애플리케이션 유형웹 애플리케이션
이름예: workhub-prod (식별용)
승인된 리디렉션 URI다음 단계 참고

승인된 리디렉션 URI 입력값 — Workhub 가 OAuth 콜백을 받을 URL:

https://<Workhub 도메인>/api/modules/google/oauth/callback

운영 예시:

https://workhub.example.com/api/modules/google/oauth/callback

로컬 검증:

http://localhost/api/modules/google/oauth/callback

중요: 끝에 / 가 있고 없고 / 대소문자 / 포트번호 — 1바이트라도 다르면 OAuth 시 redirect_uri_mismatch 오류 발생.

생성 직후 표시되는 Client ID + Client Secret 을 복사 (별도 안전한 곳에 임시 저장). 같은 화면은 다시 열어도 secret 은 마지막 4자만 보임.

1-5. (드라이브 모듈만) Google API Key 발급 ​

드라이브 파일 선택 UI(Google Picker) 가 브라우저에서 추가로 필요로 합니다. 메일 모듈만 사용한다면 이 단계는 건너뛰어도 됩니다.

좌측 "클라이언트" → "+ 사용자 인증 정보 만들기" → "API 키" (위치는 GCP 콘솔 버전에 따라 "API 및 서비스 → 사용자 인증 정보" 일 수도 있음):

  • 키 자동 생성 → 복사
  • "키 제한" 클릭:
    • 애플리케이션 제한: HTTP 리퍼러 → https://<Workhub 도메인>/* 추가
    • API 제한: 키 제한 → 선택한 API → Google Picker API + Google Drive API 만 체크

이 API Key 는 Workhub 빌드 시점에 frontend 번들에 박혀 들어가므로 (VITE_GOOGLE_API_KEY), Workhub 시스템 관리자(또는 배포 담당자)에게 전달하여 빌드 환경변수에 추가해야 합니다.


2. Workhub 에서 OAuth Client 등록 ​

GCP 작업이 끝났다면 Workhub 화면으로 이동합니다.

  1. 좌측 사이드바 → 관리자 → 모듈 관리 (/app/admin/modules)
  2. 화면 최상단의 amber 안내 패널 "기관 Google OAuth Client 미등록" 확인
  3. "등록하기" 버튼 클릭
  4. 폼에 다음을 입력:
항목값
Client ID1-4 단계에서 발급받은 값 (예: 333933...apps.googleusercontent.com)
Client Secret1-4 단계의 secret (예: GOCSPX-...)
Redirect URI1-4 단계에 등록한 값과 정확히 동일
  1. "저장" 클릭

저장 직후 패널이 "등록됨" 상태로 바뀌며 Client ID / 마스킹된 Secret / Redirect URI 가 표시됩니다.

보안 안내: 저장된 client_secret 평문은 다시 표시되지 않습니다. 변경 시 새로 입력해야 합니다. 모든 secret 은 DB 에 AES-256-GCM 으로 암호화 저장됩니다.


3. 구글 계정 연결 (OAuth) ​

OAuth Client 등록이 끝나면 같은 화면의 구글 드라이브 또는 구글 메일 카드의 amber 배너가 다음으로 바뀝니다:

기관 구글 계정 연결 필요 — [구글 계정 연결] 버튼

  1. 카드 안의 [구글 계정 연결] 버튼 클릭
  2. 새 창에서 Google 동의 화면이 열림
  3. 기관 공용 Gmail 계정 선택 (또는 로그인)
  4. 권한 동의:
    • Google Drive 파일 보기 및 관리 (드라이브 모듈)
    • Gmail 메일 보기 (메일 모듈)
    • Gmail 메일 보내기 (발신 기능)
    • 이메일 주소 확인 (계정 식별용)
  5. Workhub 화면으로 자동 복귀 → 카드의 배너가 사라지고 prerequisites 모두 ✓ 표시

주의: OAuth 동의 시 사용하는 계정 = 기관 공용 메일/드라이브를 보유한 계정. 본인 개인 Gmail 로 동의하면 본인 개인 데이터에만 접근됩니다.

테스트 상태 GCP 프로젝트 의 경우: 1-3 단계에서 "테스트 사용자" 명단에 추가된 계정만 OAuth 진행 가능. 명단 외 계정은 "Access blocked / 이 앱이 차단되었습니다" 오류 발생.

연결 결과는 같은 화면의 "구글 계정 연결" 패널 에서 확인할 수 있습니다 (연결된 이메일 주소 + 부여받은 권한 목록).


4. 모듈 활성화 및 사용 ​

4-1. 구글 드라이브 모듈 ​

활성화 ​

  • 모듈 관리 화면의 "구글 드라이브" 카드 → 우측 토글 스위치 ON

사용 (일반 사용자) ​

드라이브 모듈은 좌측 메뉴 없이 메시지 첨부 흐름 에 통합됩니다.

  1. 사이드바 → 채널 / DM / 토픽 진입
  2. 하단 메시지 입력창 → 첨부 아이콘(📎) → "구글 디스크"
  3. Google Picker 팝업 → "내 드라이브" 또는 "공유 문서함" 탭에서 파일 선택 → "선택"
  4. 메시지에 첨부 칩 표시 → 메시지 전송
  5. 다른 사용자가 메시지의 첨부 칩 클릭 시:
    • 첨부한 파일이 본인 권한 안에 있으면 → Google Drive 에서 즉시 열림
    • 권한 없으면 → 모듈 설정의 "자동 권한 부여" 가 켜져 있고 본인 Gmail 이 연결돼 있으면 자동 권한 부여 시도

모듈 설정 ​

카드의 "설정" 버튼:

항목설명
공유 드라이브기본 첨부 대상 공유 드라이브 선택 (비워두면 마이드라이브 사용)
자동 권한 부여첨부 메시지의 대화 구성원에게 자동으로 reader 권한 부여 (#508)

채널 파일 탭 ​

채널 화면의 파일 탭에서 첨부된 드라이브 파일은 "Drive" 배지로 구분됩니다. 다운로드 대신 외부 링크 아이콘 으로 Google Drive 에서 열기.

4-2. 구글 메일 모듈 ​

활성화 ​

  • 모듈 관리 화면의 "구글 메일" 카드 → 토글 ON
  • 활성화 직후 좌측 사이드바에 "메일" 메뉴 자동 노출
  • 접근 제어: 메일 모듈은 PolicyAllowlist — 모듈 설정의 "권한" 에서 메일함을 볼 수 있는 사용자를 명시적으로 추가해야 일반 사용자가 접근 가능 (관리자는 항상 접근)

사용 (허가된 사용자) ​

  • 좌측 메뉴 "메일" 클릭 (/app/mail)
  • 좌측: 스레드 목록 + 검색
  • 우측: 선택 스레드의 최신 메시지 본문 + 액션
  • 상단 연필 아이콘: 새 메일 작성
  • 우상단 "답장" 버튼: 선택 메시지에 답장
  • 우상단 "태스크 만들기": 메일 내용을 태스크로 변환 (프로젝트/토픽 선택 후 생성)
  • 관리자만 표시되는 "새로고침" 아이콘: 즉시 Gmail 동기화

동기화 모드 ​

기본은 수동/cron 폴링(pull). 운영에서 실시간 동기화가 필요하면:

  1. GCP Pub/Sub 토픽 생성 + Workhub 운영 환경변수 GMAIL_PUSH_TOPIC 설정 (시스템 관리자 작업)
  2. 모듈 설정의 sync_mode 를 push 로 변경
  3. 자동 watch 등록 — Gmail 새 메일 도착 시 즉시 동기화

5. 운영 모드 결정 (Internal vs External) ​

GCP OAuth 동의 화면의 User Type 선택에 따라 운영 양상이 크게 달라집니다.

모드조건사용 가능 인원검증비용
InternalGCP 프로젝트가 Google Workspace 도메인 안에 있을 때Workspace 도메인 사용자 무제한불필요무료
External + Testing일반 Gmail/Workspace 외 사용등록된 테스트 사용자 최대 100명불필요무료
External + In Production외부 사용자에게 공개무제한검증 필요scope 종류에 따라

Gmail/Drive 의 검증 필요성:

  • drive (전체) : sensitive scope — 검증 필요, 무료 (2-6주 소요)
  • gmail.send : sensitive — 검증 필요, 무료
  • gmail.readonly : restricted — 검증 + 연간 보안평가 (Annual Security Assessment) 필요, 유료 ($4,500~$75,000/년)

추천 전략 ​

기관 상황추천 모드
Google Workspace 가입자 (회사 도메인 Gmail)Internal 모드 — 가장 깔끔
소규모 (~100명) + 일반 Gmail 사용External + Testing — 검증 회피
100명 초과 + 외부 사용자 다수External + In Production + 검증 — 유료 보안평가 감수

6. 트러블슈팅 ​

"redirect_uri_mismatch" 오류 ​

OAuth 진행 시 가장 흔한 오류.

  • GCP Console "클라이언트" 메뉴 → 본인 OAuth Client → "승인된 리디렉션 URI" 가 Workhub 의 OAuth Config 에 입력한 값과 정확히 일치 하는지 확인
  • 흔한 차이:
    • http vs https
    • 끝의 / 유무
    • 포트 번호 (:80 명시 vs 생략)
    • /api/ 경로 누락

수정 후 GCP 측 반영에 수십 초 지연될 수 있음 — 1~2분 대기 후 재시도.

"오류 403: access_denied" / "Access blocked: 이 앱이 차단되었습니다" ​

  • 게시 상태가 Testing 인 GCP 프로젝트 + 시도한 Google 계정이 테스트 사용자 명단에 없음
  • 오류 페이지의 "요청 세부정보" 에 표시되는 client_id 로 어느 GCP 프로젝트의 클라이언트인지 식별 가능 — Workhub 에 등록한 Client ID 와 일치하는지 먼저 확인
  • 해결: 해당 클라이언트가 속한 GCP 프로젝트 의 "대상" 메뉴 → "테스트 사용자" 에 연동 시도한 계정을 추가 (1-3. 대상 등록 참고)
  • 클라이언트를 만든 GCP 계정과 콘솔에 로그인한 계정이 다르면 테스트 사용자가 안 보임 — 클라이언트를 발급한 계정으로 로그인해야 수정 가능

Picker 가 "No documents" / 빈 화면 ​

  • 연결한 Google 계정의 드라이브에 파일이 없거나
  • Picker 가 다른 계정의 드라이브를 보여주고 있음 (브라우저의 다중 Google 세션 충돌)
  • 해결:
    • Picker 우상단 계정 표시 확인
    • 시크릿/InPrivate 창에서 Workhub 로그인 후 재시도 (브라우저 세션 격리)
    • 또는 https://accounts.google.com 에서 모든 계정 로그아웃 후 연결한 계정만 로그인

메일함이 비어 있음 ​

  • 모듈 활성화 직후엔 동기화 안 됨
  • 관리자가 우상단 "새로고침" (수동 동기화) 클릭 — 최근 7일 INBOX 메시지 가져옴
  • 또는 cron 으로 주기적 동기화 (시스템 관리자 영역)

"기관 구글 계정 연결 필요" 가 계속 표시됨 ​

  • refresh_token 이 만료된 경우 (Testing 모드 + 7일 경과 등)
  • 해결: 같은 화면에서 "연결 해제" → 다시 "구글 계정 연결" 진행

발신 시 "412 Precondition Required" ​

  • gmail.send scope 가 부여되지 않음
  • 해결: 연결 해제 후 재연결 시 권한 동의 화면에서 모든 권한 체크

7. 보안 권장사항 ​

Client Secret 관리 ​

  • GCP Console 의 Client Secret 은 Workhub 관리자만 접근. 다른 곳에 평문으로 공유 금지
  • Workhub 내부에서는 AES-256-GCM 으로 암호화 저장 + 응답에서 마스킹
  • 의심 정황 발생 시 GCP Console 에서 Reset Secret → Workhub OAuth Config 재등록

권한 부여 토글 ​

드라이브 모듈의 "자동 권한 부여" 기능은 첨부 시 대화 구성원에게 자동으로 reader 권한을 부여합니다.

  • 기관 외부 사용자 (예: 게스트, 협력사) 가 참여하는 채널에서 첨부하면 외부 사용자에게도 자동 부여 될 수 있음
  • 민감 정보 보호가 중요한 채널은 자동 권한 부여 OFF + 수동 공유 권장

메일함 접근 통제 ​

  • 메일 모듈은 PolicyAllowlist 정책 — 명시적으로 허가한 사용자만 메일함 접근
  • 기본 전제: 기관 공용 메일함 = 민감 정보 → 신뢰할 수 있는 인원만 추가

운영 환경 분리 ​

  • 검증/개발용 OAuth Client 와 운영 OAuth Client 는 분리 권장
  • redirect URI 도메인이 다르므로 한 Client 에 양쪽 모두 등록하지 말고, 환경별 별도 발급

8. FAQ ​

Q. 한 OAuth Client 로 드라이브와 메일을 같이 쓸 수 있나요? A. 예. 같은 Client ID 로 OAuth 진행 시 scope 만 추가로 요청합니다 (incremental consent). 기관당 1개의 OAuth Client 로 충분합니다.

Q. OAuth Client 를 수정하면 기존 연결도 끊어지나요? A. Client ID/Secret 자체가 바뀌면 기존 refresh_token 으로 토큰 갱신이 실패합니다. 변경 후엔 연결 해제 → 재연결 이 필요합니다.

Q. 일반 사용자가 본인 개인 Gmail 을 연결할 수 있나요? A. 현재 모델은 조직 단위 1개 연결만 지원 (기관 공용 계정). 개인별 연결은 별도 향후 기능.

Q. 메일함에서 사용자별로 다른 메일이 보이나요? A. 아닙니다. 연결된 기관 공용 계정의 INBOX 가 모든 허가 사용자에게 동일하게 보입니다. 개인 메일은 본인 Gmail 에서 직접 확인해야 합니다.

Q. 운영 환경에서 GCP 토큰이 자주 만료됩니다. A. GCP 동의 화면이 "Testing" 상태이면 refresh_token 이 7일마다 만료됩니다. 운영에선 Internal 모드 또는 In Production + 검증 으로 전환해야 합니다.

Q. 드라이브 첨부 파일을 다운로드 받을 수 있나요? A. Drive 파일은 다운로드 대신 "Google Drive 에서 열기" 로 동작합니다 (저작권/권한 관리를 Google 에 위임). 원본을 받으려면 Drive UI 에서 직접 다운로드.


참고 링크 ​

Workhub 업무협업 플랫폼