게임 로컬라이제이션 Excel 번역 플랫폼
1. 프로젝트 한 줄 소개
게임 로컬라이제이션용 Excel과 다국어 용어집을 입력받아, 여러 LLM으로 대량 번역하고 규칙 기반 QA와 선택 재번역까지 연결하는 사내 웹 플랫폼입니다.
단순히 LLM 번역 결과를 출력하는 데서 끝나지 않고, 실제 번역 업무에서 중요한 용어 일관성, 포맷 문자열 보존, 문자 오염 방지, 실패 복구, Excel 재출력을 하나의 파이프라인으로 구성했습니다.
2. 해결하려는 문제
게임 번역 데이터는 일반 문장 번역과 다른 제약이 있습니다.
- 하나의 Excel 파일에 여러 언어 컬럼이 함께 존재합니다.
- 이미 번역된 셀과 비어 있는 셀이 혼재되어 있습니다.
- 캐릭터명, 아이템명, 스킬명 등 고유 용어는 용어집 기준과 일치해야 합니다.
{0},%s,<color>같은 런타임 포맷 토큰이 손상되면 게임 UI 오류로 이어질 수 있습니다.- 목표 언어에 한글, 불필요한 숫자, 다른 문자권이 섞이는 LLM 특유의 오염 결과가 발생할 수 있습니다.
- 수백~수천 행의 장시간 작업에서는 진행률 표시, 취소, 중간 결과 보존이 필요합니다.
- 번역 완료 후 QA 결과를 확인하고 문제가 있는 셀만 다시 번역할 수 있어야 합니다.
따라서 핵심 문제를 단순한 번역 생성이 아니라, 게임 로컬라이제이션 제약을 지키는 대량 번역 작업의 자동화와 복구 가능성 확보로 정의했습니다.
3. 사용자 워크플로
.xlsx또는.xls번역 파일과 선택적인 다국어 용어집을 업로드합니다.- 원문 컬럼과 대상 언어 컬럼을 분석하고, 사용자가 언어 코드 매핑을 보정할 수 있습니다.
- 이미 정상 번역된 셀은 유지하고, 빈 셀 또는 오염된 셀을 번역 대상으로 계획합니다.
- 언어별·배치별로 LLM 번역을 수행하며 SSE로 진행률과 재시도 상태를 표시합니다.
- 언어 하나가 완료될 때마다 중간 결과를 전달하고, 최종 결과를 Excel로 다운로드합니다.
- 별도 QA 화면에서 규칙 위반을 검사하고, 필요한 셀만 선택해 재번역합니다.
4. 시스템 구조
프론트엔드는 React 기반 UI에서 번역·QA·재번역 요청을 보내고, 백엔드는 Express SSE 엔드포인트를 통해 진행률과 중간 결과를 스트리밍합니다. 번역 도메인 계층에서는 배치 번역, 용어집 직접 매칭, 포맷·문자·숫자 검증, 실패 행 재시도 로직을 담당하며, LLM 호출부는 Provider 추상화로 분리해 Gemini·OpenAI·Anthropic 간 전환과 재라우팅이 가능하도록 구성했습니다.
5. 핵심 기술 설계
5.1. 용어집 기반 선처리
LLM 호출 전에 코드로 결정 가능한 결과는 먼저 처리합니다.
원문 셀 전체가 용어집 항목과 완전히 일치하면 LLM을 호출하지 않고 용어집의 번역을 직접 기입합니다. 또한 원문에 포함된 필수 용어를 사전에 검색해 프롬프트와 사후 검증에 함께 사용합니다.
이 설계의 목적은 다음과 같습니다.
- 고유명사의 비결정적 번역 방지
- 완전 일치 항목에 대한 API 호출 절감
- 프롬프트 지시와 사후 검증 기준 통일
- 용어집 기준 번역의 일관성 확보
5.2. 배치 번역과 실패 복구
기본 배치 크기는 100행이며, UI에서 조절할 수 있도록 설계했습니다.
큰 배치에서 일부 행이 실패하더라도 전체 작업을 중단하지 않고 실패 행만 별도 큐로 분리합니다. 이후 작은 배치로 다시 시도하고, 마지막에는 1행 단위로 격리 재시도하여 구조화 응답 오류나 일부 행 누락의 영향 범위를 줄입니다.
복구 단계는 다음 순서로 적용됩니다.
- 동일 Provider에서 검증 피드백을 포함해 재번역
- 설정된 API 키가 있으면 다른 Provider로 재라우팅
- 실패 행만 작은 배치로 격리 재시도
- 끝까지 복구되지 않은 행은 최종 실패 값과 사유를 표시
이 방식은 Provider 장애, JSON 파싱 실패, 일부 행 누락, 검증 실패가 발생하더라도 전체 번역 작업을 가능한 한 계속 진행하기 위한 설계입니다.
5.3. 규칙 기반 검증과 QA
LLM은 번역 후보를 생성하고, 애플리케이션 코드는 결과를 결정적으로 검사합니다.
주요 검증 항목은 다음과 같습니다.
| 검증 항목 | 설명 | 예시 |
|---|---|---|
| 번역문 누락 | 응답은 왔지만 해당 행의 번역 결과가 비어 있거나 누락된 경우 | 빈 문자열, 일부 행 누락 |
| 목표 언어 문자 오염 | 대상 언어와 무관한 문자권이 섞인 경우 | 영어 결과에 한글 포함, 일본어 결과에 키릴 문자 포함 |
| 현지화 누락 | 번역되어야 할 내용이 영어 또는 원문 형태로 남은 경우 | 스페인어 결과에 영어 문장 잔존 |
| 용어집 불일치 | 지정된 용어집 번역 대신 다른 표현이 사용된 경우 | 캐릭터명, 아이템명 오역 |
| 원문에 없는 숫자 추가 | 원문에 없던 숫자가 새로 추가된 경우 | +10, 2024 등 임의 숫자 추가 |
| 포맷 토큰 누락 | 원문의 포맷 문자열이나 플레이스홀더가 빠진 경우 | %s, %d, {0}, \n 누락 |
| 원문에 없는 포맷 토큰 추가 | 원문에는 없던 포맷 문자열이 새로 생긴 경우 | 불필요한 %s 추가 |
| 괄호·태그 구조 불일치 | 괄호, 태그, 리치 텍스트 구조가 원문과 달라진 경우 | <i>...</i>, [], {} 손실 |
| 동일 템플릿 스타일 불일치 | 같은 패턴의 문장끼리 번역 어순이나 스타일이 달라진 경우 | 아이템명 시리즈의 번역 형식 불일치 |
| 길이 제한 초과 | 글자 수 또는 UTF-8 byte 제한을 초과한 경우 | UI 텍스트 영역 초과 가능성 |
검증 결과는 정책에 따라 다르게 처리합니다.
- 문자 오염, 필수 용어 누락, 포맷 토큰 손상은 자동 재시도 조건으로 사용합니다.
- 길이 제한 초과처럼 즉시 폐기하기 어려운 항목은 경고 정보로 전달합니다.
- QA 화면에서는 전체 결과를 다시 검사하고, 문제가 있는 셀만 선택해 재번역할 수 있도록 합니다.
핵심은 LLM의 비결정적인 결과를 그대로 신뢰하지 않고, 코드 레벨에서 게임 로컬라이제이션에 필요한 불변 조건을 검사하는 것입니다.
5.4. SSE 기반 장시간 작업 처리
번역, QA, 재번역 API는 text/event-stream 기반 SSE로 구현했습니다.
SSE를 사용한 이유는 대량 번역 작업이 오래 걸릴 수 있고, 사용자가 진행 상황과 실패 복구 상태를 실시간으로 확인해야 하기 때문입니다.
주요 처리 방식은 다음과 같습니다.
- 10~15초 간격 keep-alive로 프록시 연결 유지
- 언어 시작, 행 완료, 재시도, 언어 완료 이벤트 전달
- 언어 완료 시
partial_result를 전송해 중간 결과 보존 - 브라우저 연결 종료 시
AbortController로 진행 중 작업 취소 - Nginx 버퍼링 방지 헤더 적용
- 최대 1시간 소켓 타임아웃 적용
최종 결과만 기다리는 방식보다 사용자가 현재 단계와 복구 상태를 확인할 수 있으며, 연결이 종료되더라도 완료된 언어의 중간 결과를 활용할 수 있습니다.
6. 기술적 의사결정과 트레이드오프
| 결정 | 이유 | 트레이드오프 |
|---|---|---|
| LLM 기반 컬럼 분석 | 고정되지 않은 현업 Excel 헤더에 대응 | 분석 실패 가능성이 있어 사용자 보정과 오류 처리가 필요 |
| 용어집 직접 매칭 | 정확성과 비용 예측 가능성 향상 | 문맥에 따라 형태 변화가 필요한 언어는 별도 정책 필요 |
| 규칙 기반 사후 검증 | 포맷, 문자, 숫자, 용어를 결정적으로 검사 | 언어별 허용 문자와 예외 규칙을 지속 관리해야 함 |
| 다중 Provider fallback | 특정 모델 장애와 반복 실패에 대한 복구 경로 확보 | 비용과 지연 시간이 증가할 수 있음 |
| SSE 스트리밍 | 장시간 작업의 진행률, 중간 결과, 취소 제공 | 재연결과 작업 상태 영속화는 별도 설계가 필요 |
| 브라우저 Excel 생성 | 서버 저장 없이 즉시 결과 다운로드 가능 | 대용량 파일에서는 브라우저 메모리 부담 증가 |
7. 검증 전략
자동 테스트는 LLM 자체의 문장 품질보다, 애플리케이션 코드가 보장해야 하는 불변 조건에 집중했습니다.
주요 테스트 대상은 다음과 같습니다.
- 포맷 문자열 추출과 원문·번역문 간 보존 여부
- 실제 개행과
\\n표현 정규화 - 목표 언어 문자 오염 탐지
- 원문에 없던 숫자 추가 탐지
- 용어집 대소문자 옵션 처리
- 완전 일치 용어 직접 적용
- 필수 용어 누락 탐지
- 긴 용어 우선 매칭
- 중복 용어와 부분 문자열 경계 처리
이 검증 전략을 통해 LLM 번역 품질 자체보다는, 게임 로컬라이제이션 파이프라인에서 반드시 깨지면 안 되는 조건을 코드로 보장하는 데 집중했습니다.