본문 바로가기
모바일 SW 개발/REST API

Google Gmail API 사용 방법 (1) - Sample code

by 모바일 SW 개발자 Kibua20 2020. 6. 29.
반응형

Google에서 제공하는 Gmail REST API를 사용하는 방법에 대해서 설명하고자 한다.  Google에서는 GMAIL 뿐 아니라 YouTube, Cloud, Analytics 등 거의 모든 서비스에 대해서 REST API(이하 API)를 지원한다. 참고고, 커멘드 라인으로 Gmail을 전송하는 방법은 아래 게시글에 설명되어 있다. 아래 2가지 모두 stmp 서버의 계정 정보가 노출되어야 한다.

 

본 게시글은 구글 API를 사용하기 위해서는 Web Server application 기준으로 3개의 게시글로 나눠서 설명할 예정이다. 

 

1단계는 Google API Console에서 진행하고, 2단계와 3단계는 Chrome broswer에서 진행한다. 이 단계에서는 Web Server가 필요하면 redirect URL을 위한 html을 준비해야 한다.  3단계가 완료되면 API를 사용할 수 있는 access token을 획득할 수 있다. Access token은 1시간 정도만 API를 사용할 수 있고, 일정 시간이 지나면 만료되어 보안 처리가 되어 있다. 마지막 4단계에서는 Access token을 기반으로 Python으로 Gmail API를 사용할 것이다. Python의 request 모듈을 기반으로 동작한다. 

 

 

  • 1 단계: Google API Console 에 Libray 활성화, 사용자 동의 화면 구성, API scope 지정, Client ID, Client screte을 생성한다. 그 결과를 credentital.json로 저장 파일로 저장할 수 있다.
  • 2 단계: 이 단계에서는 사용자 구글 계정의 로그인 과정이 진행되며, API에 대한 권한을 확인하는 과정이다.  구글 인증 서버의 reponse 안에  Authorization code가 포함되어 있다. 
  • 3 단계: Authoization code와 함께 client ID와 screte를 조합하여 구글 인증 서버로  refresh token과 access token을 요청한다. 
  • 4 단계:  Access token 사용하여 Google 서버에  API를 호출한다. API 호출은 curl 명령어나 Python의 request 모듈을 사용할 수 있고, Access token 은 request의 header에 포함시켜 실제 REST API를 호출한다.

Google API 호출을 위한 전체 Flow (Web Server Application flow로 진행)

 

Google의 "OAutho 2.0 기반의 인증" 은 1) Sever side web application, 2) Java script Web apps, 3) Mobile & Desktop App, 4) TV (limted input) Applicatin, 5) Sevice Account로 구분할 수 있다. 구글에서는 Go, Java scrpt, Java, PHP, Python, Ruby 의 client를 지원하고 있다.  본 게시글은 Web server application의 flow로 진행하고 Python client로 설명할 예정이다. 

Google OAutho 2.0 지원 범위: 

 

<게시 글 링크>

[모바일/REST API] - Google gmail Rest API 사용 방법 (1):  1단계 설명 (본 게시글)

[모바일/REST API] - Google gmail Rest API 사용 방법 (2) : 2단계와 3단계 설명

[모바일/REST API] - Google gmail Rest API 사용 방법 (3) : 4단계 설명

 

 

 

1단계: Google API Console에서 Gmail API 활성화 및 Client 생성

Google API 콘솔에 구글 게정으로 로그인하고  Google API 사용 등록을 위해서 Project를 생성하여 Client ID 와 Client screte을 생성하는 과정이다.  1단계에서의 결과는 Credential.json 파일로 저장할 수 있다.

 

API용 구글 계정은 서비스용으로 사용하기 때문에 개인 계정과는 별도로 '공용' 계정으로 만드는 것이 좋다. 계정 별로 프로젝트 개수는 10개~12개 정도로 제한되어 있고 조직별 관리도 가능하다. 또한 Project 별로 API 호출 회수, latency 등에 대한 통계도 제공된다.

1.1.  Project 생성

