본문 바로가기
  • 실행력이 모든걸 결정한다
OpenAPI/OAuth

[OAuth] Google Calendar(1) - API 문서 읽기

by 김코더 김주역 2021. 8. 1.
반응형

이전에 올렸던 "OAuth 2.0 소개" 포스팅을 바탕으로 OAuth를 실제로 사용해볼 것이다.

https://kimcoder.tistory.com/320

 

[OAuth] OAuth 2.0 소개

1. OAuth이 왜 필요한가? 자신이 운영하는 서비스에 소셜 로그인같은 다른 서비스를 연동시킨다고 생각해보자. 그리고 사용자가 여러분에게 소셜 ID, PW를 알려주면, 여러분이 사용자 대신에 SNS 로

kimcoder.tistory.com

 

필자가 올린 Google Calendar(1)~(4)를 쭉 훑어보면서 OAuth를 더 깊이 이해해보길 바란다.

 

1. Google Cloud Platform 접속

Google API는 Google Cloud Platform에서 이용할 수 있다.

https://cloud.google.com/gcp

 

클라우드 컴퓨팅, 호스팅 서비스 및 API  |  Google Cloud

Google Cloud는 비즈니스의 발전을 위해 설계된 유연한 인프라, 엔드 투 엔드 보안, 지능형 통계를 제공합니다.

cloud.google.com

 

Google Cloud Platform을 처음 시작한다면 약관 동의와 결제 수단 등록 절차를 마치고 Console로 이동한다.

추가 비용은 유료 계정으로 업그레이드 해야만 부과되기 때문에 걱정하지 않아도 된다.

 

이 화면이 콘솔 화면이다.

 

 

 

2. Client 생성

좌측 메뉴의 [API 및 서비스]에 들어가면 API를 사용하기 위한 인증 정보들을 확인할 수 있는데, 사용자 인증 정보를 만들어야 인증 정보들이 표시된다.

이제 OAuth 클라이언트를 생성해보자.

 

1) 사용자 인증 정보 -> 사용자 인증 정보 만들기

 

 

2) OAuth 클라이언트 ID

 

 

3) 동의 화면 구성

 

필자는 이렇게 동의 화면을 구성했다.

사용자 유형, 앱 이름, 지원 이메일 외에는 모두 생략했다.

 

 

4) 돌아가서 다시 OAuth 클라이언트 ID 클릭

 

 

5) OAuth 클라이언트 설정

 

Client ID, 비밀번호를 성공적으로 발급 받았다.

 

Client 비밀번호를 잊어버렸어도 [OAuth 클라이언트 수정]에서 확인 가능하다.

 

 

 

3. 사용할 서비스 선택

이번 예제에서는 Google Calendar API를 사용할 것이기 때문에 사용 설정을 해야 한다.

먼저, 라이브러리에서 Calendar을 검색하자.

 

라이브러리의 API 페이지에서는 API 사용 신청 및 체험이 가능하고, API 문서도 확인할 수 있다.

 

이렇게 잘 안내가 되어있기 때문에, 이번 예제만 무사히 잘 이해하고 넘어간다면 다른 Google API들의 사용법도 쉽게 익힐 수 있을 것이다.

여기서부터는 무작정 따라하기만 하는 것 보다는, API 문서를 읽는 요령을 터득해서 독립적으로 해내는 것을 목표로 하는 것이 좋다.

 

 

 

4. API 문서 확인

구글 캘린더의 리스트를 확인하려면 API 문서의 CalendarList: list 항목을 참고하면 된다.

특정 캘린더의 데이터를 가져오려면 해당 캘린더의 "calendarID"를 알고 있어야 하는데, 이 CalendarList: list 항목에서 캘린더들의 "calendarID"를 확인할 수 있다.

https://developers.google.com/calendar/api/v3/reference/calendarList/list?hl=ko 

 

CalendarList: list  |  Calendar API  |  Google Developers

Note: Requires authorization. Returns the calendars on the user's calendar list. Try it now or see an example. Request HTTP request GET https://www.googleapis.com/calendar/v3/users/me/calendarList Parameters Parameter name Value Description Optional query

developers.google.com

 

이제 API 문서를 리뷰해보자.

 

1) HTTP request

