zoeylog
About me
조이의 연습장 (Blog)
이미지 아카이브
우주고양이
サインイン
조이의 연습장 (Blog)

클로드 코드 멀티 에이전트로 상세페이지 현지화 #2 - 파이프라인편

조이
2026年2月22日4ヶ月前
카테고리
  1. 자동화
1편에서 6명의 에이전트와 6개의 스킬로 시스템을 설계한 이야기를 했습니다.
설계만 하면 뭐합니까. 실제로 돌아가야죠!
이번 편에서는 "제품 하나 현지화해줘"라고 했을 때, 이 에이전트들이 어떤 순서로 무슨 일을 하는지 파이프라인 전체를 보여드릴게요.

전체 파이프라인 한눈에 보기

Phase 0: 📥 데이터 읽기
         Google Sheets(텍스트) + Drive(이미지)
    │
    ▼
Phase 1: 🔍 시장 조사
         "일본에서 헤어케어 뭐가 잘 팔려?"
    │
    ▼
    ⏸️ 사람이 한번 확인 ← 여기서 멈춤!
    │
    ▼
Phase 2: 📝 번역 → 카피라이팅 (순차)
    │
    ▼
Phase 3: 🖼️ 이미지 분석 → 이미지 생성 (순차)
    │
    ▼
Phase 4: ✅ 검수 (텍스트 + 이미지 동시)
    │       실패하면 → 위로 돌아감
    ▼
Phase 5: 📤 저장
         Sheets + Drive + Figma
하나씩 뜯어볼게요.

Phase 0: 입력 데이터 가져오기

사용자가 이렇게 말합니다:
"이 스프레드시트의 제품을 미국/일본용으로 현지화해줘
 텍스트: [Google Sheets URL]
 이미지: [Google Drive URL]"
Orchestrator가 URL을 파싱해서 스프레드시트에서 제품 정보를, Drive에서 이미지 목록을 가져옵니다. 타겟 국가를 확인하고 파이프라인을 시작해요.
로컬 파일도 됩니다. data/input/{brand}/{product_id}/ 폴더에 JSON이랑 이미지를 넣어두면 똑같이 동작합니다.

Phase 1: 시장 조사 - 모든 결정의 기반

Market Researcher 에이전트가 타겟 국가별로 조사를 합니다.

캐시 우선 정책

매번 조사하면 시간이 오래 걸리니까, 캐시 우선 정책을 적용했어요.
# 의사코드
def should_research(country):
    cache = f"config/market-research/{country}.json"
    if cache 있음 and 30일 이내:
        return False   # 캐시 사용
    return True        # 신규 조사
config/market-research/JP.json이 이미 있으면 조사를 건너뜁니다. 같은 나라에 제품을 여러 개 올릴 때 시간 절약이 큽니다. 근데 1년 뒤에도 이 조사 내용이 유효할 리는 없잖아요? 그래서 30일 이내 정책을 뒀어요. 30일 이후에는 조사를 다시 수행하게 하는 거죠.

조사 항목

•
아마존 베스트셀러 분석 (Best Sellers 페이지 기준, 광고 제외)
•
K-Beauty 브랜드 포지셔닝
•
현지 마케팅 키워드
•
모델 선호도 (이게 이미지 생성에 직접 영향)
•
현지 법규 (미국 FDA, 일본 약사법 등)
조사 결과에는 이런 게 들어갑니다:
{
  "country": "JP",
  "image_localization": {
    "model_replacement_required": true,
    "target_model_demographics": "Japanese female, 25-35, natural look",
    "style_adaptation": {
      "apply": true,
      "changes": ["미니멀 스타일", "부드러운 톤"]
    }
  },
  "text_localization": {
    "before_after_terms": {
      "before": "ご使用前",
      "after": "ご使用後"
    }
  }
}
model_replacement_required: true - 이 한 줄이 나중에 Image Generator한테 "일본인 모델로 바꿔"라고 지시하는 근거가 됩니다.

여기서 한번 멈춘다

Phase 1이 끝나면 시스템이 자동으로 멈춥니다. 결과를 사용자한테 보여주고 승인을 기다려요.
═══════════════════════════════════════
📊 시장 조사 결과 - 검토 필요
═══════════════════════════════════════

🇯🇵 JP (일본)
────────────────────────────
📚 참조 소스:
- Amazon Japan Hair Care Best Sellers
- @cosme 트렌드 리포트
- 厚生労働省 薬機法 가이드

🏆 경쟁사:
- #1 BOTANIST Shampoo
- #2 &honey シャンプー
- K-Beauty 탑10 진입: 1개

📋 핵심:
- 모델 교체: Yes (일본인 모델 선호)
- 스타일: 미니멀, 엘레강스

👉 [1] 진행 [2] 수정 [3] 상세
처음에는 풀 자동화를 했었는데, 시장 조사가 잘못되면 이후 전부 엉뚱한 방향으로 갑니다. "일본에서 모델 교체 안 해도 됨"이라고 잘못 판단하면, 한국인 모델이 그대로 일본 아마존에 올라갈 수도 있거든요.
어떤 자료를 보고 이런 결론을 냈는지 참조 소스까지 보여주는 게 포인트입니다. 사람이 한번 보고 "OK" 하면 나머지가 쭉 돌아갑니다.

