내가 만든 AI 에이전트 (6/7) — 한영 블로그 동시 운영: 이미지 재사용과 이중 발행
동일 콘텐츠를 한국어·영어 블로그에 이중 발행할 때 비용과 중복 작업을 줄이는 파이프라인 설계
이 글이 전달하는 것
- Blogger API v3 기반 이중 발행 파이프라인을 Blog ID 전환 한 플래그로 구성하는 방법
- 이미지 재사용을 통해 영문 블로그의 이미지 생성 비용을 $0으로 만드는 조건과 자동화 스크립트 구조
- 한영 포스트의 섹션 개수가 다를 때 이미지 위치를 맞추는 비율 기반 매핑 알고리즘
- base64 인라인 이미지 사용 시의 Blogger API 포스트 크기 한계와 대응 방향
배경: 이중 운영을 자동화해야 하는 이유
한국어 기술 블로그의 검색 트래픽은 인구 기준 상한이 명확하다. AI 에이전트, Claude Code, 로컬 LLM 같은 주제는 영어권 검색 수요가 압도적으로 크므로, 같은 콘텐츠를 영어로도 내보내는 것이 독자 확장에 효과적이다.
다만 한영 동시 운영은 글 작성·이미지 생성·발행·목차 관리 전 과정이 이중으로 늘어난다. 이 글은 네 가지 축(파이프라인 분기, 재작성 전략, 이미지 재사용, 위치 매핑)으로 중복 비용을 줄이는 구현을 정리한다.
1. 이중 발행 파이프라인 — Blog ID 전환 한 개로 처리
blogger_publish.py에 --blog 플래그를 추가하면, 동일한 OAuth 토큰과 동일한 코드 경로에서 Blog ID만 전환해 두 블로그 모두에 발행할 수 있다.
- 한국어: Blog ID
8353076619669124413(maju-not.blogspot.com) - 영어: Blog ID
2499508976191968092(maju-tech.blogspot.com)
Blogger API v3는 인증 스코프와 엔드포인트가 블로그별로 분리되어 있지 않다. 하나의 토큰으로 소유 블로그 전체에 접근할 수 있으므로, 인증 흐름을 이중으로 구성할 필요가 없다. 발행·수정·삭제·목록 조회가 모두 단일 코드 경로에서 동작한다.
발행 흐름:
1. 한국어 원문 작성 → drafts/blog/에 저장
2. 한국어 발행: python3 blogger_publish.py draft.md --blog kr
3. 영어 재작성본 저장
4. 영어 발행: python3 blogger_publish.py draft_en.md --blog en
2. 영문 글 — 기계 번역이 아니라 재작성이 필요한 이유
한국어 기술 글과 영어 기술 글은 문체 규범이 다르다. 한국어 기술 글은 "~입니다/~했습니다" 같은 서술체가 관습적이지만, 영어 기술 글은 능동태·짧은 문장·직접 지시를 선호한다. 기계 번역은 이 문체 차이를 뭉개서 부자연스러운 결과를 만든다.
따라서 작업 단위는 번역이 아니라 "구조·논지 유지 + 문체 재작성"이다. 원문의 섹션 구조와 주장은 보존하되, 문장 단위로 영어 기술 블로그 관례에 맞게 다시 쓴다. 이 과정에서:
- 한국 특유의 서비스명·커뮤니티 참조는 글로벌 독자가 이해 가능한 비유로 치환한다
- 한국어에서 자연스러운 우회적 표현은 직설적 주장으로 바꾼다
- 한국어 독자에게만 의미 있는 배경(예: 국내 정책·시장) 설명은 영문에서는 축약 또는 제거한다
3. 이미지 재사용 — 추가 비용 $0의 성립 조건
가장 큰 절감 포인트다. Nano Banana 2로 한국어 블로그 76편에 228장의 이미지를 생성한 비용은 약 $15다. 영어 블로그에 동일 이미지를 그대로 재사용하면 이미지 생성 비용은 $0이 된다.
이미지 재사용이 성립하려면 세 가지 전제 조건이 충족되어야 한다:
- 이미지 프롬프트를 처음부터 영문으로 작성: 프롬프트가 한국어면 생성 결과에 한글 텍스트가 들어갈 수 있다
- 이미지 내 모든 텍스트가 영문: 다이어그램 레이블, 말풍선, 캡션 모두 영문이어야 한다
- 기술 다이어그램 위주: 문화적 맥락에 의존하지 않는 추상/기술적 시각자료는 언어 중립적으로 재사용 가능
이 전제가 깨지면(한글 캡션 포함, 한국 문화 일러스트 등) 이미지 재사용은 불가능하고 영어본을 따로 생성해야 한다.
자동화 스크립트 copy_images_to_en.py의 동작:
1. 한·영 블로그의 포스트 목록을 각각 가져온다
2. 발행 순서로 한영 포스트를 매칭한다
3. 한국어 포스트의 HTML에서 base64 이미지 div를 추출한다
4. 영어 포스트의 HTML의 대응 위치에 동일 이미지를 삽입한다
5. Blogger API로 업데이트한다
36개 영어 포스트 전체 처리 시간은 약 2분으로, 병목은 API 호출 레이트뿐이다. 이미지 생성 단계가 빠져 있기 때문이다.
4. 비율 기반 위치 매핑 — 섹션 구조가 다를 때
재작성 과정에서 영문 글의 섹션 수나 순서는 원문과 달라질 수 있다. 이미지를 기계적으로 "같은 인덱스"에 삽입하면 맥락이 어긋난다.
대응 방법은 헤딩 기반 비율 매핑이다:
- 한국어 글에서 이미지가 전체 h2/h3 헤딩 중 몇 번째 앞에 있는지 비율을 계산
- 영어 글의 헤딩 수에 그 비율을 곱해 삽입 위치를 결정
예: 한국어 글이 10개 섹션이고 이미지가 3번째 섹션 앞이면 비율 30%. 영어 글이 8개 섹션이면 8 × 0.30 ≈ 2번째 섹션 앞에 배치. 완벽한 정렬은 아니지만, 대부분의 경우 도입부 근처 이미지는 도입부 근처에, 결론 근처 이미지는 결론 근처에 배치되어 맥락이 유지된다.
5. 비용 구조
| 항목 | 한국어 블로그 | 영어 블로그 | 합계 |
|---|---|---|---|
| 이미지 생성 | $15.3 | $0 | $15.3 |
| Blogger API | 무료 | 무료 | 무료 |
| 도메인 | blogspot 무료 | blogspot 무료 | 무료 |
| 글 작성 | Claude API | Claude API | Claude API 비용만 |
이미지 재사용 조건이 충족되면 영어 블로그 추가 운영의 한계 비용은 재작성에 쓰이는 Claude API 호출 비용으로 수렴한다. 이미지·호스팅·발행 인프라의 추가 비용은 $0이다.
한계와 개선 방향
재작성의 실제 비용: 기계 번역으로 품질을 맞추기 어려우므로, 영문 글 한 편당 작업량은 원문의 상당 부분을 다시 쓰는 수준이다. 번역 API로 초벌을 만든 뒤 문체만 교정하는 2단계 구조가 대안이 될 수 있다.
포스트 순서 매칭의 취약성: 현재 이미지 복사 스크립트는 "발행 순서"로 한영 글을 매칭한다. 한쪽에만 글을 추가하면 순서가 어긋나 이미지가 잘못 들어간다. 개선 방향은 제목 유사도(임베딩 기반)나 발행 시점의 명시적 kr_post_id → en_post_id 매핑 테이블 유지다.
base64 인라인 이미지의 용량 한계: 이미지를 base64로 HTML에 인라인하면 포스트 크기가 빠르게 증가한다. 228장의 이미지를 분산 삽입한 결과 일부 포스트 HTML이 2MB를 초과했다. Blogger API는 요청당 약 1MB의 포스트 크기 제한이 있어, 일부 포스트에서 업데이트 실패가 발생할 수 있다. 대응안은 (1) 이미지를 외부 CDN에 업로드하고 URL 참조로 치환, (2) 포스트당 이미지 수 상한, (3) 이미지 리사이즈·WebP 전환을 통한 base64 크기 축소다.
적용 범위와 열린 질문
이 구조는 동일 콘텐츠를 N개 언어로 확장하는 일반 문제에 그대로 확장된다. --blog 플래그를 kr/en에서 kr/en/ja로 늘리고, 이미지 재사용 전제(영문 프롬프트·언어 중립 다이어그램)를 유지하면 일본어 블로그 추가 비용도 이미지 측면에서는 $0이다.
열린 질문은 두 가지다: - 재작성을 얼마나 자동화할 수 있는가 — 번역 API + 문체 교정 LLM의 2단계 파이프라인이 수작업 재작성 대비 품질을 어느 선까지 따라잡는가 - 포스트 매칭을 제목 유사도로 바꿀 때, 유사도 임계값을 어떻게 설정해야 한쪽에만 존재하는 포스트를 올바르게 제외하는가
이 두 지점을 해결하면 한영 동시 운영은 "한 번 쓰고 두 번 발행" 수준까지 수렴한다.
시리즈 전체 안내: 시리즈 목차
댓글
댓글 쓰기