path
Jin's Lab
코드로 실험하고 기록하는 개발 일지 · J.Lab
커리어 성장 자기 계발 방향성 탐색

Jin's Lab

코드로 실험하고 기록하는 개발 일지. 커리어와 삶의 방향을 탐색하며 기록하는 공간입니다

403 Forbidden Error

GAS에서 Blogger API 403 오류 완전 정복 — appsscript.json 스코프와 GCP 프로젝트 연결

J.Lab · 2026-06-24
안녕하세요, J.Lab입니다!최근 Jin's Lab/KidStory 프로젝트 자동화를 진행하며 구글 앱스 스크립트(GAS)로 블로그 글 자동 발행 기능을 만들고 있었습니다. 그런데 'Blogger API 403 Forbidden'이라는 예상치 못한 오류에 부딪혔죠. 간단한 문제일 거라 생각했지만, 이 녀석이 저를 며칠간 괴롭힐 줄은 꿈에도 몰랐네요.이 글은 J.Lab이 직접 삽질하고 해결했던 경험을 공유합니다. 혹시 GAS와 Blogger API 연동 과정에서 403 오류를 겪고 계시다면, 이 해결 과정이 여러분의 소중한 시간을 아껴줄 수 있기를 바랍니다. 제가 겪었던 시행착오와 해결책을 친근하고 솔직하게 풀어볼게요.

예상치 못한 벽: Blogger API 403 오류의 시작

GAS 스크립트를 Jin's Lab/KidStory 블로그에 적용하는 중이었습니다. 스크립트가 Blogger API를 호출해 새 글을 발행하려 할 때마다 'Request had insufficient authentication scopes' 메시지와 함께 403 오류가 발생했습니다. '접근 권한 없음'을 의미하는데, 저는 분명히 모든 권한을 다 준 것 같아 당혹스러웠습니다.무엇이 문제인지 찾기 위해 수없이 스크립트를 검토하고 구글링을 시작했습니다. 스택오버플로우부터 구글 공식 문서까지 샅샅이 뒤졌죠. 하지만 대부분의 해결책은 이미 제가 시도했거나 제 상황과 조금 달랐습니다. 며칠을 씨름하다 보니, 점점 더 미궁으로 빠져드는 기분이었습니다.
403 오류 메시지와 복잡한 API 권한 다이어그램을 보는 개발자 캐릭터. 첫 번째 문제 상황을 묘사합니다.

첫 번째 난관: appsscript.json 스코프 확인

가장 먼저 의심했던 부분은 OAuth 스코프였습니다. GAS 프로젝트에는 `appsscript.json`이라는 매니페스트 파일이 숨겨져 있는데, 여기에 사용하려는 API의 권한(스코프)을 명시해야 하거든요. 처음에는 이 파일이 없었거나, Blogger API 권한이 제대로 명시되지 않았을 가능성이 높다고 판단했습니다.저는 즉시 GAS 편집기 '프로젝트 설정'에서 `appsscript.json` 파일을 열었습니다. 그리고 `oauthScopes` 항목에 Blogger API의 모든 권한을 나타내는 `https://www.googleapis.com/auth/blogger` 스코프를 추가했습니다. 다른 스코프들도 다시 확인하고 저장했죠. '이제 됐겠지!' 하는 마음으로 다시 스크립트를 실행했지만, 여전히 403 오류는 저를 비웃듯 나타났습니다. 정말이지 쉬운 게 하나 없었습니다.
appsscript.json 파일을 확대경으로 보는 모습. OAuth 스코프 설정을 상징합니다.

두 번째 난관: 숨겨진 GCP 프로젝트와 연결

첫 번째 시도가 실패하자, 더 깊이 파고들었습니다. GAS 프로젝트는 내부적으로 구글 클라우드 플랫폼(GCP) 프로젝트와 연결된다는 사실을 떠올렸죠. 문제는 GAS가 자동 생성하는 GCP 프로젝트는 일반 사용자가 직접 접근하거나 설정을 변경하기 매우 어렵다는 것이었습니다. 이 자동 생성된 GCP 프로젝트에 Blogger API가 비활성화되어 있을 가능성이 크다고 판단했습니다.이것이 핵심이었습니다. GAS 스크립트가 제가 소유하고 관리하는 GCP 프로젝트에 명시적으로 연결되어야 한다는 것을 깨달았습니다. 저는 'Default Gemini Project' (ID: 350836701734)에 GAS 스크립트를 연결하기로 했습니다. 이는 '프로젝트 설정'에서 'GCP 프로젝트 변경'을 통해 가능합니다. 연결 후, 해당 GCP 프로젝트에서 Blogger API를 활성화하는 것을 잊지 않았습니다. 구글 클라우드 콘솔의 'API 및 서비스' 대시보드에서 'Blogger API'를 검색하여 활성화하고, OAuth 동의 화면 설정도 다시 점검했습니다.
Google Apps Script와 Google Cloud Platform 콘솔이 다리로 연결된 모습. GCP 프로젝트 연결을 상징합니다.

마침내 해결! 스코프와 GCP 프로젝트의 완벽한 조화