Phase 2: 번역 → 카피라이팅 (순차 실행)

여기서 중요한 건 순서입니다. 번역이 먼저, 카피가 나중.
Translator ──→ Copywriter
(정확한 의미)    (판매용 최적화)
왜 분리했을까요? 번역과 카피라이팅은 목표가 다릅니다.

Translator: 정확한 의미 전달

Translator가 하는 일:
•
"송이버섯 추출물" → "Matsutake Extract" (용어집 참조)
•
"탈모 예방" → "supports healthy hair" (FDA 규정 때문에 완화)
•
"300ml" → "10.1 fl oz" (단위 변환)
•
경어체 적용 (일본어는 です/ます체)
이 단계의 목표는 정확한 의미 전달입니다.

Copywriter: 아마존 SEO 카피 최적화

그다음 Copywriter가 번역 결과를 받아서:
•
아마존 제목 포맷으로 재구성 (200자 이내, 키워드 배치)
•
불릿포인트 5개 작성 (혜택 중심)
•
백엔드 키워드 생성 (250바이트)
•
국가별 톤 적용 (미국: 직접적 / 일본: 공손)
변환 전후를 보면:
번역 결과:
  "0000 리스토어 샴푸 - 마츠타케 추출물로 두피 케어"

카피라이팅 후:
  "0000 Restore Shampoo - Matsutake Extract for
   Healthy Scalp & Fuller Hair | K-Beauty | Sulfate-Free
   | 10.1 fl oz"
한 에이전트가 둘 다 하면 번역 정확도랑 SEO 최적화 사이에서 어정쩡해집니다. 분리하니까 각자 맡은 일에 집중할 수 있어요.

Phase 3: 이미지 분석 → 생성 (순차 실행)

이미지도 마찬가지로 두 단계입니다.
Image Analyst ──→ Image Generator
(뭘 바꿔야 하는지)   (실제로 바꾸기)

Image Analyst: 이미지의 의도 파악

단순히 "여기 텍스트 있고, 여기 사람 있고" 수준이 아닙니다. 이미지가 뭘 말하려는 건지 파악하게 했어요.
예를 들어 Before/After 비교 이미지:
{
  "image_intent": {
    "type": "before_after",
    "core_message": "샴푸 사용 전후 머릿결 질감 변화"
  },
  "comparison_analysis": {
    "what_is_compared": "머릿결 질감",
    "before_state": ["머리카락 흩어짐", "윤기 없음"],
    "after_state": ["정돈된 흐름", "빛 반사 윤기"],
    "must_preserve": "질감 차이가 핵심 메시지!",
    "warning": "모델 바꿔도 양쪽 머리색은 동일해야 함"
  }
}
"질감 차이를 보여주는 게 이 이미지의 핵심이다", "모델을 바꿔도 머리색은 양쪽이 같아야 한다" - 이런 맥락을 Image Generator한테 넘겨야 제대로 된 결과가 나옵니다.
분석 없이 바로 생성하면 Before/After에서 양쪽 머리색이 달라지거나, 질감 차이가 사라지는 일이 생겨요.

Image Generator: Gemini API로 현지화 이미지 생성

분석 결과 + 시장 조사 결과를 받아서 Gemini API로 이미지를 생성합니다.
이때 시장 조사 결과가 핵심이에요:
market = load_json("market-research/JP.json")

if market["image_localization"]["model_replacement_required"]:
    # "일본인 여성 모델로 교체, 같은 포즈"
else:
    # "모델 유지, 텍스트만 변경"
시장 조사에서 "모델 교체 필요"라고 했으면 교체하고, 아니면 유지합니다. 모든 이미지 변경 결정이 데이터 기반이에요.
그리고 반드시 2가지 버전을 만듭니다:
📁 JP/
├── 📁 with-text/       ← 일본어 텍스트 포함 완성본
│   └── thumb_01.png
└── 📁 without-text/    ← 텍스트 없는 깨끗한 버전
    └── thumb_01.png
without-text는 보험입니다. AI가 텍스트를 이상하게 렌더링하면, 빈 버전 위에 Figma에서 수동으로 텍스트를 올릴 수 있거든요.
(이미지 생성의 구체적인 삽질은 3편에서 자세히 다룹니다)

Phase 4: QA 검수 - haiku 모델의 체크리스트

QA Reviewer 에이전트가 텍스트와 이미지를 동시에 검수합니다.
haiku 모델을 쓰는 이유는, 체크리스트 기반 검수는 패턴 매칭에 가깝기 때문입니다. "브랜드명이 0000인가?", "제목이 200자 이내인가?" 같은 건 빠르고 가벼운 모델이면 충분해요.

텍스트 검수 항목

•
문법/맞춤법 오류
•
브랜드명 일관성
•
금지 표현 (FDA, 약사법 위반)
•
아마존 정책 (제목 200자, 불릿 5개)

이미지 검수 항목

