[개발PC : MacBook]
Chapter03) 저장소 구축하기 구글시트
학습 목표 : 구글 시트 서비스를 이용하여 스프레드시트에 콘텐츠를 입력, 가공, 활용해봅니다.

구글 시트(Google Sheets)는 구글에서 제공하는 무료 온라인 스프레드시트 애플리케이션입니다.
엑셀 파일을 가져오기나 엑셀 파일로 내보낼 수도 있습니다.
[코로나보드와 구글 시트]
구축 시간이 더 걸리는 관계형 데이터베이스를 이용하면 비효율적이라 판단했습니다.
테이블 스키마 정의, 데이터를 읽고 쓰는 API 개발, 데이터 입력 도구 개발 등 할 일이 너무 많았기 때문에,
데이터베이스가 아닌 구글 시트를 주요 데이터 저장소로 선택했습니다.

입력된 데이터는 구글 시트 API를 이용하여 읽어온 후 정적 웹 사이트를 빌드하는 시점에 원하는 형태로 가공하여 템블릿 웹페이지에 주입해 최종 페이지를 생성합니다.
사용자가 코로나보드 웹사이트에 접속하면 이렇게 미리 생성된 정적 페이지를 받아갑니다.
따라서 접속자가 늘어도 구글 시트 API 호출이 늘어나지도 않고, 구글 시트 API의 응답 속도가 느리더라도 웹사이트를 이용하는 사용자에게는 전형 영향이 없습니다.
[구글 시트 API 사용 설정]
구글 시트 API를 사용하려면 구글 계정이 필요하고, 로그인 후 GCP(Google Cloud Platform) 콘솔 웹사이트에 접속하여 다음 순서로 설정을 진행해야 합니다.
<OAuth 동의 화면 설정하기>
구글 시트 API가 활성화된 후, 특정 계정만 접근 할 수 있도록 설정되어 있어 여전히 접근이 불가능합니다.
이러한 스프레트시트에 접근하려면 구글 시트 API를 호출하는 주체가 접근 권한을 가진 구글 계정이라는 것을 '인증'해야만 합니다.
이 과정에 OAuth를 사용합니다.
OAuth란 Open Authorization의 약자로 어떤 웹 서비스에서 다른 웹 서비스의 기능을 사용하고 싶을 때 다른 웹 서비스 계정의 아이디/비밀번호 없이도 해당 기능을 사용하는 권한을 획득해 주는 표준화된 방법입니다.

(1) A 서비스에서 페이스북의 기능을 사용하려는 시점에 사용자에게 포스팅 권한을 달라는 인수를 넣어서 페이스북의 권한 요청 페이지로 리다이렉트(redirect)시킵니다.
(2) 사용자가 페이스북에 로그인이 되어 있지 않다면 페이스북 로그인 페이지로 이동됩니다.
(3) 로그인에 성공하거나, 이미 로그인이 되어 있던 상태라면 A 서비스에서 페이스북에 포스팅 권한을 요청한다는 페이지가 사용자에게 표시됩니다.
(4) 사용자가 '권한 허용' 버튼을 누르면 승인 코드가 발급됩니다.
(5) 발급받은 승인 코드를 이용하여 토큰 엔드포인트에 토큰 발급 요청을 하면 최종적으로 A 서비스가 페이스북이 발급한 액세스 토큰(access token)을 받게 됩니다.
(6) 이제부터 A 서비스에서는 이 엑세스 토큰을 사용하여 페이스북 API를 호출할 수 있게 됩니다.
이러한 과정을 통해 A 서비스는 사용자의 페이스북 아이디와 비밀번호를 전혀 모르는 상태로 보안상 안전하게 해당 사용자의 페이스북 기능을 사용할 수 있게 됩니다.
구글 시트와 OAuth를 연동하는 방법은 다음과 같습니다.
(1) 구글 계정에 대한 OAuth 인증 절차를 통해 액세스 토큰을 발급받습니다.
(2) 구글 시트 API를 호출할 때마다 이 액세스 토큰을 같이 전송하도록 합니다.
(3) 구글 시트 API는 이 액세스 토큰을 통해 현재 API를 호출하는 주체가 어떤 구글 계정인지 알게 되고, 이 계정이 접근하는 스프레드시트에 구글 시트 API도 동일하게 접근할 수 있게 해줍니다.
P116~121
[구글 시트 API 클라이언트 생성하기]
P121~127
[구글 시트 API로 데이터 읽기]
P128~134
쓰기 추가해야 함