Project 생성은 1) 상단 메뉴에서 "프로젝트 선택"  클릭, 2) "새 프로젝트" 클릭, 3)  Project 이름 추가, 4) 만들기 클릭하면 생성된다. Project 이름은 원하는 이름으로 입력하고 추후 변경할 수 있다.  본 게시글의 Project 이름은 'Gmail'로 만들었다.

 

Google API 사용을 위한 Project 생성

Project 생성은 누르면 1~2분 안에 신규 Project가 생성이 완료했다는 팝업이 표시되고, 메뉴 상단에서는 Project 이름이 상단에 표시되고,  "아직 사용할 수 있는 API가 없습니다. 시작하려면 'API 및 서비스 사용 설정'을 클릭하거나 API 라이브러리로 이동하세요." 라는 문구를 표시한다. 

Google API 사용을 위한 Project 생성

 

1.2.  라이브러리 활성화

Google GMail API를 활성화는 5번 항목처럼 좌측 사이드 바의 라이브러리 메뉴에서 Gmail을 검색한다.   6) 'gmail'로 검색하면 아래와 같이 2개의 검색 결과를 표시하고, 7) Gmail API를 선택한다. 8) '사용 설정'을 선택하면 최종적으로 해당 프로젝트에서 GMail API 사용이 enable 된다.  Gmail API에 대한 사용자 개요 및 사용 설명서가 제공된다. 

 

추후 Access token을 얻으면 'API 사용해 보기' 메뉴에서 API의 동작을 Web Page 상에서 확인할 수 있다.  즉, curl이나 python으로 https 구현 없이 https:// 에 header나 data 값을 추가하여 API 동작을 사전에 확인이 가능하다. 이는 처음 API를 사용하는 경우 디버깅 시간을 줄이는데 매우 용이하다. 

Google API 사용을 위한 API 선택
Google API 사용을 위한 API 선택: Gmail API를 enable

 

1.3.  OAutho 동의 화면 설정

GMail API을 enable 후에는 OAutho 동의 화면과 사용자 인증 정보를 만들어야 한다.   

 

OAutho 동의 화면은 추후 사용자 로그인 시 표시되는 권한 리스트이다. 향후 사용자 로그인 시점에서 API 권한을 동의받는 화면을 구성하게 된다. 자물쇠 표시 권한은 사용자 개인 정보와 관련된 민감한 정보로 사용자에게 반드시 동의를 얻어야 하는 것이다.  Project 목적에 따라서 필요한 권한 선택을 하도록 한다. 추후 API 사용 API scope에 해당하는 list가 반드시 포함되어 있어야 한다.

 

1) 좌측 사이드바 메뉴에서 OAutho 동의 화면 선택

2) OAutho 동의화면 중간에 '범위 추가' (API Scope) 선택 

3) 해당 API scope 선택:  구현하고자 하는 API  특성에 따라서 Scope을 정해야 한다.  

OAutho 동의 화면 구성

 

1.4. 사용자 인증 정보 구성 

사용자 인증 정보는 API 키, OAutho Client ID, 서비스 계정 중 선택할 수 있고,  본 게시글에서는 OAutho Client ID를 선택한다.

 

  • API Key는  프로젝트 및 이 키를 지원하는 모든 API에서 사용할 수 있는 API 키이며, 애플리케이션에서 이 키를 사용하려면 키를 key=API_KEY 매개변수로 전달하면 된다.
  • OAutho Client ID는 사용자 계정으로 계정 접근에 대한 동의 화면을 표시한다.  클라이언트 ID는 Google OAuth 서버에서 단일 앱을 식별하는 데 사용됩니다. 앱이 여러 플랫폼에서 실행되는 경우 각각 자체 클라이언트 ID가 있어야 한다.  본 게시글은 OAutho Client ID를 만든다. 
  • 서비스는 계정은 사용자 로그인이 없이 JWT를 이용해서 액세스 권한을 획득하는 것이다. 별도의 로그인 과정이 필요 없기 때문에 서버-서버 Application에 접할 수 있고, JWT 생성을 위한 추가 과정이 필요하다. ( ※ 서비스 계정은 추후 별도 포스팅 예정)

 

1) 좌측 사이드 바에서 '사용자 인증 정보' 선택

