엔지니어링//15 최소 읽기 시간

로컬라이제이션을 위한 CI/CD: 배포 파이프라인에서 번역 자동화하기

Eray Gündoğmuş
공유

로컬라이제이션을 위한 CI/CD: 배포 파이프라인에서 번역 자동화하기

핵심 내용

  • CI/CD 통합으로 번역 파일의 수동 관리를 없애고 모든 배포에 번역이 함께 제공되도록 보장합니다
  • 자동화된 string 추출 및 검증으로 누락된 번역이 프로덕션에 도달하기 전에 포착합니다
  • Webhook으로 트리거된 빌드는 지속적인 로컬라이제이션을 가능하게 합니다 — 번역이 승인되는 즉시 게시됩니다
  • 머지 전 검사를 통해 번역되지 않은 string이 있는 PR을 차단하여 불완전한 로컬라이제이션이 배포되는 것을 방지할 수 있습니다

CI/CD에서 로컬라이제이션을 자동화하는 이유

수동 로컬라이제이션 워크플로우는 병목 현상을 만들어냅니다:

  • 개발자가 TMS에 새 string을 업로드하는 것을 잊습니다
  • 번역된 파일이 누군가 다운로드할 때까지 TMS에서 기다립니다
  • 파일 수동 배치로 인해 머지 충돌이 발생합니다
  • 누락된 번역이 프로덕션으로 유출됩니다

CI/CD 자동화는 번역 동기화를 모든 빌드와 배포의 표준적인 부분으로 만들어 이러한 문제를 해결합니다.

파이프라인 아키텍처

Code Push → CI Triggered → Extract Strings → Push to TMS
                                                  ↓
Production ← Deploy ← Build ← Pull Translations ← Translations Complete (webhook)

GitHub Actions로 구현하기

풀 리퀘스트 시: 번역 검증하기

name: Translation Check
on: pull_request

jobs:
  check-translations:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Scan for new strings
        run: npx better-i18n scan --check
        # 번역되지 않은 string이 발견되면 실패합니다

      - name: Validate translation files
        run: npx better-i18n validate
        # JSON 구문, 누락된 키, 플레이스홀더 일관성을 확인합니다

Main 머지 시: 동기화 및 배포

name: Deploy with Translations
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Push new strings to TMS
        run: npx better-i18n push
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}

      - name: Pull latest translations
        run: npx better-i18n pull --all

      - name: Build
        run: npm run build

      - name: Deploy
        run: npm run deploy

번역 완료 시: Webhook 트리거 빌드

name: Translation Update
on:
  repository_dispatch:
    types: [translations-updated]

jobs:
  rebuild:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npx better-i18n pull --all
      - run: npm run build
      - run: npm run deploy

자동화된 검증 체크

이 체크들을 CI 파이프라인에 적용하십시오:

체크포착 내용실행 시점
누락된 번역대상 로케일에 번역이 없는 키PR 체크
플레이스홀더 일관성소스에는 {name}이지만 번역에는 {nom}PR 체크
JSON/XLIFF 구문형식이 잘못된 번역 파일모든 빌드
String 길이UI 문자 제한을 초과하는 번역PR 체크
사용되지 않는 키코드에서 더 이상 참조되지 않는 번역 키주간 스케줄

불완전한 번역 처리하기

배포 시점에 모든 번역이 완료되지 않을 수 있습니다. 전략:

  1. 소스 언어로 폴백 — 번역이 없으면 영어를 표시합니다 (가장 일반적)
  2. 배포 차단 — 모든 대상 로케일이 100% 번역된 경우에만 배포합니다 (가장 엄격)
  3. 백분율 임계값 — 로케일이 90% 이상 번역된 경우 배포하고, 미만인 경우 차단합니다
  4. 키 수준 우선순위 — 중요한 UI string은 반드시 번역되어야 하고, 비중요한 것은 폴백 가능합니다

FAQ

번역 파일을 git에 커밋해야 합니까? 예. 번역 파일을 커밋하면 TMS API를 사용할 수 없는 경우에도 빌드가 작동합니다. CI 파이프라인이 최신 번역을 가져와서 변경 사항을 자동으로 커밋합니다.

번역 파일의 머지 충돌을 방지하는 방법은? TMS를 단일 정보 소스로 사용하십시오. CI가 각 빌드마다 번역을 최신 상태로 가져와 로컬 파일을 덮어씁니다. 개발자는 번역 파일을 수동으로 편집하지 않습니다.

배포가 필요할 때 번역이 준비되지 않은 경우 어떻게 합니까? 폴백 전략을 사용하십시오 (번역되지 않은 string에는 소스 언어를 표시). 번역 완료율을 추적하고 임계값 아래로 떨어지면 알림을 설정하십시오.

브랜치 기반 개발은 어떻게 관리합니까? feature 브랜치의 string을 별도의 TMS 네임스페이스나 브랜치에 푸시하십시오. feature 브랜치가 main에 머지될 때 번역도 머지하십시오.

모바일 앱에도 로컬라이제이션 CI/CD를 실행할 수 있습니까? 예. 동일한 원칙이 적용됩니다 — string을 TMS에 푸시하고, 빌드 중에 번역을 가져오고, 릴리스 전에 검증합니다. 모바일 특화 사항: 파이프라인에 ASO 메타데이터를 포함하고 .strings/.xml 파일 형식을 검증하십시오.

Comments

Loading comments...