•
제품 색상/형태 변형 여부 → 변형 발견 시 즉시 FAIL
•
제품 라벨 텍스트 선명도 → AI 생성의 고질적 문제
•
오버레이 텍스트 가독성
•
문화적 적절성
실패하면 해당 Phase를 자동으로 다시 돌립니다. 3번 연속 실패하면 "사람이 직접 확인해주세요"라고 멈춰요. 무한 루프 방지입니다.

Phase 5: 저장 - 입력한 곳에 결과가 간다

결과물은 입력한 곳과 같은 위치에 저장됩니다.
Google Sheets에서 제품 정보를 읽었으면, 같은 시트의 옆 컬럼에 결과가 들어갑니다:
| A (Field)    | B (KR 원본)         | C (US)              | D (JP)              |
|--------------|---------------------|---------------------|---------------------|
| product_name | 0000 리스토어   | 0000 Restore   | 0000 リストア |
| bullet_1     | 송이버섯 추출물 함유  | MATSUTAKE POWERED:  | 松茸エキス配合:      |
이미지는 Drive 입력 폴더 안에 국가별 하위폴더가 생깁니다:
📁 [입력 폴더]
├── thumb_01.jpg          ← 원본 (그대로)
├── 📁 US/
│   ├── 📁 with-text/
│   └── 📁 without-text/
└── 📁 JP/
    ├── 📁 with-text/
    └── 📁 without-text/
Figma에도 자동으로 올라가서, 디자이너가 원본 vs 현지화 버전을 나란히 비교하게 하고 싶었는데.. → 아쉽게도 Figma MCP로 이미지 올리는 건 안 되던데 아시는 분 댓글좀 달아주세요. 진짜 안 되나?
별도 대시보드 같은 건 안 만들었습니다. 지인 회사에서 이미 쓰고 있는 Sheets, Drive, Figma에서 바로 확인할 수 있으니까요.

에이전트 간 데이터 흐름

이 파이프라인에서 제일 중요한 건, 앞 단계의 결과가 뒷 단계에 정확히 전달되는 것입니다.
시장 조사 결과 (JP.json)
    │
    ├──→ Translator: "경어체 사용, 약사법 준수"
    ├──→ Copywriter: "공손한 톤, 품질 강조"
    └──→ Image Generator: "일본인 모델로 교체"
만약 시장 조사의 model_replacement_required: true를 Image Generator가 못 읽으면, 일본 아마존에 한국인 모델이 그대로 올라갑니다.
그래서 중간 처리 데이터를 data/processing/ 폴더에 JSON으로 저장하고, 다음 에이전트가 반드시 이 파일을 읽도록 에이전트 지침에 명시해뒀어요.
data/processing/{brand}/{product}/
├── translation_JP.json      ← Translator 출력
├── copy_JP.json             ← Copywriter 출력
├── image_analysis/
│   ├── analysis_thumb01.json  ← Image Analyst 출력
│   └── ...
└── qa_report_JP.json        ← QA 출력
각 에이전트의 출력이 다음 에이전트의 입력이 되는 구조입니다.

실제 실행 예시

나: "이 제품을 미국/일본용으로 현지화해줘
     텍스트: [Sheets URL]
     이미지: [Drive URL]"

Claude:
  Phase 0: 제품 정보 로드 ✓ (15개 필드, 8개 이미지)
  Phase 1: 시장 조사... JP 캐시 있음 (스킵) / US 캐시 있음 (스킵)
  ⏸️ 결과 요약 → "진행"
  Phase 2: US 번역→카피 ✓ / JP 번역→카피 ✓
  Phase 3: 이미지 분석(8장) → US 생성(16장) ✓ / JP 생성(16장) ✓
  Phase 4: QA 통과 ✓
  Phase 5: Sheets 업데이트 + Drive 업로드 + Figma 정리 ✓

  📋 완료: US 16장, JP 16장 생성 / Sheets 2개 국가 컬럼 추가
텍스트만 하고 싶으면 "이미지 생성 제외"라고 하면 되고, 이미지만 하고 싶으면 "텍스트는 이미 번역됨"이라고 하면 됩니다.

다음 편 예고

파이프라인은 이렇게 깔끔하게 돌아가는데... 이미지 생성 단계에서 진짜 많이 삽질했습니다.
"모델만 바꿔줘"라고 하면 제품 병 색깔까지 바꿔버리는 문제, AI가 제품 라벨 텍스트를 뭉개버리는 문제, 같은 프롬프트인데 매번 다른 결과가 나오는 문제...
3편에서는 이미지 생성에서 겪은 구체적인 문제들과, 그걸 어떻게 해결했는지 (그리고 아직 못 해결한 것들) 공유할게요.
Claude Code 멀티 에이전트로 상세페이지 현지화 자동화
#1 설계편
#2 파이프라인편
#3 이미지 생성 삽질편
'zoeylog' 구독하기
사이트를 구독하면 새 포스트 등 최신 업데이트를 알림과 메일로 가장 먼저 받아보실 수 있습니다.
Slashpage에 가입하고 'zoeylog'을 구독하세요!
구독
👍
1