주식 데이터 자동 기록 기초 EP01. 구글 클라우드 콘솔 설정 및 블로거 API 연동

목차

 

전일 지수를 매일 새벽마다 체크해야 하는 건 당연하다. 그런데 기록하지 않으면 건너뛰는 날이 있게 되기도 하고, 나의 보유 종목이 별다른 성과를 내지 않는 상태라면 흥미가 줄어 챙겨보는 걸 귀찮아하기도 한다. 그래서 나의 생각이 흩어져 관리가 잘 안 된다. 머리가 나쁘면 기록을 해야지 하면서 스스로 질책을 하게 되어 자동화를 준비하고자 마음먹었다. 초보자이고, 좌충우돌하겠지만 그래도 남는 게 있지 않을까 싶다.

결론부터 말하자면, 매일 체크해야 하는 동일한 자료들을 하나의 파이썬 마스터 코드로 통합하여 아래의 3가지 채널로 동시에 자동 수신받도록 시스템을 만들 예정이었다.

1. GitHub Actions → Yahoo Finance 정보 → Google Blogger

2. GitHub Actions → Yahoo Finance 정보 → Notion

3. GitHub Actions → Yahoo Finance 정보 → Telegram

이 작업을 시작할 당시 GitHub 가입, Notion API 발급, Telegram 봇 토큰, Chat ID 발급은 완료된 상태였다. 이 과정들은 아래 이전 글에 남겨두었다.

 

내가 원하는 자동화 시스템을 만들기 위해 당시 총 6편을 계획했다. 그 첫 번째 단계인 이 글에는 Google Blogger API를 사용하기 위한 환경을 만들고, 매번 새로 로그인하지 않아도 인증 정보를 불러올 수 있도록 token.pickle 파일을 생성하는 과정을 담았다.

시행착오와 해결 과정까지 겪는 대로 모두 남겨놓다 보니 글이 매끄럽지 않을 수 있다. 그럼 이제 시작해보자.

2026년 10월 현재

당시 계획했던 자동화는 현재 사용하고 있지 않다. 오랜만에 글을 다시 정리하면서 보니, 주식 데이터를 수집해 Blogger·Notion·Telegram으로 자동 기록하는 구조를 하나씩 직접 만들어보던 과정이었다. 현재는 이때 공부했던 구조 가운데 다시 활용할 수 있는 부분이 있는지 살펴보고 있다.

1. Google Blogger API 인증키 발급받기

(1) 아래 버튼을 클릭해 Google Cloud Console에 접속한다.

프로젝트 만들기

(2) 좌측 상단 '프로젝트 선택' 버튼을 클릭한다.

(3) 작은 창이 열리면 우측 상단 '새 프로젝트'를 클릭한다.

(4) 프로젝트 이름을 입력한 후 아래 만들기 버튼을 클릭한다.

만든 프로젝트로 진입

(5) 우측 상단 알림창이 떠 있다. '프로젝트 선택'을 클릭한다.

(6) 왼쪽 상단의 메뉴 (≡) 아이콘을 클릭하여 왼쪽 메뉴를 펼친 후 'API 및 서비스' → '라이브러리'로 이동한다.

(7) 검색 칸에 'Blogger'를 입력하여 검색한다.

(8) 검색된 'Blogger API'를 클릭한다.

(9) 파란색 '사용' 버튼을 클릭한다.

(10) 왼쪽 메뉴의 '사용자 인증 정보'를 클릭한다.

(11) 상단 '애플리케이션에 대한 정보를 포함하여 OAuth 동의 화면을 구성해야 합니다.' 옆 '동의화면 구성' 버튼을 클릭한다.

(12) 화면이 바뀌면 파란색 '시작' 버튼을 클릭한다.

(13) 앱 이름 입력, 사용자 지원 이메일 선택(본인 이메일 선택) 후 아래 '다음' 버튼을 클릭한다.

(14) 대상은 필자의 경우 '외부'로 선택해야 했다. 선택을 안 하면 다음으로 넘어갈 수도 없고, 내부 클릭은 비활성화되어 있었다. 내부는 구글 조직 직원용(?) 뭐 이런 거라 하는데 그럼 다행이다. 그리고 나서 아래 '다음' 버튼을 클릭했다.

