🚀 구글 Blogger 자동 포스팅을 위한 - Apps Script 설정하기
🚀 구글 Blogger 자동 포스팅을 위한 - Apps Script 설정하기
소요 시간: 약 20분
난이도: 초급 (컴퓨터 초보자도 가능!)
준비물: Google 계정, Blogger 블로그
📌 목차
- 개요
- 1단계: Google Cloud 프로젝트 생성
- 2단계: Blogger API 활성화
- 3단계: OAuth 동의 화면 설정
- 4단계: OAuth 클라이언트 ID 생성
- 5단계: OAuth Playground에서 Refresh Token 받기
- 6단계: Apps Script 프로젝트 생성
- 7단계: Apps Script 코드 작성
- 8단계: Apps Script 배포
- 9단계: Blog ID 찾기
- 10단계: 테스트
- 문제 해결
개요
이 가이드는 AI 블로그 자동 작성 프로그램에서 Blogger로 자동 포스팅하기 위해 필요한 설정을 단계별로 설명합니다.
필요한 것들:
- ✅ Google 계정 (Gmail)
- ✅ Blogger 블로그 (없으면 만들기)
- ✅ 크롬 브라우저 (권장)
- ✅ 인터넷 연결
- ✅ 약 20분의 시간
받게 될 것들:
- 📝 Apps Script URL (예: https://script.google.com/macros/s/AKfy...xyz/exec)
- 🔑 Client ID (예: 123456789-abc...xyz.apps.googleusercontent.com)
- 🔐 Client Secret (예: GOCSPX-abc...xyz)
- 🔄 Refresh Token (예: 1//04abc...xyz)
- 🆔 Blog ID (예: 1234567890123456789)
1단계: Google Cloud 프로젝트 생성
1-1. Google Cloud Console 접속
-
브라우저를 열고 아래 주소로 이동하세요:
https://console.cloud.google.com -
Google 계정으로 로그인합니다.
- ⚠️ 주의: Blogger 블로그를 소유한 계정으로 로그인하세요!
1-2. 프로젝트 생성
-
화면 상단 왼쪽에 "프로젝트 선택" 버튼을 클릭합니다.
- 또는 상단 중앙에 프로젝트 이름이 보입니다.
-
팝업 창에서 "새 프로젝트" 버튼을 클릭합니다.
-
프로젝트 정보를 입력합니다:
프로젝트 이름: BloggerAuto 조직: (선택 안 함) 위치: (선택 안 함)- 💡 팁: 프로젝트 이름은 자유롭게 지어도 됩니다!
-
"만들기" 버튼을 클릭합니다.
-
프로젝트 생성 완료! (약 10초 소요)
1-3. 프로젝트 선택 확인
- 화면 상단에 방금 만든 프로젝트 이름이 표시되는지 확인하세요.
- 예:
BloggerAuto
2단계: Blogger API 활성화
2-1. API 라이브러리로 이동
-
화면 왼쪽 상단 ☰ (햄버거 메뉴) 클릭
-
메뉴에서 다음을 선택:
API 및 서비스 → 라이브러리
2-2. Blogger API 검색
-
검색창에 다음을 입력:
blogger -
검색 결과에서 "Blogger API v3" 클릭
- 💡 확인: Google 로고가 있는 공식 API인지 확인하세요!
2-3. API 활성화
-
"사용" 또는 "Enable" 버튼 클릭
-
잠시 기다리면 활성화 완료!
-
화면에 "API가 사용 설정됨" 메시지 표시
3단계: OAuth 동의 화면 설정
3-1. OAuth 동의 화면으로 이동
- 왼쪽 메뉴에서:
API 및 서비스 → OAuth 동의 화면
3-2. 사용자 유형 선택
-
"외부" 선택
- ⚠️ 중요: "내부"가 아닌 "외부"를 선택하세요!
-
"만들기" 버튼 클릭
3-3. 앱 정보 입력
다음 정보를 입력합니다:
OAuth 동의 화면 탭:
앱 이름*: Blogger Auto Publisher
(원하는 이름으로 자유롭게)
사용자 지원 이메일*: 본인 Gmail 주소 선택
앱 로고: (선택사항 - 비워두기)
앱 도메인:
- 애플리케이션 홈페이지: (비워두기)
- 애플리케이션 개인정보처리방침: (비워두기)
- 애플리케이션 서비스 약관: (비워두기)
승인된 도메인: (비워두기)
개발자 연락처 정보*: 본인 Gmail 주소 입력
"저장 후 계속" 클릭
3-4. 범위(Scopes) 설정
-
"범위 추가 또는 삭제" 버튼 클릭
-
필터 검색창에 입력:
blogger -
다음 범위를 찾아 체크:
✅ .../auth/blogger Blogger 계정 관리 -
"업데이트" 버튼 클릭
-
"저장 후 계속" 클릭
3-5. 테스트 사용자 추가
-
"+ ADD USERS" 버튼 클릭
-
본인 Gmail 주소 입력:
yourname@gmail.com- ⚠️ 중요: Blogger 블로그 소유자 계정을 입력하세요!
-
"추가" 버튼 클릭
-
"저장 후 계속" 클릭
3-6. 요약 확인
-
입력한 정보를 확인합니다.
-
"대시보드로 돌아가기" 클릭
3-7. 프로덕션으로 전환 (중요!)
-
게시 상태를 확인합니다:
현재 상태: 테스트 -
"프로덕션으로 푸시" 버튼 클릭
- ⚠️ 중요: 이 단계를 꼭 해야 합니다!
- 안 하면 7일마다 토큰이 만료됩니다!
-
확인 창에서 "확인" 클릭
-
게시 상태 변경 확인:
현재 상태: 프로덕션
4단계: OAuth 클라이언트 ID 생성
4-1. 사용자 인증 정보로 이동
- 왼쪽 메뉴:
API 및 서비스 → 사용자 인증 정보
4-2. OAuth 클라이언트 ID 생성
-
상단의 "+ 사용자 인증 정보 만들기" 버튼 클릭
-
"OAuth 2.0 클라이언트 ID" 선택
4-3. 애플리케이션 유형 선택
- 애플리케이션 유형: "웹 애플리케이션" 선택
- ⚠️ 매우 중요: "데스크톱 앱"이 아닌 "웹 애플리케이션"을 선택하세요!
4-4. 클라이언트 정보 입력
이름*: Blogger Web Client
(원하는 이름으로)
4-5. 승인된 리디렉션 URI 추가
-
"승인된 리디렉션 URI" 섹션 찾기
-
"+ URI 추가" 버튼 클릭
-
다음 URL을 정확히 입력:
https://developers.google.com/oauthplayground- ⚠️ 주의사항:
https://포함 필수!- 끝에
/없이! - 대소문자 정확히!
- 공백 없이!
- ⚠️ 주의사항:
-
"만들기" 버튼 클릭
4-6. Client ID와 Client Secret 복사
-
팝업 창이 나타납니다:
OAuth 클라이언트가 생성되었습니다 클라이언트 ID: 123456789-abcdefg.apps.googleusercontent.com 클라이언트 보안 비밀번호: GOCSPX-abcdefghijklmnop -
두 값을 모두 복사하여 메모장에 저장하세요!
- 📋 복사 방법: 각 값 옆의 복사 아이콘 클릭
-
저장 예시 (메모장):
Client ID: 123456789-abcdefg.apps.googleusercontent.com Client Secret: GOCSPX-abcdefghijklmnop -
"확인" 버튼 클릭
5단계: OAuth Playground에서 Refresh Token 받기
5-1. OAuth Playground 접속
- 새 탭에서 다음 주소로 이동:
https://developers.google.com/oauthplayground
5-2. 설정 열기
- 화면 우측 상단의 ⚙️ (톱니바퀴 아이콘) 클릭
5-3. OAuth 설정 입력
-
"Use your own OAuth credentials" 체크박스를 체크
-
다음 정보를 입력:
OAuth Client ID: [4단계에서 복사한 Client ID 붙여넣기] OAuth Client secret: [4단계에서 복사한 Client Secret 붙여넣기] -
설정 창을 닫습니다 (X 클릭)
5-4. Blogger API 선택
-
화면 왼쪽 "Step 1" 섹션에서:
-
검색창에 입력:
blogger -
"Blogger API v3" 펼치기 (▶ 클릭)
-
다음 항목 체크:
✅ https://www.googleapis.com/auth/blogger
5-5. API 권한 승인
-
파란색 "Authorize APIs" 버튼 클릭
-
Google 로그인 화면이 나타납니다:
- ⚠️ 중요: Blogger 블로그 소유자 계정으로 로그인!
-
권한 승인 화면:
Blogger Web Client가 다음을 원합니다: • Blogger 계정 관리 [취소] [허용] -
"허용" 버튼 클릭
5-6. Authorization Code 교환
-
OAuth Playground로 다시 돌아옵니다
-
"Step 2" 섹션에서:
-
파란색 "Exchange authorization code for tokens" 버튼 클릭
5-7. Refresh Token 복사
-
"Step 2" 섹션에 토큰이 표시됩니다:
Refresh token: 1//04abcdefghijklmnopqrstuvwxyz1234567890 Access token: ya29.a0abcdefghijklmnopqrstuvwxyz -
"Refresh token" 값을 전체 복사합니다
- ⚠️ 주의: "Access token"이 아닌 "Refresh token"을 복사!
- 💡 특징:
1//로 시작하는 긴 문자열
-
메모장에 저장:
Refresh Token: 1//04abcdefghijklmnopqrstuvwxyz1234567890
6단계: Apps Script 프로젝트 생성
6-1. Apps Script 접속
-
새 탭에서 다음 주소로 이동:
https://script.google.com -
Google 계정으로 로그인
- ⚠️ 주의: 같은 Google 계정 사용!
6-2. 새 프로젝트 생성
-
좌측 상단 "새 프로젝트" 버튼 클릭
-
프로젝트가 생성되고 코드 편집기가 열립니다
6-3. 프로젝트 이름 변경
-
좌측 상단 "제목 없는 프로젝트" 클릭
-
프로젝트 이름 입력:
Blogger Auto Publisher -
"이름 바꾸기" 클릭
7단계: Apps Script 코드 작성
7-1. 기존 코드 삭제
-
편집기에 있는 기본 코드를 전체 선택 (Ctrl + A)
-
삭제 (Delete 키)
7-2. 새 코드 붙여넣기
다음 코드를 전체 복사하여 붙여넣으세요:
// ========================================
// Blogger 자동 포스팅 Apps Script
// ========================================
// ⚙️ 설정 (여기에 본인의 값을 입력하세요!)
const CONFIG = {
CLIENT_ID: "여기에_Client_ID_입력",
CLIENT_SECRET: "여기에_Client_Secret_입력",
REFRESH_TOKEN: "여기에_Refresh_Token_입력"
};
/**
* GET 요청 처리 (테스트용)
*/
function doGet(e) {
return ContentService.createTextOutput('Blogger API 작동 중! ✅');
}
/**
* POST 요청 처리 (실제 포스팅)
*/
function doPost(e) {
try {
Logger.log('📥 POST 요청 수신');
let blogId, title, content;
// URL 파라미터로 받은 경우
if (e && e.parameter) {
blogId = e.parameter.blogId;
title = e.parameter.title;
content = e.parameter.content;
}
// JSON으로 받은 경우
else if (e && e.postData && e.postData.contents) {
const data = JSON.parse(e.postData.contents);
blogId = data.blogId;
title = data.title;
content = data.content;
}
else {
throw new Error('요청 데이터가 없습니다');
}
Logger.log('📝 Blog ID: ' + blogId);
Logger.log('📝 제목: ' + title);
// Access Token 발급
const accessToken = getAccessToken();
Logger.log('✅ Access Token 발급 완료');
// Blogger API 호출
const result = postToBlogger(accessToken, blogId, title, content);
Logger.log('✅ 포스팅 완료!');
Logger.log('🔗 URL: ' + result.url);
// 성공 응답
return ContentService.createTextOutput(JSON.stringify({
success: true,
url: result.url,
id: result.id
})).setMimeType(ContentService.MimeType.JSON);
} catch (error) {
Logger.log('❌ 오류: ' + error.message);
// 실패 응답
return ContentService.createTextOutput(JSON.stringify({
success: false,
message: error.message
})).setMimeType(ContentService.MimeType.JSON);
}
}
/**
* Refresh Token으로 Access Token 발급
*/
function getAccessToken() {
try {
Logger.log('🔑 Access Token 발급 요청...');
const response = UrlFetchApp.fetch('https://oauth2.googleapis.com/token', {
method: 'post',
contentType: 'application/x-www-form-urlencoded',
payload: {
client_id: CONFIG.CLIENT_ID,
client_secret: CONFIG.CLIENT_SECRET,
refresh_token: CONFIG.REFRESH_TOKEN,
grant_type: 'refresh_token'
},
muteHttpExceptions: true
});
const responseCode = response.getResponseCode();
const result = JSON.parse(response.getContentText());
Logger.log('📡 Token 응답 코드: ' + responseCode);
if (result.error) {
throw new Error('Token 오류: ' + result.error_description);
}
if (!result.access_token) {
throw new Error('Access Token을 받지 못했습니다');
}
Logger.log('✅ Access Token 발급 성공');
return result.access_token;
} catch (error) {
Logger.log('❌ Token 발급 실패: ' + error.message);
throw error;
}
}
/**
* Blogger API로 포스팅
*/
function postToBlogger(accessToken, blogId, title, content) {
try {
Logger.log('📤 Blogger API 호출...');
const url = 'https://www.googleapis.com/blogger/v3/blogs/' + blogId + '/posts/';
const response = UrlFetchApp.fetch(url, {
method: 'post',
contentType: 'application/json',
headers: {
'Authorization': 'Bearer ' + accessToken
},
payload: JSON.stringify({
kind: 'blogger#post',
title: title,
content: content
}),
muteHttpExceptions: true
});
const responseCode = response.getResponseCode();
const responseText = response.getContentText();
Logger.log('📡 Blogger 응답 코드: ' + responseCode);
if (responseCode !== 200 && responseCode !== 201) {
Logger.log('❌ 응답 내용: ' + responseText);
throw new Error('Blogger API 오류 (코드 ' + responseCode + ')');
}
const result = JSON.parse(responseText);
Logger.log('✅ Blogger 포스팅 성공!');
return result;
} catch (error) {
Logger.log('❌ Blogger API 오류: ' + error.message);
throw error;
}
}
/**
* 테스트 함수 (직접 실행용)
*/
function testPosting() {
const testBlogId = "여기에_Blog_ID_입력";
const testTitle = "테스트 포스팅 " + new Date().toLocaleString();
const testContent = "<h1>테스트</h1><p>Apps Script가 정상 작동합니다!</p>";
try {
Logger.log('====================================');
Logger.log('🧪 테스트 시작');
Logger.log('====================================');
const accessToken = getAccessToken();
const result = postToBlogger(accessToken, testBlogId, testTitle, testContent);
Logger.log('====================================');
Logger.log('🎉 테스트 성공!');
Logger.log('🔗 URL: ' + result.url);
Logger.log('====================================');
} catch (error) {
Logger.log('====================================');
Logger.log('❌ 테스트 실패: ' + error.message);
Logger.log('====================================');
}
}
7-3. CONFIG 값 수정
코드 상단의 CONFIG 부분을 찾아서 본인의 값으로 수정하세요:
const CONFIG = {
CLIENT_ID: "123456789-abcdefg.apps.googleusercontent.com", // ← 4단계에서 복사한 값
CLIENT_SECRET: "GOCSPX-abcdefghijklmnop", // ← 4단계에서 복사한 값
REFRESH_TOKEN: "1//04abcdefghijklmnopqrstuvwxyz" // ← 5단계에서 복사한 값
};
⚠️ 주의: 따옴표(")는 지우지 마세요!
7-4. 저장
-
Ctrl + S 또는 상단의 💾 (저장) 아이콘 클릭
-
"프로젝트 저장됨" 메시지 확인
8단계: Apps Script 배포
8-1. 배포 시작
-
화면 우측 상단 "배포" 버튼 클릭
-
"새 배포" 선택
8-2. 배포 유형 선택
-
"유형 선택" (톱니바퀴 아이콘) 클릭
-
"웹 앱" 선택
8-3. 배포 설정
다음과 같이 설정:
설명: (비워두기)
실행 권한: 나
↑ 중요: "나"를 선택하세요!
다음 사용자의 액세스 권한: 모든 사용자
↑ 중요: "모든 사용자"를 선택하세요!
8-4. 배포 실행
-
"배포" 버튼 클릭
-
권한 승인 화면이 나타납니다:
8-5. 권한 승인 (중요!)
-
"액세스 권한 부여" 클릭
-
Google 계정 선택
-
⚠️ 경고 화면이 나타날 수 있습니다:
이 앱은 Google에서 인증하지 않았습니다 -
"고급" 클릭
-
"[프로젝트 이름](안전하지 않음)(으)로 이동" 클릭
-
"허용" 버튼 클릭
8-6. 배포 URL 복사
-
배포 완료 화면에서 **"웹 앱 URL"**을 확인:
https://script.google.com/macros/s/AKfycby...xyz/exec -
전체 URL을 복사합니다
- 💡 확인: URL이
/exec로 끝나는지 확인!
- 💡 확인: URL이
-
메모장에 저장:
Apps Script URL: https://script.google.com/macros/s/AKfycby...xyz/exec -
"완료" 버튼 클릭
9단계: Blog ID 찾기
방법 1: Blogger 설정에서 찾기 (추천)
-
Blogger 접속:
https://blogger.com -
본인 블로그 선택
-
좌측 메뉴 → "설정" 클릭
-
"Blog ID" 항목 찾기:
Blog ID: 1234567890123456789 -
복사하여 메모장에 저장
방법 2: URL에서 찾기
-
Blogger에서 본인 블로그 선택
-
브라우저 주소창 확인:
https://www.blogger.com/blog/posts/1234567890123456789 ↑ 이 숫자가 Blog ID -
숫자만 복사하여 메모장에 저장
10단계: 테스트
10-1. testPosting 함수 수정
-
Apps Script 편집기로 돌아갑니다
-
코드 하단의
testPosting함수를 찾습니다 -
testBlogId값을 본인의 Blog ID로 수정:
function testPosting() {
const testBlogId = "1234567890123456789"; // ← 여기에 본인의 Blog ID
const testTitle = "테스트 포스팅 " + new Date().toLocaleString();
const testContent = "<h1>테스트</h1><p>Apps Script가 정상 작동합니다!</p>";
// ... 나머지 코드
}
- 저장 (Ctrl + S)
10-2. 테스트 실행
-
상단 드롭다운에서 "testPosting" 선택
-
▶ 실행 버튼 클릭
-
권한 승인 요청이 나타나면 위의 8-5와 같이 승인
10-3. 로그 확인
-
화면 하단 "실행 로그" 확인
-
성공 시 로그:
==================================== 🧪 테스트 시작 ==================================== 🔑 Access Token 발급 요청... 📡 Token 응답 코드: 200 ✅ Access Token 발급 성공 📤 Blogger API 호출... 📡 Blogger 응답 코드: 201 ✅ Blogger 포스팅 성공! ==================================== 🎉 테스트 성공! 🔗 URL: https://yourblog.blogspot.com/2025/... ====================================
10-4. Blogger에서 확인
-
Blogger 블로그 방문
-
"테스트 포스팅" 글이 생성되었는지 확인
-
성공! 🎉
최종 정리: 받은 모든 값
이제 다음 5가지 값을 모두 받았습니다:
✅ Apps Script URL:
https://script.google.com/macros/s/AKfycby...xyz/exec
✅ Client ID:
123456789-abcdefg.apps.googleusercontent.com
✅ Client Secret:
GOCSPX-abcdefghijklmnop
✅ Refresh Token:
1//04abcdefghijklmnopqrstuvwxyz
✅ Blog ID:
1234567890123456789
이 값들을 AI 블로그 자동 작성 프로그램에 입력하면 자동 포스팅이 가능합니다!
문제 해결
Q1: "401 Unauthorized" 오류
원인: Client ID, Client Secret, Refresh Token 중 하나가 잘못됨
해결:
- Google Cloud Console에서 OAuth 클라이언트 ID 확인
- Client Secret 다시 복사 (정확히!)
- OAuth Playground에서 Refresh Token 다시 발급
- Apps Script CONFIG 값 다시 입력
- 저장 후 재배포
Q2: "Invalid blog id" 오류
원인: Blog ID가 잘못됨
해결:
- Blogger 설정에서 Blog ID 다시 확인
- 숫자만 복사 (공백, 특수문자 없이)
- Apps Script testPosting 함수에 다시 입력
- 저장 후 재실행
Q3: "Token has been expired or revoked" 오류
원인: Refresh Token이 만료됨 (테스트 모드에서 7일 후)
해결:
- 3단계로 돌아가기
- OAuth 동의 화면을 "프로덕션"으로 전환 확인
- 5단계: OAuth Playground에서 Refresh Token 다시 발급
- Apps Script CONFIG에 새 Refresh Token 입력
- 저장 후 재배포
Q4: Apps Script URL이 작동하지 않음
원인: 배포 설정이 잘못됨
해결:
- Apps Script 배포 → 배포 관리
- 현재 배포 확인
- "실행 권한: 나" / "액세스: 모든 사용자" 확인
- 잘못되었으면 수정 후 재배포
Q5: "리디렉션 URI 불일치" 오류
원인: OAuth 클라이언트 ID에 리디렉션 URI가 없음
해결:
- Google Cloud Console → OAuth 클라이언트 ID 편집
- 승인된 리디렉션 URI에 다음 추가:
https://developers.google.com/oauthplayground - 저장
- OAuth Playground에서 다시 시도
Q6: "This app isn't verified" 경고
원인: 정상입니다! 개인 프로젝트라서 Google 인증을 받지 않음
해결:
- "고급" 클릭
- "[프로젝트 이름](안전하지 않음)으로 이동" 클릭
- "허용" 클릭
- 본인이 만든 앱이므로 안전합니다!
추가 팁
💡 팁 1: 코드 수정 시 재배포
Apps Script 코드를 수정했다면:
- 저장 (Ctrl + S)
- 배포 → 배포 관리
- 연필 아이콘 (편집) 클릭
- 버전: "새 버전"
- 배포 클릭
💡 팁 2: 로그 확인 방법
실행 로그 보는 법:
- Apps Script 편집기
- 좌측 메뉴 → "실행" (⏱️ 아이콘)
- 최근 실행 내역 클릭
- 상세 로그 확인
💡 팁 3: 여러 블로그 사용
여러 블로그에 포스팅하려면:
- Blog ID만 바꿔서 사용하면 됩니다
- Apps Script는 그대로 사용
- 같은 Google 계정의 블로그만 가능
💡 팁 4: 보안
중요한 정보 관리:
- Client Secret, Refresh Token은 절대 공개하지 마세요
- GitHub에 올릴 때 CONFIG 값은 지우세요
- Apps Script URL도 공개하지 마세요
마치며
축하합니다! 🎉
이제 Blogger 자동 포스팅을 위한 모든 설정이 완료되었습니다!
받은 5가지 값:
✅ Apps Script URL
✅ Client ID
✅ Client Secret
✅ Refresh Token
✅ Blog ID
이 값들을 AI 블로그 자동 작성 프로그램에 입력하면, 한 번의 클릭으로 AI가 작성한 글을 Blogger에 자동으로 발행할 수 있습니다!
문제가 있으신가요?
- GitHub Issues에 질문 남겨주세요
- 커뮤니티에서 도움을 요청하세요
- YouTube 영상 댓글로 문의하세요
도움이 되셨나요?
- ⭐ GitHub Star를 눌러주세요
- 👍 좋아요와 구독 부탁드립니다
- 💝 후원은 선택사항입니다
📝 작성자: [당신 이름]
📅 작성일: 2025년 1월
🔄 최종 수정: 2025년 1월
📌 버전: 1.0
관련 문서:
- Gemini API 키 발급 가이드 (다음 편)
- Pixabay API 키 발급 가이드 (다음 편)
- 프로그램 사용 방법 (다음 편)
댓글
댓글 쓰기