path
Jin's Lab
코드로 실험하고 기록하는 개발 일지 · J.Lab

Jin's Lab

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

blog-migration

Blogger 백데이팅 발행으로 티스토리 이전 날짜 보존하기

J.Lab ·
목차

    최근 티스토리에서 구글 블로거로 글을 옮기는 이전을 진행하고 있다. 그동안 정성 들여 쌓아온 소중한 기록들을 그대로 옮기는 작업이다 보니 신경 쓸 부분이 한두 가지가 아니었다. 특히 가장 큰 고민은 기존에 작성했던 원본 게시 날짜를 어떻게 그대로 보존하느냐 하는 문제였다.

    단순히 글을 복사해서 새 플랫폼에 등록하면 발행일이 모두 오늘로 일괄 지정되어 버린다. 수년간 공들여 작성한 IT 기록들의 시간 순서가 뒤죽박죽 엉망이 되는 상황을 막아야 했다. 다행히 API 호출 방식을 조금 튜닝하면 과거 날짜 그대로 글을 올릴 수 있는 방법을 찾아내어 직접 적용해 보았다.

    Blogger API의 published 필드와 RFC 3339 규격

    구글 블로거 API 문서를 꼼꼼하게 들여다보던 중 아주 반가운 해결책을 발견했다. API 포스트 생성 페이로드에 published라는 필드를 지정하면 원하는 시점으로 발행 일자를 강제 설정할 수 있었다. 이것이 바로 내가 그토록 찾던 Blogger 백데이팅 발행의 핵심 키였다.

    서버와 서버 사이로 문서가 타임라인을 따라 이동하는 데이터 마이그레이션 아이소메트릭 일러스트

    하지만 마냥 순탄치만은 않았다. 이 published 필드는 단순한 문자열이 아니라 RFC 3339라는 엄격한 시간 규격을 요구했다. 티스토리 백업 데이터에서 추출해 구글 스프레드시트에 임시로 정리해 둔 날짜 형식은 2025-06-21 22:14:19 같은 일반적인 형태였기에 이를 API 규격에 맞게 깔끔하게 변환해야 하는 숙제가 생겼다.

    함수 파라미터 확장과 날짜 변환 로직 구현

    가장 먼저 기존에 작성해 두었던 블로거 자동 등록 함수인 publishToBloggerMig의 파라미터를 수정했다. 기존의 (title, content, labels) 구성에서 원본 날짜를 직접 전달받을 수 있도록 origDate 파라미터를 추가하여 publishToBloggerMig(title, content, labels, origDate) 형태로 확장했다.

    날짜 시간 형식을 코드로 변환하고 제어하는 과정을 형상화한 아이소메트릭 디자인

    그다음으로는 스프레드시트의 날짜 데이터를 RFC 3339 표준 규격으로 변환하는 처리기를 구축했다. 시트에서 읽어온 2025-06-21 22:14:19 포맷의 텍스트를 파싱하여 중간에 구분자 T를 넣고 한국 표준시 기준 시차인 +09:00을 덧붙여 2025-06-21T22:14:19+09:00 형태로 안전하게 가공해 냈다.

    runMigration 실행부 연동과 최종 성공

    실제 이전을 담당하는 메인 루프 함수인 runMigration() 코드도 나란히 손을 봐주었다. 시트의 각 행을 돌면서 데이터를 읽어올 때 새로 추가한 원본 날짜 컬럼 정보인 row[COL.ORIG_DATE] 값을 누락 없이 정확히 읽어오도록 매핑 경로를 잡아주었다.

    성공적인 마이그레이션 완료 표시와 달력이 나열된 화면을 묘사한 아이소메트릭 일러스트

    그리고 이 읽어온 오리지널 타임스탬프 값을 방금 수정한 발행 함수로 자연스럽게 토스하도록 코드를 연결했다. 마침내 모든 수정을 마치고 스크립트를 구동하자 타임라인 왜곡 없이 예전 티스토리 시절 날짜 그대로 구글 블로거에 차곡차곡 이전 글들이 발행되는 놀라운 광경을 목격할 수 있었다.

    수년간 기록해 온 개발 일지의 역사가 훼손되지 않고 온전히 보존된 채 새 보금자리로 옮겨간 모습을 보니 십년감수한 기분이 든다. API 문서를 꼼꼼히 확인하고 날짜 포맷을 정밀하게 변환해 주는 작업은 다소 번거로웠지만 블로그의 정체성인 시간의 기록을 지키기 위해서는 절대 타협할 수 없는 값진 과정이었다.

    blog-migration blogger-api javascript rfc3339 tistory-migration
    ← 이전 글
    최근 게시물
    다음 글 →
    이전 게시물
    ≡ 글 목록으로
    소개
    path
    J.Lab

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

    카테고리
    403 Forbidden Error 1 AdSense 1 AdSense Bot Detection 1 AI Automation 1 AI Image Generation 1 ai-automation 2 AI-Prompting 1 AIBlogAutomation 1 AICodeLog 1 AIContentGeneration 1 AIImageGeneration 1 AIWritingErrors 1 API Automation 2 API Retry Design 1 api-automation 1 API-Deprecation 1 api-error 1 api-fallback 1 api-retry-strategy 1 api-troubleshooting 1 APIDebugging 1 APIError 1 APIErrorHandling 1 APIIntegration 1 APITokenRenewal 1 AppsScript 1 appsScriptAutomation 1 AutomatedBlogging 1 automation 1 Automation 2 AutomationTroubleshooting 1 Backoff Algorithm 1 Base64Encoding 1 BatchProcessing 1 blog-automation 1 blog-customization 1 blog-migration 3 Blog-Sorting 1 blog-strategy 1 blog-theme-customization 1 blog-workflow 1 blogautomation 1 BlogAutomation 2 Blogger 4 Blogger API 2 Blogger Automation 1 Blogger SEO 1 blogger-api 3 blogger-automation 1 blogger-error-400 1 blogger-labels 1 blogger-seo 1 blogger-tips 1 Blogger-Tips 1 BloggerAPI 3 BloggerBypath 1 BloggerCustomization 2 BloggerFavicon 1 BloggerTemplate 1 BloggerTemplateEditing 1 BloggerTheme 1 BloggerThemeCustomization 1 BloggerXMLStructure 1 Blogging-Automation 1 BloggingTools 1 BlogQuality 1 BlogSpot 1 BWidgetBIncludable 1 CardClickHandler 1 CDATA 1 clamping-text 1 Code Integration 1 codelog 1 CodeLog 1 codeRefactoring 1 contentsequencing 1 cost-reduction 1 CSSOverlay 1 data-parsing 1 DatabaseDesign 1 DataRecovery 1 DateInjection 1 Debugging 2 dev-journey 1 DeveloperJourney 2 DevJourney 1 display-none-seo 1 dom-manipulation 1 dynamic-menu 1 Error-Handling 1 ErrorHandling 1 Execution Timeout 1 ExecutionLimit 1 exponential-backoff 1 FactChecking 1 FaviconEmbedding 1 Feed-API 1 filesystem 1 Flat Illustration 1 FluxModel 1 FreeAIImage 1 FrontEndDev 1 FrontendTips 1 GAS Blogger API 1 gas-automation 1 gas-optimization 1 gas-trigger 1 GASTimeout 1 gasTriggerManagement 1 GCP Project Linkage 1 Gemini 1 Gemini API 1 gemini-api 1 GeminiAPI 1 GeminiPrompt 1 GeminiPromptEngineering 1 GmailRestrictions 1 Google Apps Script 7 Google Discover 1 google-apps-script 3 Google-Apps-Script 1 google-blogger 1 googleAppsScript 1 GoogleAppsScript 6 googlesapps-script 1 hero-image 1 HTMLWidgetBlogger 1 http-429 1 HuggingFace 1 HuggingFaceAPI 1 ico-generator 1 Image Optimization 1 image-automation 1 image-optimization 1 In-App Browser 1 invalid-argument 1 javascript 3 JavaScript 2 javascript-automation 1 javascript-toc 1 jlab-codelog 1 JLabDevLog 1 json-schema 1 label-length-limit 1 linux 1 meta-description 1 Negative Prompt 1 notion-api 1 notion-database 1 notion-gas-integration 1 NotionAPI 1 NotionAutomation 1 notionintegration 1 NotionIntegration 1 OAuth Scope 1 pagination 1 payload-validation 1 permalink-management 1 PersonaDesign 1 pil-image-processing 1 Pinterest 1 Pollinations 1 Pollinations Flux 1 pollinations-api 1 PollinationsAI 1 PositionAbsolute 1 Prompt Design 1 Prompt Engineering 1 prompt-engineering 1 Prompt-Engineering 1 PromptEngineering 1 publishorder 1 python-favicon 1 queue-stuck 1 RandomDelay 1 rate-limiting 1 Refactoring 1 rfc3339 2 Robots Meta Tag 1 RSS Feed 1 scriptNotFound 1 Search Engine Optimization 2 Search-Engine-Optimization 1 SEO Tips 1 seo-optimization 4 SEO-Optimization 1 seriesmanagement 1 SidebarLinks 1 SNSMarketing 1 SVGIcon 1 table-of-contents 1 TechJournal 1 Template 1 ThreadsAPI 1 tistory-migration 1 transparent-favicon 1 triggerCleanup 1 Troubleshooting 1 unzip 1 URL Slug 1 vanilla-js 1 Web Development 1 Web Publishing 2 Web Security 1 web-development 1 Web-Development 1 web-development-tips 1 web-performance 1 web-scraping 1 WebAccessibility 1 WebDevelopment 3 WebDevelopmentTips 1 WebDevJourney 1 windows 1 WorkflowAutomation 1 XMLParser 1 XMLSpecialCharacters 1 XMLTheme 1 zip 1
    인기 글
    GAS에서 Blogger API 403 오류 완전 정복 — appsscript.json 스코프와 GCP 프로젝트 연결
    GAS에서 Blogger API 403 오류 완전 정복 — appsscript.json 스코프와 GCP 프로젝트 연결
    Google Apps Script 실행 시간 6분 제한 — Gmail 계정 함정과 랜덤 딜레이 설계
    Google Apps Script 실행 시간 6분 제한 — Gmail 계정 함정과 랜덤 딜레이 설계
    Blogger 테마 XML 직접 뜯어봤더니 알게 된 것들
    Blogger 테마 XML 직접 뜯어봤더니 알게 된 것들
    다른 블로그
    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