일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬
- Python
- 소스코드
- 딥러닝
- 인공지능
- 파이썬게임만들기
- 기본기
- kakao
- 구글캘린더
- 파이썬게임
- STT
- 파이썬독학
- 빅데이터
- 구글
- OpenAPI
- 독학
- 크롤링
- 오늘배워오늘쓰는
- 카카오
- Ai
- 간단한파이썬게임
- Selenium
- 자동화
- 구글일정
- Quickstart
- 머신러닝
- 파이썬간단한게임
- 음성인식
- 업무자동화
- 웹크롤링
- Today
- Total
ai-creator
구글 OpenAPI 활용 - 캘린더 (1. 개념 : 자원편) 본문
구글 캘린더는 구글이 만든 일정 관리 웹 애플리케이션이자 모바일 앱이다. 2006년 4월 13일부터 이용이 가능하였으며 2009년 7월 베타 단계에서 빠져나왔다. 이 응용 프로그램을 사용하려면 구글 계정을 사용해야 한다. (참고 : 위키백과)
<< 목표 >>
오늘 다룰 내용은 다음과 같습니다.
- 구글 캘린더 서비스 세 가지 용어의 개념(자원, 방법, 데이터 형식)
- 구글 캘린더 자원의 7가지 종류
구글 서비스의 API는(네이버, 카카오 등 다른 대부분의 OpenAPI도 마찬가지) 서비스를 세 가지 측면으로 나눠서 구축해 놓았는데요. API를 사용할 때, 발생하는 많은 질문들은 이 세 가지 측면에서 답변할 수 있습니다.
1) 자원
2) 방법(=행위, 함수) : 자원을 다루는 방법을 의미합니다.
3) 데이터 형식(=표현 방식) : 자원을 제공하는 형식을 의미합니다.
이 세 가지 구성 요소의 개념에 대해서 알아놓으면, 다양한 OpenAPI들이 제공하는 서비스가 어떻게 구성되고 어떻게 이용해야 하는지 보다 잘 이해할 수 있습니다.
** 이 블로그에서는 일정(Event)을 중심으로 생성(Insert), 조회(List), 수정(Update), 삭제(Delete)하는 방법에 대해서 다룰 예정이니 다른 내용은 공식 문서를 참고하세요.
<< 사전 준비 >>
캘린더 API사용 enable
<< 순서 >>
Step 1 | 용어 설명 (자원, 방법, 데이터 형식) |
Step 2 |
구글 캘린더 자원의 7가지 종류 (일정, 캘린더, 캘린더 목록, 설정, 접근 제어 규칙, 색상, 약속 있음/없음) |
Step 1) 용어 설명 (자원 / 방법 / 데이터 형식)
구글 캘린더 서비스에서
1) 자원 : 일정, 캘린더, 캘린더 목록, 설정, 접근권한 등을 말하며,
2) 방법/행위란 일정을 조회하고(list), 일정을 삭제하고(delete)는 등의 list, delete... 함수를 뜻하고
3) 데이터 형식/표현 방식이란 이 자원에 요청한 행위의 결과를 JSON 형식(예 : {"일정":"3시에 약속"})으로 전달받는 것을 뜻합니다.
구성 요소 | 설명 | 예 | |
1 |
자원(resource) |
서비스에서 다루는 모든 정보/데이터 또는 그것을 포함하는 전체 서비스 그 자체를 의미 |
정보/데이터 - 텍스트/이미지/동영상 등 서비스 - 메일 전송/일정 관리 서비스 등 |
2 |
방법(=행위, 함수) (method/verb/operation) |
자원을 생성하고, 가져오고, 수정하고, 삭제하는 행위와 같이 자원에 행할 수 있는 행위를 정의한 것 |
- 일정 조회(list), 일정 삭제(delete) 등 - CRUD(Create/Read/Update/Delete) - HTTP Method(PUT/GET/POST/DELETE) |
3 |
데이터 형식(=표현 방식) (representation of resource) |
특정한 자원에 대한 특정한 행위를 요청한 뒤, 받은 결과를 표현하는 방식 |
html, xml, text, json, rss 등 ** 구글에서 사용하는 데이터 형식이란 JSON 형식에서 {"속성 이름":"값"}을 뜻합니다. |
*표 안에 굵은 글씨는 구글 캘린더 API 공식 문서에서 쓰는 용어입니다.
사실 구글 캘린더 API는 REST(REpresentational State Transfer)라는 설계 원칙에 따라서 만들어졌습니다. 이 세 가지 용어들은 모두 REST 설계 원칙에서 나온 개념입니다. REST에 대한 설명은 더보기를 눌러주세요.
REST(REpresentational State Transfer)란?
Representational : 대표적인(어떤 형식을 가진)
State : 상태
Transfer : 전달
영어 단어를 그대로 해석하면 '자원(resource)의 상태를 특정한 형식으로 전달'하는 것이라고 할 수 있습니다.
REST는 네트워크 설계 지침 중 하나이며 서비스(자원) 이용자와 제공자 사이에서 발생하는 상황에서의 규칙을 정할 때 따라야 할 가이드라인이며 자원이 중심이 됩니다.
서비스 이용자와 제공자 사이에서 발생하는 상황은 대부분 아래와 같습니다.
1. 모든 자원에 대한 고유한 구분이 필요하고(URI: Uniform Resource Identifier)
2. 자원을 생성, 조회, 수정, 삭제하는 등의 요청을 전달하는 방법들이 정의되어야 하며
3. 자원을 어떤 형식이나 표현으로 전달할지 정의되어야 합니다.
구글 캘린더 서비스에서 "사용자의 일정을 JSON 형식으로 가져오는(list)" 예를 통해서 살펴보겠습니다.
- '자원'이란 용어는 '일정'을 뜻하는데, 구글 캘린더 서비스는 일정이란 자원을 데이터베이스에 저장하고 있습니다. 보안을 위해 이 데이터베이스 자체는 막혀 있으며, 요청하는 일정 자원에 대해서만 HTML, XML, JSON등의 형식으로 전달하여 사용자들이 사용할 수 있게 되는 것입니다.
- '전달'이란 용어는 구글 캘린더 서비스(자원 제공자)가 자원을 운용할 때 따라야할 규칙을 정하고 사용자(자원 이용자)는 이 규칙에 맞게 요청을 전달하는 것이라고 할 수 있습니다.
- '상태'라는 용어는 우리가 일정(자원)을 요청했을 때, 그 요청한 시점에서의 일정 상태 정보를 의미합니다.
따라서 REST를 정리해본다면 서비스 사용자(자원 이용자)가 어떠한 자원에 직접 접근하는 것이 아닌 이러한 자원의 대표 혹은 형식이라고 부르는 JSON, XML, HTML 등의 데이터 자원의 위치를 명시해두면(URI: Uniform Resource Identifier) HTTP 상에서의 요청을 통해 접근할 수 있도록 한다는 의미가 되겠습니다.
REST 참고 사이트
Step 2) 구글 캘린더 자원(resource)의 7가지 종류
** 이 블로그에서 진행하는 구글 캘린더 API 사용에서는 1. 일정(Event)의 내용만 참고하시면 됩니다.
1. 일정(Event)
- 제목, 시작 및 종료 시간 및 참석자와 같은 정보가 포함된 캘린더의 일정입니다.
- 일정은 단일 일정(single events)이거나 반복 일정(recurring events) 일 수 있습니다.
- 일정은 일정 자원으로 나타냅니다.
- 주어진 캘린더에 대한 일정 모음(events collection)에는 해당 캘린더에 대한 모든 일정 자원이 포함됩니다.
2. 캘린더(Calendar)
- 캘린더는 일정의 모음입니다.
- 각 캘린더에는 캘린더 설명 또는 기본 캘린더 시간대와 같은 메타 데이터가 연결되어 있습니다.
- 단일 캘린더(single calendar)의 *메타 데이터는 캘린더 자원으로 표시됩니다.
- 캘린더 모음(calendar collection)에는 기존의 모든 캘린더에 대한 캘린더 자원이 포함되어 있습니다.
(*메타 데이터 : 데이터를 설명하는 데이터를 뜻함. 여기서는 캘린더를 설명하는 데이터를 캘린더의 메타 데이터)
3. 캘린더 목록(CalendarList)
- *캘린더 UI의 사용자 캘린더 목록에 있는 모든 캘린더의 목록입니다.
- 캘린더 목록에 나타나는 단일 캘린더(single calendar)의 메타 데이터는 CalendarListEntry 자원으로 표시됩니다.
- 이 메타 데이터에는 달력의 색상 또는 새 일정 알림과 같은 사용자 별 속성이 포함됩니다.
- 캘린더 목록 모음(calendarList collection)에는 지정된 사용자에 대한 모든 CalendarListEntry 자원이 포함되어 있습니다.
- 캘린더(Calendars) 및 캘린더 목록(CalendarList) 모음(collection)의 차이점에 대한 자세한 내용은 이곳을 참조하십시오.
(아래 더보기에는 두 가지 자원의 기능을 비교한 표를 넣었습니다.)
기능 (Operation) |
캘린더(Calendars) | 캘린더 목록(CalendarList) |
insert |
새로운 보조 캘린더를 생성합니다. 기본값으로, 이 캘린더는 또한 캘린더를 생성한 자의 캘린더 목록에 추가됩니다.(Creates a new secondary calendar. By default, this calendar is also added to the creator's calendar list.) |
이미 존재하는 캘린더를 사용자의 캘린더 목록에 삽입합니다. (Inserts an existing calendar into the user's list.) |
delete | 보조 캘린더를 삭제합니다.(Deletes a secondary calendar.) | 사용자의 캘린더 목록에서 해당 캘린더를 삭제합니다.(Removes a calendar from the user's list.) |
get | 제목, 시간대와 같은 캘린더의 메타 데이터를 가져옵니다.(Retrieves calendar metadata e.g. title, time zone.) | 메타 데이터에 더불어 사용자가 직접 지정한 색상이나 새로 정의된 알림 설정을 가져옵니다.(Retrieves metadata plus user-specific customization such as color or override reminders.) |
patch/update | 캘린더의 메타 데이터를 수정합니다.(Modifies calendar metadata.) | 특정 사용자에게만 해당되는 캘린더 속성을 수정합니다.(Modifies user-specific calendar properties.) |
(*캘린더 UI : 구글 캘린더 서비스의 화면을 말하는 것.)
4. 설정(Setting)
- 사용자 시간대와 같은 달력 UI의 사용자 기본 설정입니다.
- 단일 사용자 환경 설정(single user preference)은 설정 자원으로 표시됩니다.
- 설정 모음(settings collection)에는 지정된 사용자에 대한 모든 설정 자원이 포함되어 있습니다.
5. 접근 제어 규칙(ACL - Access Control Rule)
- 캘린더에 대한 지정된 수준의 액세스 권한을 사용자 (또는 사용자 그룹)에게 부여하는 접근 제어 규칙입니다.
- 단일 접근 제어 규칙은 ACL 자원으로 표시됩니다.
- 지정된 캘린더의 ACL 모음(ACL collection)에는 해당 캘린더에 대한 접근 권한을 부여하는 모든 ACL 자원이 포함됩니다.
6. 색상(Color)
- 캘린더 UI에 표시되는 색상입니다.
- 색상 자원은 캘린더 UI에서 사용 가능한 모든 색상 집합을 일정에 사용 가능한 색상과 캘린더에 사용 가능한 색상의 두 그룹으로 나타냅니다.
7. 약속 없음 / 있음(Free/Busy)
- 캘린더에 일정이 예약된 시간은 'busy'(약속 있음)로 간주되고 캘린더에 일정이 없는 시간은 'free'(약속 없음)로 간주됩니다.
- 약속 없음 / 있음 자원(freebusy resource)을 사용하면 지정된 캘린더 또는 캘린더 집합(set of calendars)에 대해 약속 있는 시간 집합에 대해서 요청할 수 있습니다.
<< 참고 자료 >>
저작물의 저작권은 작성자에게 있습니다.
공유는 자유롭게 하시되 댓글 남겨주세요~
상업적 용도로는 무단 사용을 금지합니다.
끝까지 읽어주셔서 감사합니다^^
'오늘 배워 오늘 쓰는 OpenAPI > 프로젝트' 카테고리의 다른 글
OpenAPI 활용 - 날씨 정보를 사용한 맛집 추천 프로젝트 (41) | 2020.02.22 |
---|---|
OpenAPI 활용 - 일정 도우미 프로젝트 (10) | 2020.02.22 |
구글 OpenAPI 활용 - 캘린더 (2. 개념 : 함수/데이터 편) (5) | 2020.02.22 |
카카오 OpenAPI 활용 - 나에게 카톡 메시지 보내기 (46) | 2020.02.22 |
Open API 는 어디에 있나요? (0) | 2020.01.24 |