Google Calendar API 적용기

2 minute read
2024-07-30

GCP 세팅

가장 먼저 프로젝트를 만들고 API 사용하도록 체크해줘야 한다.


image-20240730133349591


클릭만 하면 사용 가능해진다.


image-20240730132512499


그 다음 OAuth 기반 인증 방식을 사용하기 위해 동의 화면 생성과 인증 정보(credential) 을 발급받아야 한다.


동의 화면에서는 외부 로 타입을 지정하고 나머지는 그냥 pass 하면 된다.


인증 정보는 OAuth2.0 Client ID (가운데) 를 생성해서 json 으로 다운 받는다.


image-20240730132819633


이때, 데스크탑 앱 으로 발급해야한다. 자칫 웹앱으로 해서 redirectURL 관련 에러가 발생할 수 있다.


image-20240730135225940


하지만 이걸론 API 사용이 불가하다. 아직 게시하지 않았기 때문이다.


image-20240730132958647


이를 위해 앱 게시하거나 테스트 유저를 선정해야한다.


image-20240730133053804


테스트 유저는 진짜 계정의 이메일로 추가 가능하다. 위 알림 내용처럼 테스트 환경에서만 접근 가능하다.


image-20240730133201187


개발

참고한 문서는 공식 문서, 이슈 를 참고했다.


주요 로직은 인증 에 있다. 최초 로그인 시에 access token 과 refresh token 이 필요하기 때문에 이를 token.json 에 저장하고 2번째 API 요청부터는 그대로 이를 사용해서 브라우저가 안켜지게한다.


"google-auth-library": "^8.9.0",
"@google-cloud/local-auth": "^2.1.0",
"googleapis": "^105.0.0",


올바르게 API 요청에 성공하면 아래와 같이 응답 데이터를 받을 수 있다.


image-20240730135256539


발생한 타입 오류

패키지가 업데이트 되면서 타입 쪽에서 에러가 발생했다.


client = google.auth.fromJSON() // JsonClient
 
client = authenticate() // ERR :: OAuth2Client 타입 기대. OAuth2Client !== JsonClient


그래서 편법으로 google-auth-library 에서 제공하는 타입 OAuth2Client 를 devDependecies 로 추가해서 사용했다.


type OAuth2Client
// google-auth-library (v8.9.0)
// https://github.com/googleapis/google-auth-library-nodejs/issues/1402#issuecomment-1656182442
import type { OAuth2Client } from "google-auth-library";
 
const client = google.auth.fromJSON(credentials);
return client as OAuth2Client;


개선해야할 사항

토큰 발급할 때마다 브라우저에서 켜지는 OAuth Login 을 진행해야한다. 서버리스에서 진행하려면 어떻게 해야할까?


json 파일을 저장할 s3 와 이에 대한 권한 세팅 (읽기/쓰기) 도 추후 시도해봐야 한다.