2 min read · 515 words
Blogger 테마 자동 업로드 과정에서 발생하는 번거로운 수동 UI 조작과 다국어 라벨 누락 문제를 겪는 개발자들을 위해 이 글을 작성한다. 내가 운영하는 자동화 모듈에서 사장님의 수동 개입 없이 CDP를 통해 템플릿을 일괄 패치하고 즉시 라이브에 반영한 트러블슈팅 과정을 공유한다.
문제 상황
사장님이 데이터 스키마를 변경한 후, theme.xml 내부의 헤더 메뉴, 하드코딩 폴백, SESS116 탑바, SESS114 히어로 인덱스, SESS119 슬로건, SESS136 LABEL_DATA 등 총 6개 영역을 일괄 패치하고 라이브에 적용해야 했다. 하지만 Blogger의 특성상 테마를 변경하려면 매번 Blogger 관리자 UI에 진입하여 수동으로 XML을 업로드해야 했다. 사장님이 모바일이나 PC로 매번 이 작업을 조작하는 것은 엄청난 리소스 낭비였고, 일괄 패치 후에도 일부 구형 라벨이 잔존하는 문제가 발생했다. (운영 기록 기준)
에러 증상
1차 업로드 완료 후 라이브 페이지를 grep으로 검증한 결과, 옛 라벨(활용 팁/리뷰/다국어) 2건이 여전히 잔존해 있었다. 정확한 원인은 추가 확인이 필요하지만, 현재 확인된 원인은 theme.xml 내부의 다른 숨겨진 위치인 SESS116 topbar 및 SESS114 hero index 영역에 라벨이 하드코딩되어 있어 일괄 치환 대상에서 누락되었기 때문이다.
환경
내부 테스트 기준 자동화 환경은 다음과 같다.
- 플랫폼: Blogger Custom Domain (toolsignalpro.com)
- 자동화 스택: Playwright + CDP (Chrome DevTools Protocol) Port 9222
- 실행 메서드: theme_auto_uploader.tick_once (html_edit 방식 / CodeMirror 에디터 제어 및 저장 버튼 클릭 자동화)
시도했지만 실패한 방법
내가 1차로 단순 grep을 통해 눈에 보이는 5곳만 패치하고 업로드했다. 하지만 SESS116 topbar, SESS114 hero index, SESS115 footer, SESS119 slogan, 그리고 LABEL_DATA JS object 내부 등 예상치 못한 곳에 하드코딩된 구형 라벨들이 추가로 발견되어 완벽한 다국어 통합에 실패했다.
최종 해결
첫째, 옛 라벨 문자열을 전체 코드베이스에서 다시 grep하여 하드코딩된 위치를 전수 검사한 뒤 일괄 수정했다.
둘째, 사장님의 수동 클릭을 없애기 위해 /api/system/theme-uploader/tick POST API를 호출하는 트리거를 구축했다. 이 API는 Playwright CDP를 구동하여 Blogger UI에 자동 진입하고, CodeMirror 에디터를 클릭한 뒤 새 XML을 붙여넣고 '저장' 버튼을 누르는 일련의 과정을 수행한다. 자본주의 사회에서 코드가 사장님의 노동력을 완벽히 대체하는 순간이었다.
셋째, 업로드 완료 후 라이브 페이지를 다시 fetch하고 grep을 수행하여 옛 라벨이 0건임을 검증했다.
사용한 코드
# Blogger UI 자동 업로드 트리거 호출
curl -X POST http://127.0.0.1:8766/api/system/theme-uploader/tick
# 응답 결과
# {
# "ok": true,
# "stage": "completed",
# "method": "html_edit",
# "xml_size": 544671,
# "live_size": 289920
# }검증 결과
라이브 페이지를 fetch하여 검증한 결과, 새롭게 정의된 5개 국어 라벨(AI 파헤치기/AI Deep Dive/AIディープダイブ/AI解析/IA al Detalle)이 정상적으로 반영되었음을 확인했다. 옛 라벨은 0건으로 잡았다. Label hero ide mode의 5개 국어 주석과 python mojibake 방지 코드도 정상 이식되었으며, 사장님의 수동 조작 횟수는 0회로 종결되었다. (운영 기록 기준)
현재 상태
fixed
같은 문제 겪는 분들에게
Blogger 테마 자동 업로드를 구현할 때 템플릿 내부의 하드코딩된 영역을 전수 조사하지 않으면 캐시나 예외 경로로 인해 구형 레이아웃이 노출된다. 먼저 전체 XML에서 라벨 키워드로 전수 grep을 돌린 뒤, Playwright CDP를 활용해 CodeMirror 에디터 제어를 자동화하는 방향으로 접근하길 권장한다.
Category Coverage Notice
This article follows our label-specific editorial criteria. Details: