개발 slecs

영어 포스트 제목 독립 관리로 국제화 기초 다지기

목차

블로그 국제화를 위해 포스트의 영어 제목을 별도 필드로 관리하는 title_en 을 도입했다. 슬렉스 영어 피드(/en) 가 한국어 제목이 아닌 영어 제목으로 노출되어야 하는 상황이 생기면서 그냥 원문을 번역기에 돌리거나 영어 사용자들이 "음, 이게 뭐 하는 포스트지?" 하며 헤매지 않도록 하기 위한 변화다.

단순 필드 추가가 아닌 계층 간 조정

처음에는 "그냥 title 필드에 영어 제목을 넣으면 안 돼?" 이렇게 생각하기 쉽다. 근데 여기서 핵심은 같은 포스트가 여러 언어로 노출되는 상황이었다. 한국 사용자는 한국어 제목을, 영어 사용자는 영어 제목을 봐야 한다. 그러면 단순히 DB에 문자열 컬럼을 추가하는 것만으로는 부족하고, 여러 계층에서 이 필드를 다뤄야 한다.

변경 항목 역할
app/main.py title_en 필드를 모델에 추가하고 필요한 로직 정의
app/templates/admin_post_form.html 관리자가 포스트를 생성/편집할 때 영어 제목을 입력할 수 있는 폼 필드 추가
scripts/backfill_title_en.py 이미 존재하는 모든 포스트에 title_en 값을 채워넣는 마이그레이션
scripts/bulk_seed.py 테스트 데이터 생성 시 title_en 포함하도록 업데이트
scripts/gen_blog_feed.py RSS/JSON 피드 생성 로직에서 언어별로 적절한 제목 선택
_notes/issue-site-plan.md 구현 계획 및 진행 상황 문서화

마이그레이션이 없으면 시작 자체가 안 된다

가장 신경 썼던 부분이 backfill_title_en.py 다. 새 필드를 추가하는 것만으로는 기존에 있던 수십 개의 포스트들이 title_en = NULL 상태가 되어버린다. 영어 피드를 열어봤을 때 제목 없이 나타나는 상황이 벌어지는 것이다. 그래서 이 마이그레이션 스크립트로:

  • 기존 포스트들을 전부 스캔
  • title_ko (한국어) 가 이미 있다면, 그걸 임시값으로 사용하거나
  • 또는 수동으로 번역할 포스트 리스트를 생성
  • 체계적으로 title_en 을 채워 넣기

이 과정이 없으면 "앗, 새 필드 추가했는데 기존 데이터가 깨졌네!" 이렇게 되는 거다. 특히 팀에서 여러 사람이 독립적으로 포스트를 올리는 상황이면, 누가 언제 이 필드를 채울지도 불분명해진다.

관리자 인터페이스와 시드 데이터가 함께 움직여야 함

admin_post_form.htmltitle_en 입력 필드를 추가한 이유는 명확하다. 관리자(또는 다른 팀원)가 새 포스트를 작성할 때 영어 제목을 바로 입력할 수 있어야 한다. 만약 이 폼 필드가 없다면, "어? 어디서 영어 제목을 입력해?" 하는 상황이 벌어진다.

동시에 bulk_seed.py 를 업데이트한 것도 중요하다. 로컬 개발이나 테스트 환경에서 더미 데이터를 만들 때 title_en 을 함께 생성해야, 개발자들이 "아, 이 필드는 이렇게 쓰는 거구나" 하고 금방 이해할 수 있다. 테스트 데이터가 제대로 갖춰지면, 새로 온 팀원도 로컬 환경에서 그냥 실행하는 것만으로 전체 흐름을 파악할 수 있다.

회고: 국제화는 필드 추가가 아니라 흐름 설계다

이 작업을 하면서 배운 게 하나 있다면, "다국어 지원 = 단순히 필드를 하나 더 만드는 게 아니다" 는 거였다.

  • DB 스키마 ✓
  • 관리 UI ✓
  • 기존 데이터 처리 ✓
  • 피드/API 출력 ✓
  • 테스트 데이터 ✓
  • 문서화 ✓

이 모든 게 일관되게 움직여야 처음으로 "국제화 지원을 했다" 라고 말할 수 있다. 흐름 중 하나라도 빠지면 누군가는 혼란스러워한다. 그래서 commit 을 이렇게 여러 파일을 건드는 형태로 묶은 거다. "이 작업은 한 가지를 일관되게 끝낸 것" 이라는 신호를 주기 위해서다.

다음엔 이런 국제화 기반 위에서 다른 언어를 추가하거나, 또는 더 체계적인 번역 워크플로우를 구축할 수 있을 것 같다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.