목차
하나의 언어로 콘텐츠를 관리하는 것만으로도 이미 쉽지 않은 일입니다. 세 개, 다섯 개, 또는 스무 개의 언어를 추가하면 대부분의 CMS 플랫폼이 해결하도록 설계되지 않은 문제에 직면하게 됩니다. Headless CMS 아키텍처는 해결책을 제시하지만, 다국어 지원이 플러그인으로 나중에 추가되는 것이 아니라 기반부터 내장된 경우에만 가능합니다.
이 가이드는 Better i18n의 콘텐츠 플랫폼을 실용적인 참조 예시로 활용하여 확장 가능한 다국어 Headless CMS 전략을 구축하는 방법을 안내합니다.
CMS가 "다국어 준비"라는 것은 무엇을 의미합니까?
구현 세부 사항에 들어가기 전에 진정한 다국어 지원이 어떤 모습인지 정의하는 것이 도움이 됩니다. CMS가 다국어 준비가 되려면 세 가지 요건을 충족해야 합니다.
콘텐츠 구조가 언어를 인식합니다. 스키마는 번역이 필요한 필드(제목, 설명, 본문 텍스트)와 범용적인 필드(날짜, 불리언, 숫자 값, 미디어 자산)를 구별합니다.
API가 로컬라이즈된 콘텐츠를 기본적으로 제공합니다. 별도의 콘텐츠 트리를 유지하거나 로케일별로 항목을 복제하지 않고도 쿼리 파라미터로 모든 언어의 콘텐츠를 요청할 수 있습니다.
번역 상태가 가시적입니다. 편집자는 CMS 대시보드를 벗어나지 않고도 어떤 항목이 번역되었는지, 어떤 것이 보류 중인지, 특정 언어에서 어떤 것이 누락되었는지 확인할 수 있습니다.
현재 CMS가 이 세 가지 기준 중 하나를 충족하기 위해 맞춤 코드나 서드파티 서비스가 필요하다면, 확장함에 따라 마찰을 일으킬 기반 위에 구축하고 있는 것입니다.
1단계: 콘텐츠 모델 설계하기
콘텐츠 모델은 콘텐츠의 구조를 정의하는 스키마입니다. 청사진으로 생각하면 됩니다——필드, 그 타입, 유효성 검사 규칙을 지정합니다.
Collections와 Singletons
대부분의 콘텐츠는 두 가지 카테고리에 속합니다.
Collections는 여러 항목을 가진 모델입니다. 블로그 게시물, 제품 페이지, FAQ, 팀원 프로필, changelog 항목은 모두 Collections입니다. 각 Collection은 동일한 필드 구조를 공유하는 수백 또는 수천 개의 항목을 가질 수 있습니다.
Singletons는 단일 항목을 가진 모델입니다. 홈페이지 히어로 섹션, 전역 사이트 설정, 또는 "About Us" 페이지는 Singletons입니다. Collections와 동일한 필드 유연성을 가지지만 단일 인스턴스를 나타냅니다.
올바른 모델 타입으로 시작하면 나중에 재작업을 방지할 수 있습니다. "이것이 두 개 이상 될 수 있습니까?"라고 자문해보세요. 그렇다면 Collection을 사용하세요.
올바른 필드 타입 선택하기
Better i18n은 19가지 이상의 필드 타입을 제공하여 구조화된 데이터를 textarea에 저장하는 것 같은 임시방편 없이 콘텐츠를 정확하게 모델링할 수 있습니다.
카테고리별 실용적인 개요는 다음과 같습니다.
텍스트 필드:
- Text — 제목, 레이블, 짧은 값을 위한 한 줄 문자열
- Textarea — 설명 및 요약을 위한 여러 줄 일반 텍스트
- Rich Text — 제목, 목록, 임베드, 인라인 스타일을 포함한 형식화된 콘텐츠를 위한 완전한 Plate.js 에디터
데이터 필드:
- Number — 정수 또는 소수 값(가격, 수량, 평점)
- Boolean — 참/거짓 토글(추천 플래그, 가시성 제어)
- Date / DateTime — 선택적 시간 정밀도가 있는 날짜 선택기
- Enum — 미리 정의된 옵션에서 단일 또는 다중 선택(카테고리, 태그, 상태 레이블)
연락처 및 링크 필드:
- URL — 링크 및 참조를 위한 유효성 검사된 URL 필드
- Email — 유효성 검사된 이메일 주소 필드
- Phone — 형식 유효성 검사가 있는 전화번호 필드
미디어 및 파일:
- Files / Media — 이미지, PDF, 동영상 및 기타 자산을 항목에 직접 업로드
관계형 필드:
- Relations — 모델 간 항목 연결(예: 블로그 게시물의 저자, 제품의 카테고리)
- Rollups — 관련 항목에서 데이터 집계(예: 저자별 게시물 수)
- Formulas — 동일한 항목의 다른 필드를 기반으로 한 계산된 값
시스템 필드:
- Unique ID — 각 항목에 대해 자동 생성된 식별자
- Status — 내장 워크플로우 상태(draft, pending_review, published, archived)
- Created / Last Edited — 감사 추적을 위한 자동 타임스탬프
필드별 로컬라이제이션
이 부분에서 다국어 CMS 설계가 흥미로워집니다. 모든 필드를 번역할 필요는 없습니다. 제품 가격은 모든 언어에서 동일합니다. 게시 날짜는 로케일에 따라 변하지 않습니다. 이미지 URL은 일반적으로 범용적입니다.
Better i18n을 사용하면 모델 수준에서 각 필드를 로컬라이즈 가능 또는 로컬라이즈 불가로 표시할 수 있습니다. 로컬라이즈 가능한 필드는 언어별로 별도의 값을 가집니다. 로컬라이즈 불가 필드는 모든 번역에서 공유됩니다.
이 구분이 중요한 이유는 다음과 같습니다.
- 번역 작업량을 줄입니다(번역가는 번역이 필요한 필드만 봅니다)
- 데이터 불일치를 방지합니다(범용 값은 한 번 저장되고 복제되지 않습니다)
- API 응답을 깔끔하게 유지합니다(로컬라이즈 불가 필드는 요청된 언어에 관계없이 한 번만 나타납니다)
2단계: 편집 워크플로우 구축하기
순수한 CRUD 작업만으로는 다국어 콘텐츠를 관리하는 팀에게 충분하지 않습니다. 병목 현상을 만들지 않고 품질을 보장하는 워크플로우가 필요합니다.
상태 라이프사이클
Better i18n의 모든 항목은 4단계 라이프사이클을 따릅니다.
| 상태 | 의미 | API 가시성 |
|---|---|---|
| Draft | 작업 진행 중 | 기본적으로 반환되지 않음 |
| Pending Review | 편집 승인 대기 | 기본적으로 반환되지 않음 |
| Published | 라이브 콘텐츠 | API 쿼리에서 반환됨 |
| Archived | 보존되었지만 비활성 | 기본적으로 반환되지 않음 |
이 라이프사이클은 언어별이 아닌 항목별로 적용됩니다. 일부 번역이 아직 draft 상태인 경우에도 항목을 게시할 수 있습니다. API는 status 쿼리 파라미터를 존중하므로 프론트엔드는 요청한 상태의 콘텐츠만 수신합니다.
규모 확장을 위한 대량 작업
여러 언어에서 수백 개의 항목을 관리할 때 하나씩 업데이트하는 것은 확장되지 않습니다. Better i18n은 대량 작업을 지원합니다.
- 대량 상태 업데이트 — 여러 항목을 선택하고 한 번의 작업으로 draft에서 published(또는 다른 전환)로 이동
- 대량 삭제 — 오래된 항목을 일괄 제거
이러한 작업은 대시보드와 관리 API를 통해 모두 사용 가능하므로 CI/CD 파이프라인 또는 콘텐츠 자동화 스크립트에 통합할 수 있습니다.
3단계: REST API를 통해 통합하기
"Headless CMS"의 "Headless" 부분은 콘텐츠가 결합된 프론트엔드가 아닌 API를 통해 전달된다는 의미입니다. Better i18n은 세 가지 핵심 엔드포인트를 가진 공개 REST API를 제공합니다.
핵심 엔드포인트
GET /v1/content/:orgSlug/:projectSlug/models GET /v1/content/:orgSlug/:projectSlug/entries GET /v1/content/:orgSlug/:projectSlug/entries/:entrySlug
중요한 쿼리 파라미터
API의 진정한 힘은 쿼리 파라미터에 있습니다.
언어 필터링:
GET /entries?language=fr
모든 콘텐츠를 프랑스어로 반환합니다. 로컬라이즈 불가로 표시된 필드는 범용 값을 반환합니다. 로컬라이즈 가능한 필드는 가능한 경우 프랑스어 번역을 반환합니다.
상태 필터링:
GET /entries?status=published
게시된 항목만 반환합니다. 프로덕션 쿼리를 위해 언어와 결합하세요.
GET /entries?language=de&status=published
필드 선택(스파스 필드셋):
GET /entries?fields=title,slug,excerpt
프론트엔드가 필요한 필드만 요청하여 페이로드 크기를 줄이세요.
관계 확장:
GET /entries?expand=author,category
후속 요청을 하는 대신 관련 항목을 인라인으로 해결합니다. 이를 통해 많은 Headless CMS 통합을 괴롭히는 N+1 쿼리 문제가 해소됩니다.
커스텀 필드로 필터링:
GET /entries?filter[page_type]=feature
임의의 커스텀 필드 값으로 항목을 필터링합니다. 정밀한 쿼리를 위해 여러 필터를 결합하세요.
페이지네이션 및 정렬:
GET /entries?page=2&limit=10&sort=createdAt&order=desc
유연한 정렬이 있는 표준 페이지네이션입니다. 응답에는 페이지네이션 UI 구축을 위한 총 수가 포함됩니다.
인증
모든 API 요청은 x-api-key 헤더에 전달된 API 키가 필요합니다. 다른 권한을 가진 여러 키를 생성할 수 있습니다——예를 들어, 프론트엔드용 읽기 전용 키와 CMS 통합 스크립트용 전체 액세스 키입니다.
curl -H "x-api-key: your-api-key" \ "https://api.better-i18n.com/v1/content/acme/website/entries?language=en&status=published"
4단계: AI 콘텐츠 생성을 전략적으로 활용하기
Better i18n에는 필드 수준의 AI 기반 콘텐츠 생성 기능이 포함되어 있습니다. generateFieldContent 기능은 모델 구조와 기존 콘텐츠를 분석하여 개별 필드의 값을 제안합니다.
AI 생성이 가치를 더하는 곳
- SEO 메타 설명 — 항목의 제목과 본문 콘텐츠를 기반으로 설명 생성
- 발췌 및 요약 — 장문 콘텐츠를 간결한 미리보기로 압축
- 초안 — 모델의 구조에 맞는 본문 콘텐츠의 출발점 확보
- 이미지 대체 텍스트 — 이미지 컨텍스트를 기반으로 설명적인 대체 텍스트 생성
인간의 판단을 유지해야 할 곳
AI 생성은 출발점이지 최종 결과물이 아닙니다. 빈 필드 마비를 없애기 위해 사용한 다음 브랜드 목소리와 사실적 요구 사항에 맞게 편집하세요. 필드 수준 접근 방식은 어떤 필드가 AI 제안을 사용하고 어떤 필드가 수동으로 작성되는지 정확하게 제어할 수 있음을 의미합니다.
5단계: 콘텐츠 아키텍처 계획하기
기본 구성 요소가 준비되었다면, 다국어 사이트를 위한 실용적인 아키텍처를 소개합니다.
권장 모델
| 모델 | 타입 | 사용 사례 |
|---|---|---|
pages | Collection | 마케팅 페이지, 랜딩 페이지 |
blog-posts | Collection | 기사, 튜토리얼, 공지사항 |
navigation | Singleton | 사이트 네비게이션 구조 |
site-settings | Singleton | 전역 구성(로고, 푸터, 소셜 링크) |
faq | Collection | 자주 묻는 질문 |
changelog | Collection | 제품 업데이트 및 릴리즈 노트 |
번역 워크플로우
- 소스 언어로 콘텐츠를 만듭니다. 팀의 주요 언어로 항목을 작성합니다.
- 번역 상태 대시보드를 사용하여 번역이 누락된 항목을 식별합니다.
- 항목 편집기 또는 API를 사용하여 필드별로 번역을 추가합니다.
- 준비가 되면 게시합니다 — 상태 라이프사이클을 통해 소스 언어를 즉시 게시하고 번역이 완료되는 대로 추가할 수 있습니다.
피해야 할 일반적인 함정
언어별로 항목 복제하기. 이것이 가장 일반적인 실수입니다. 동일한 페이지의 영어, 프랑스어, 독일어 버전에 별도의 항목을 만들면 그 사이의 연결이 끊어집니다. 대신 필드별 번역이 있는 단일 항목을 사용하세요.
로컬라이즈 불가 필드 무시하기. 범용 필드(가격, 날짜, 불리언 플래그)를 로컬라이즈 불가로 표시하지 않으면 번역가가 건드리지 말아야 할 필드를 보게 되고 데이터 불일치 위험이 생깁니다.
상태 워크플로우 건너뛰기. 검토 단계 없이 직접 콘텐츠를 게시하는 것은 혼자 블로그를 운영하는 경우에는 작동하지만 팀에서는 실패합니다. 품질을 유지하기 위해 draft에서 published로의 라이프사이클을 사용하세요.
API에서 과도하게 데이터 가져오기. 프론트엔드가 필요한 것만 요청하기 위해 fields 파라미터를 사용하세요. 여러 API 호출을 연결하는 대신 단일 요청에서 관계를 해결하기 위해 expand를 사용하세요.
시작하기
다국어 콘텐츠 전략을 구축하는 데 몇 달간의 인프라 작업이 필요하지 않습니다. Better i18n의 Headless CMS로:
- Model Builder에서 콘텐츠 모델을 정의합니다
- 소스 언어로 항목을 만듭니다
- 항목 편집기 또는 API를 사용하여 번역을 추가합니다
- REST API를 통해 로컬라이즈된 콘텐츠를 쿼리합니다
- AI 생성을 사용하여 콘텐츠 제작을 가속화합니다
모델 생성부터 API 배포까지 전체 워크플로우는 다국어 콘텐츠를 후속 고려사항이 아닌 제품의 핵심 부분으로 제공하는 팀을 위해 설계되었습니다.