영어 블로그 피드 라벨 깨지던 버그 수정
목차
최근 다국어 블로그 시스템 개편 중에 /en/ 경로의 피드 라벨이 제대로 렌더링되지 않는 버그를 발견했다. 사용자가 영어 블로그 보드의 RSS 피드나 동적 피드를 열었을 때 제목, 카테고리, 설명 같은 메타데이터 텍스트가 빈 채로 나타나거나 언어가 섞여 나왔던 문제였다. scripts/gen_blog_feed.py 스크립트를 수정해서 경로별로 정확한 언어 라벨을 매핑하도록 처리했다.
다국어 피드 시스템의 함정
블로그 피드 생성은 보통 URL 경로로 언어를 구분한다. /ko/ 에서 요청하면 한국어 라벨, /en/ 에서 요청하면 영어 라벨을 내려줘야 하는데, 동시에 같은 데이터베이스와 콘텐츠를 공유한다. 즉, 각 블로그 포스트는 하나이지만 그 메타데이터(제목, 카테고리명, 설명)는 언어별로 달라야 한다는 뜻이다.
피드 생성 스크립트는 이 변환을 담당한다. 데이터를 직렬화하면서 현재 요청의 언어 컨텍스트를 참고해서 올바른 라벨을 선택하는 로직이 필수다. 그런데 이 부분이 누락되면?
| 상황 | 결과 |
|---|---|
경로는 /en/ 이지만 스크립트가 기본 언어(또는 첫 저장된 언어)로 렌더링 |
한국어 라벨이 영어 피드에 나타남 |
| 라벨 번역 키는 있지만 스크립트에서 참고하지 않음 | 라벨이 공란 또는 정체불명의 코드 표시 |
| 경로 파싱과 라벨 매핑이 따로 놀 때 | 간헐적으로 언어 꼬임 |
스크립트 수정의 핵심
gen_blog_feed.py 수정의 관점은 간단했다. URL 경로에서 언어 코드를 추출하고, 그 언어에 맞는 라벨을 피드 생성 시점에 선택하도록 명시적으로 처리했다. 예를 들어 이런 식의 로직이 추가됐을 것이다:
# 경로에서 언어 추출
lang = extract_lang_from_path(request_path) # '/en/' → 'en'
# 피드 항목 생성 시 언어 인자 전달
feed_items = generate_feed_items(
posts=blog_posts,
language=lang, # 명시적 언어 지정
label_resolver=get_labels_for_lang(lang)
)
이렇게 하면 경로와 라벨이 강하게 바인딩되므로 "경로는 영어인데 라벨은 한국어" 같은 미스매치가 사라진다.
왜 이런 버그가 생겼나
팀 입장에서 보면, 다국어 기능은 테스트하기 까다롭다. 단위 테스트는 각 언어를 모의(mock)해서 돌릴 수 있지만, 실제 사용자는 특정 경로에서만 특정 언어를 본다. 그래서 다음 중 하나가 빠지면 버그가 숨어 있다가 나중에 터진다:
- E2E 테스트에서 전 경로 커버:
/ko/,/en/,/ja/등 모든 언어 경로를 순회하며 피드 라벨 검증 - 코드 리뷰 때 언어별 컨텍스트 확인: "이 라벨 해석 함수가 요청 경로를 제대로 받고 있나?"
- 배포 후 spot-check: 실제 경로에서 피드를 열어보고 브라우저 개발자도구로 메타데이터 확인
이 사건에서는 아마 한 가지 이상이 빠졌을 거다. 아마도 한국어 기본 경로는 자주 테스트했지만, 영어 경로는 "일단 구조가 있으니 작동할 거겠지" 하고 넘어갔을 수도 있다.
회고: 다국어는 느려도 좋다
개발 속도 관점에서, 다국어 기능을 빠르게 구현하려다 보면 "모든 언어를 한 번에 일괄 처리하면 되지" 하고 싶어진다. 하지만 실무에서는 역이다. 각 언어 경로를 따로따로 명시적으로 테스트하고, 각 검증 단계에서 언어별로 다시 한 번 확인해야 한다. 그래야 이런 "경로는 A인데 라벨은 B" 같은 엣지 케이스를 미리 잡을 수 있다.
앞으로는 다국어 피드·메타데이터를 다루는 변경이 올 때마다, 팀 리뷰에서 "전 언어별 경로 검증 체크리스트가 있나?" 를 미리 물어보기로 했다. 뒷단 스크립트는 사용자 눈에 직접 보이지 않지만, 그 결과(피드 라벨, 메타데이터)는 모든 사용자가 마주친다. 그 사이의 일관성을 유지하는 건 작은 버그처럼 보여도 팀 전체의 신뢰도에 영향을 준다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.