HTTP request는 요청 URL이다. 이 URL뒤에 요청 파라미터들을 넣어야 완전한 요청 URI가 되는 것이다.

 

 

2) Parameters

요청 파라미터들이다.

여기에는 나와있지 않지만, 사용자를 식별하기 위한 access_token값도 파라미터에 반드시 포함시켜야 한다. 지금 당장은 access_token값을 알 수 없다.

Optional은 선택 사항이기 때문에 생략이 가능하며, 생략했을 때의 기본값을 default라고 한다는 사실도 반드시 기억해두자.

 

 

3) Authorization

Scope는 사용할 기능에 대한 인증 양식이다.

최소 하나 이상의 Scope의 양식을 사용해야 한다고 명시되어있다.

그리고, authentication and authorization 링크에서 해당 Scope의 의미를 확인할 수 있다.

 

 

4) Response

응답 메세지의 구성에 대한 설명이다.

각 JSON 오브젝트의 데이터가 무슨 의미를 가지는지 설명한다.

 

 

5) 사용해보기

응답 메세지를 받아볼 수 있는 기능이다.

 

요청 파라미터들에 원하는 값을 입력하고 [EXECUTE]를 누르면 요청이 전송된다.

 

CalendarList: list의 요청 파라미터들은 모두 Optional이기 때문에 바로 [EXECUTE]를 눌렀다.

데이터를 성공적으로 전송받았다.

 

전체 응답 메세지

중간중간에 캘린더별 id(calendarID)도 확인할 수 있었다.

{
 "kind": "calendar#calendarList",
 "etag": "\"p32g99et5r27v40g\"",
 "nextSyncToken": "CKCUu6XYj_ICEhNqb295ZW9rNDJAbmF2ZXIuY29t",
 "items": [
  {
   "kind": "calendar#calendarListEntry",
   "etag": "\"1627810150389000\"",
   "id": "addressbook#contacts@group.v.calendar.google.com",
   "summary": "생일",
   "description": "Google 주소록에 등록된 사람들의 생일, 기념일, 기타 일정 날짜를 표시합니다.",
   "timeZone": "Asia/Seoul",
   "colorId": "13",
   "backgroundColor": "#92e1c0",
   "foregroundColor": "#000000",
   "selected": true,
   "accessRole": "reader",
   "defaultReminders": [],
   "conferenceProperties": {
    "allowedConferenceSolutionTypes": [
     "hangoutsMeet"
    ]
   }
  },
  {
   "kind": "calendar#calendarListEntry",
   "etag": "\"1627816028273000\"",
   "id": "ko.south_korea#holiday@group.v.calendar.google.com",
   "summary": "대한민국의 휴일",
   "description": "대한민국의 공휴일",
   "timeZone": "Asia/Seoul",
   "colorId": "8",
   "backgroundColor": "#16a765",
   "foregroundColor": "#000000",
   "selected": true,
   "accessRole": "reader",
   "defaultReminders": [],
   "conferenceProperties": {
    "allowedConferenceSolutionTypes": [
     "hangoutsMeet"
    ]
   }
  },
  {
   "kind": "calendar#calendarListEntry",
   "etag": "\"1627816306068000\"",
   "id": "jooyeok42@naver.com",
   "summary": "jooyeok42@naver.com",
   "timeZone": "Asia/Seoul",
   "colorId": "14",
   "backgroundColor": "#9fe1e7",
   "foregroundColor": "#000000",
   "selected": true,
   "accessRole": "owner",
   "defaultReminders": [
    {
     "method": "popup",
     "minutes": 30
    }
   ],
   "notificationSettings": {
    "notifications": [
     {
      "type": "eventCreation",
      "method": "email"
     },
     {
      "type": "eventChange",
      "method": "email"
     },
     {
      "type": "eventCancellation",
      "method": "email"
     },
     {
      "type": "eventResponse",
      "method": "email"
     }
    ]
   },
   "primary": true,
   "conferenceProperties": {
    "allowedConferenceSolutionTypes": [
     "hangoutsMeet"
    ]
   }
  }
 ]
}

 

실제 나의 캘린더

알림 캘린더와 Tasks 캘린더에는 아무런 정보도 없어서 CalendarList에서 제외된 것같다.

반응형

댓글