(15) 연락처 정보에 이메일 주소를 입력한 후 '다음' 버튼을 클릭한다.

(16) 완료에서 'Google API 서비스: 사용자 데이터 정책에 동의합니다.'에 체크한 후 계속 버튼을 클릭한다.

(17) 아래 '만들기' 버튼을 클릭한다.

OAuth 클라이언트 ID 생성

(18) 우측에 'OAuth 클라이언트 만들기' 버튼을 클릭한다.

(19) 애플리케이션 유형에서 '데스크톱 앱'을 선택한다.

(20) 이름을 입력한 후 아래 '만들기' 버튼을 클릭한다.

(21) 작은 창이 뜬다. 아래 '⬇️ JSON 다운로드'를 클릭한 후 다운로드된 파일을 잘 보관하고 하단 '확인' 버튼을 클릭한다.

당시에는 이 다운로드 파일을 블로거에 접속하게 해주는 비밀번호 같은 개념으로 이해했다.

2. Google Blogger의 관리자 ID 알기

(22) Google Blogger 관리자 페이지로 이동한다.

(23) 상단 주소창을 확인한다. 아래처럼 뒤에 있는 숫자들이 블로거의 본인 아이디에 해당된다.

https://www.blogger.com/blog/posts/숫자들

3. 파이썬 준비 및 필수 라이브러리 설치

실전에서는 24시간 가동을 위해 GitHub를 사용할 예정이었지만 현재는 수동으로 해야 할 작업이 남아 있으므로 파이썬을 이용한다.

파이썬이 실행되지 않거나 설치해야 한다면 아래 이전 글의 '4. 파이썬 설치 및 기본 환경 테스트' 부분을 참고하면 된다.

(24) 바탕화면에 'blog_bot'이라는 이름의 폴더를 만든 후 위 (21)에서 다운로드받은 긴 이름의 파일을 넣는다.

(25) 이 파일의 이름이 너무 길어서 'client_secret.json'이라는 이름으로 수정한다.

Google API 통신장비 설치

(26) 바탕화면 아래 작업표시줄의 검색 칸에 'CMD'를 입력해 명령 프롬프트를 띄운다.

(27) 아래 코드를 복사해 명령 프롬프트에 붙여넣은 후 엔터를 누른다.

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

 

Google과 내 PC 접근 허용

(28) 새로운 메모장을 열어 아래 코드를 복사해 붙여넣기 한다.

import os
import pickle
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# 블로거 API 접근 권한 설정 (읽기/쓰기 권한)
SCOPES = ['https://www.googleapis.com/auth/blogger']

def get_blogger_service():
    creds = None
    # 기존에 생성된 인증 파일(token.pickle)이 있는지 확인
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)

    # 인증 파일이 없거나 만료된 경우 새로 인증 진행
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            # client_secret.json 파일이 폴더에 있어야 함
            flow = InstalledAppFlow.from_client_secrets_file(
                'client_secret.json', SCOPES)
            creds = flow.run_local_server(port=0)

        # 인증 정보를 token.pickle 파일로 저장
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    print("인증 성공! token.pickle 파일이 생성되었습니다.")

if __name__ == '__main__':
    get_blogger_service()

 

(29) 파일 형식 : 모든 파일, 파일 이름 : auth.py로 저장한다.

(30) 방금 저장한 auth.py라는 이름의 파일을 위 (24)에서 만든 'blog_bot'이라는 폴더에 넣는다.

(31) 만들어 둔 'blog_bot' 폴더를 열고, 상단 주소창에 'CMD'를 입력한다.

(32) 새로운 창이 열리면 아래 코드를 복사해 붙여넣기 한 후 엔터를 누른다.

py auth.py

ModuleNotFoundError: No module named 'google_auth_oauthlib' → 오류

오류 해결하기 - 라이브러리 설치

(33) 아래 코드를 복사해 붙여넣기 한 후 엔터를 누른다.

pip install google-auth-oauthlib

'pip'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. → 오류


(34) 또 오류이다. 이번에는 아래 코드를 복사해 붙여넣기 한 후 엔터를 누른다.

py -m pip install google-auth-oauthlib