2),3)  사용자 인증 정보 추가 -  OAutho Client ID로 추가 

4), 5)OAutho client ID 만들기에서는 애플리케이션 유형을 "웹 애플리케이션"으로 선택한다.  이 과정에서는 Web Application, Android, Chrome 앱, IOS, TV, Desktop App, UWP를 선택할 수 있다. 

6),7)  "웹 애플리케이션" 선택 후 '승인된 자바 스크립트 URI"를 입력한다.  구글 인증 서버의 승인 결과를 re-direct 가능한  Web page로 받을 예정으로,  Web 페이지를 호스팅이 가능해야 한다. 

 

로컬 PC에 웹 서버와 java script 서버 (Apache2와 Tomcat)이 설치되어 있는 경우 localhost도 가능하다.  이 경우  6) URl에 http://localhost:8080  (127.0.0.1은 동작 안됨)을 추가하고, 7) Redirect URL에서 http://loalhost:8080/receviecode.html을 작성한다.  로컬 웹 서버에 recievecode.html 작성 방법은 다음 게시글에서 설명 예정이다.  

 

사용자 인증 정보 - OAutho Client ID를 선택 후 웹 애플리케이션으로 선택

 

사용자 인징 정보 만들기 - OAutho Client ID 생성

 

 

1.5. OAutho Client ID 결과 확인

OAutho 사용자 인증 정보 만들기가 완료되면 구글 콘솔에서 1) 클라이언트 ID와 2) 클라이언트 비밀번호가 할당된다. 클라이언트 비민 번호(Client Secret)는 외부로 유출하면 안 되는 정보이다.  클라이언트에 대한 정보는 JSON 파일로 저장 가능하며, 앞서 입력한 Java script URL 및 redirect URL 정보도 포함하고 있다.  구글의 샘플 코드에서 'client_secret.json'  파일이 아래 credential.json 파일이다. 추후 구글 인증 서버에서 Authorization code를 받으면 Client ID와 Client secret를 JSON으로 서버에 전달하여 Access token을 받는다. 

 

사용자 인징 정보 만들기 - OAutho Client ID 생성 결과
사용자 인증 정보 - OAutho client ID 생성 결과 JSON 파일

 

관련 글:

[모바일/REST API] - Google gmail API 사용 방법 (3)

[모바일/REST API] - Google gmail  API 사용 방법 (2)

 

[모바일/Python] - Python 표준 입출력(stdin/stdout) 활용 - 리눅스 프로그램과 연동

[모바일/Python] - Python JSON 사용 시 TypeError: Object of type bytes is not JSON serializable

[모바일/Python] - Python smtplib 사용한 email 발송 예제 (gmail)

[개발환경] - [Memo] 우분투에서 gmail 활용하여 command line으로 email 전송

[모바일/REST API] - 우분투 20.04에서 Web 서버 설치 방법 (apache2, tomcat9)

반응형



댓글3

  • 호기심 2020.08.06 13:57

    혹시 안드로이드 폰에서 해당 구글 api 서비스계정 생성 파이썬 모듈을 실행하여 새로 발급 된 서비스계정을 구글계정과 동일한 효력으로 사용 가능 한건가요? 그리고 의뢰도 받으시는지 여쭤 봅니다
    답글

    • 일반 사용자 분들이 만드시는 계정과 서비스 계정은 조금 차이가 있습니다. 서버나 특정 서비스의 백엔드에서 구동하는 계정으로 생각하시면 됩니다.

      서비스 계정과 일반 구글 계정 API 사용 측면에서는 동일합니다. 하지만 서비스 계정만으로 사용자 UI 가 필요한 Gmail 이나 Calendar를 사용자가 서비스 계정으로 로그인하여 사용할 수 는 없는 것 같습니다.

      '의뢰'는 무엇을 말씀하시는 것인가요?

    • OAuth2 방식은 사용자 계정과 파이썬 구동 계정을 동일하게 처리하는 경우입니다.

      서비스 계정은 JWT 구현한 경우에 사용됩니다. https://kibua20.tistory.com/87 가 JWT 으로 구현한 설명입니다.