`appsscript.json`에 올바른 스코프 추가, GAS 스크립트를 사용자 소유 GCP 프로젝트에 연결, 그리고 해당 GCP 프로젝트에서 Blogger API 활성화. 이 세 가지 단계가 모두 완벽하게 이루어지자 마침내 해결책이 보였습니다. 스크립트를 다시 실행했을 때, '성공적으로 블로그 글을 발행했습니다!'라는 메시지를 보고 정말 환호성을 질렀습니다. 며칠간의 삽질이 한순간에 보상받는 기분이었죠.결론적으로, GAS에서 Blogger API 403 오류를 해결하려면 다음 두 가지 핵심 사항을 반드시 확인해야 합니다. 첫째, `appsscript.json` 파일에 `https://www.googleapis.com/auth/blogger` 스코프 명시. 둘째, GAS 스크립트가 사용자 소유의 GCP 프로젝트에 연결되어 있고, 해당 GCP 프로젝트에서 Blogger API가 활성화되어 있는지 확인하는 것입니다. 이 두 퍼즐 조각이 맞춰지지 않으면 403 오류의 벽을 넘을 수 없습니다.

마치며: 삽질은 성장의 자양분!

이번 경험을 통해 J.Lab은 또 한 번 성장했습니다. 단순한 API 오류가 구글의 복잡한 권한 체계와 클라우드 플랫폼 연동 방식에 대한 깊은 이해를 요구할 줄은 몰랐네요. 이 과정에서 OAuth 스코프의 중요성, 그리고 GAS와 GCP 프로젝트의 관계에 대해 정말 많은 것을 배웠습니다. '삽질은 성장의 자양분이다'라는 말이 이번만큼 와닿은 적이 없는 것 같아요.앞으로는 이런 시행착오를 줄일 수 있도록 초기 설정 단계부터 더욱 꼼꼼하게 확인하는 습관을 들여야겠습니다. 이 경험을 바탕으로 Jin's Lab/KidStory 프로젝트의 자동화 기능을 더욱 강력하게 만들 예정입니다. 혹시 여러분도 저와 비슷한 문제를 겪고 계시다면, 이 글이 작은 등불이 되어주길 진심으로 바랍니다. 궁금한 점이 있다면 언제든 댓글로 남겨주세요! 다음번에는 더 유익한 정보로 찾아뵙겠습니다. 감사합니다!
403 Forbidden Error API Automation GAS Blogger API GCP Project Linkage Google Apps Script OAuth Scope
← 이전 글
최근 게시물
다음 글 →
이전 게시물
소개
path
J.Lab

커리어와 삶의 방향을 탐색하며
기록하는 공간입니다

카테고리
403 Forbidden Error 1 AIContentGeneration 1 AIImageGeneration 1 API Automation 1 api-troubleshooting 1 AppsScript 1 AutomationTroubleshooting 1 BlogAutomation 2 BloggerAPI 1 BloggerCustomization 1 BloggerTemplateEditing 1 BloggerThemeCustomization 1 BloggerXMLStructure 1 BloggingTools 1 BWidgetBIncludable 1 CardClickHandler 1 CodeLog 1 CSSOverlay 1 DatabaseDesign 1 DeveloperJourney 2 ExecutionLimit 1 FluxModel 1 FreeAIImage 1 FrontEndDev 1 GAS Blogger API 1 gas-automation 1 GASTimeout 1 GCP Project Linkage 1 GeminiAPI 1 GmailRestrictions 1 Google Apps Script 1 google-apps-script 1 GoogleAppsScript 2 HuggingFace 1 HuggingFaceAPI 1 jlab-codelog 1 JLabDevLog 1 notion-api 1 notion-database 1 NotionAutomation 1 NotionIntegration 1 OAuth Scope 1 pagination 1 PollinationsAI 1 PositionAbsolute 1 RandomDelay 1 TechJournal 1 WebAccessibility 1 WebDevJourney 1 WorkflowAutomation 1 XMLSpecialCharacters 1
인기 글
부업 블로그 자동 발행 시스템 처음부터 만든 후기
부업 블로그 자동 발행 시스템 처음부터 만든 후기
Blogger 테마 XML 직접 뜯어봤더니 알게 된 것들
Blogger 테마 XML 직접 뜯어봤더니 알게 된 것들
블로그 이미지 자동화 삽질기 — HuggingFace로 시작해 Pollinations로 갈아탄 이야기
블로그 이미지 자동화 삽질기 — HuggingFace로 시작해 Pollinations로 갈아탄 이야기
Google Apps Script 실행 시간 6분 제한 — Gmail 계정 함정과 랜덤 딜레이 설계
Google Apps Script 실행 시간 6분 제한 — Gmail 계정 함정과 랜덤 딜레이 설계
Notion API page_size 함정 — 우선순위 항목이 조회에서 빠지는 이유와 해결법
Notion API page_size 함정 — 우선순위 항목이 조회에서 빠지는 이유와 해결법
GAS에서 Blogger API 403 오류 완전 정복 — appsscript.json 스코프와 GCP 프로젝트 연결
GAS에서 Blogger API 403 오류 완전 정복 — appsscript.json 스코프와 GCP 프로젝트 연결
Notion 자동화 시간 범위 설계 — select 옵션 방식의 함정과 트리거 분리 전략
Notion 자동화 시간 범위 설계 — select 옵션 방식의 함정과 트리거 분리 전략
다른 블로그
IssueLog
IssueLog
issuelog.jinbytes.com
KidStory
KidStory
kidstory.jinbytes.com
IT Story
IT Story
jinbytes.com
© Jin's Lab · J.Lab · All Rights Reserved
jinbytes.com · Powered by Blogger