중간에 노란색 WARNING 글씨가 떴지만 맨 아랫줄에 Successfully installed ... google-auth-oauthlib-1.4.0라고 표시되었다. → 성공


(35) 다시 아래 코드를 입력한 후 엔터를 눌렀다.

py auth.py

Google 로그인 창이 자동으로 열렸다. → 성공

이메일 미등록 오류 발생 및 해결

(36) 열린 창에서 본인의 Google 계정으로 로그인했더니 아래와 같은 문구가 나타났다.

액세스 차단됨: (위 20번에서 만든 이름)은(는) Google 인증 절차를 완료하지 않았습니다.

내 이메일을 이 프로그램을 테스트할 수 있는 사용자 목록에 등록하지 않아 생긴 오류였다.

(37) Google Cloud Console로 다시 이동한다.

(38) 왼쪽 상단 메뉴 (≡) → API 및 서비스 → OAuth 동의 화면으로 이동한다.

(39) 왼쪽 메뉴에서 '대상'을 클릭한다.

(40) 테스트 사용자 아래 '+ Add users' 버튼을 클릭한 다음 Google 계정의 본인 이메일을 입력하고 저장한다.

Google Cloud Console에 로그인할 때 사용한 이메일과 동일하게 했다.

Google과 내 PC 접근 허용 재진행

(41) 위 (31)에서처럼 만들어 둔 'blog_bot' 폴더를 열고, 상단 주소창에 CMD를 입력한다.

실수로 CMD 창을 닫아버려서 처음부터 다시 해야 하나 싶었는데, 그럴 필요는 없었다.

Google Cloud Console에서 설정한 내용은 이미 저장되어 있으므로 작업하던 blog_bot 폴더에서 다시 CMD 창을 열면 된다.

(42) 아래 코드를 복사해 붙여넣은 후 엔터를 누른다.

py auth.py

(43) https://accounts.google.com/...으로 시작하는 긴 주소가 보이고 여러 문장이 쫙 뜬다면 성공이며 자동으로 Google 계정 로그인 창이 열린다.

(44) 위 (40)번과 같은 Google 계정 이메일로 로그인한다.

Google Cloud Console 로그인 이메일 = (40) 등록 이메일 = Google 계정 로그인 이메일 : 동일

(45) 로그인을 하려고 하면 'Google에서 확인하지 않은 앱'이라는 문구가 뜨는데 아래 '계속'을 클릭하면 된다.

(46) 'Blogger-Automation에서 Google 계정에 대한 액세스를 요청합니다.'라는 문구가 나타나면 아래 '계속' 버튼을 클릭한다.

(47) 인터넷 창이 하얗게 바뀌면서 영문으로 'The authentication flow has completed. You may close this window.'라는 문구가 뜬다. 당황하지 말고 창을 닫아도 된다.

(48) 바탕화면에 만들어둔 'blog_bot' 폴더를 보면 'token.pickle'이라는 새로운 파일이 생성되어 있는 것을 확인할 수 있다.

token.pickle 파일 생성 → 성공

이렇게 하면 성공이다. 당시에는 'token.pickle' 파일을 Google Blogger를 드나들 수 있게 하는 마스터키처럼 이해했다.

token.pickle 파일 보관 시 주의사항

① 다른 폴더로 옮기지 않는다

이 글의 코드는 blog_bot 폴더 안의 token.pickle을 상대 경로로 찾기 때문에 당시에는 같은 폴더에 그대로 두고 사용했다.

② 블로그나 인터넷에 절대 업로드하지 않는다

GitHub 등에 코드를 올릴 때 client_secret.json과 token.pickle 같은 인증 정보는 함께 공개하지 않는다.

③ 실수로 삭제했을 때

token.pickle을 삭제했다고 컴퓨터에 문제가 생기는 것은 아니다. 이 글에서 했던 것처럼 CMD 창에서 py auth.py를 다시 실행하고 Google 로그인 인증을 진행하면 인증 파일을 다시 생성할 수 있다.

 

댓글

이 블로그의 인기 게시물

학점은행제 아동학 학사 학위 신청 방법, 보육교사 2급 자격증 취득 순서 정리

블로그 작성 시간을 줄이자. 크롬 다크리더 사용 글자색이 회색으로 보이는 방법 해결