slowlp
← 블로그
교훈 2026.06.16 · 3분 읽기

어머니도 나도 영어를 못 하는데, 미술관은 다국어가 됐다

번역가 없이 다국어 사이트 운영하기 — DB를 언어모델로 채우는 구조

교훈

어머니도 나도 영어를 못 하는데, 미술관은 다국어가 됐다

번역가 없이 다국어 사이트 운영하기 — DB를 언어모델로 채우는 구조

미술관을 올리고 나니 욕심이 생겼다.

어머니 작품은 한국을 대표할 만하다고 생각한다. 서예의 정통 내공에서 민화·캘리까지, 글과 그림이 한 화면에서 만나는 방식이 어머니만의 것이다. 그러니까 한국 사람만 보는 건 아깝다는 생각이 들었다. 외국 사람도 봤으면 했다.

문제는 하나였다. 어머니도 나도 영어를 못 한다.


전문 번역가를 쓰는 건 처음부터 제외했다. 비용도 비용이지만, 작품이 추가될 때마다 번역을 맡겨야 한다는 게 운영으로 이어지지 않는다. 어머니는 지금도 계속 작품을 만드시고, 전시도 하신다. 한 번에 끝나는 사이트가 아니라 계속 살아 움직이는 미술관이 목표였으니까.

그래서 구조를 이렇게 잡았다. 어머니는 한글만 입력한다. 영어는 스크립트가 채운다.


DB를 보면 작품 테이블에 titleEn, descriptionEn 같은 컬럼이 있다. 평소엔 비어 있다. 어머니가 /admin에서 작품을 추가하거나 수정할 때 한글만 넣으면 된다.

수정할 때 한 가지 중요한 게 있는데 — 한글 내용이 바뀌면 짝 *En 컬럼이 자동으로 null이 된다. 옛날 번역이 그대로 남아 틀린 영어를 보여주는 걸 막기 위해서다. En이 비어 있으면 영어 페이지에서도 한국어 원문으로 폴백된다. 번역이 0%여도 사이트는 정상 동작한다.

번역은 이렇게 돌린다.

# 1단계: 미번역 한글 칸 추출
npm run db:translate -- --export data/translations.json

# 2단계: 에이전트가 "en" 칸 채움
# (Claude Code 스킬 /translate-en 으로 1~3단계 일괄 처리 가능)

# 3단계: 채워진 파일 DB에 되쓰기
npm run db:translate -- --import data/translations.json

핵심은 2단계다. API 직접 호출이 아니라 파일로 위임한다. 이유가 있다. 헤르메스(개발서버에서 돌리는 Discord 봇)나 Claude Code는 이미 구독료를 내고 있는 정액제 에이전트다. 토큰당 별도 과금이 없다. 번역 파일을 에이전트한테 넘기면 이미 낸 구독으로 처리된다.

운영 DB 기준으로 처음 돌렸을 때 작품이 31개였다. 번역 대상 칸이 263개였는데, 이전에 로컬에서 번역해뒀던 것 166개는 그대로 재사용하고, 신규·변경분 97칸만 새로 번역했다. 최종적으로 73행이 DB에 반영됐다.


한 가지 아직 완전히 안 끝난 게 있다.

고유명사 음차 문제다. 서예 재료 이름들 — 화선지를 Hwaseonji로, 순간분채·분채를 mineral pigment로 옮기는 게 맞는지. 일부 작품 영문 제목도 검토가 남아 있다. 언어모델이 번역은 잘 하는데, 전통 미술 용어의 음차나 관용 표현은 사람이 한 번 봐야 한다.

완벽하지 않아도 일단 돌아간다는 게 이 구조의 장점이다. 틀린 번역이 있어도 그 칸만 --force로 다시 채우면 되고, 검토되지 않은 칸은 한국어 원문이 그대로 보인다.


번역가 없이 다국어 미술관이 굴러간다.

어머니는 여전히 한글로만 입력하신다. 나는 가끔 npm run db:translate 한 줄 돌리면 끝이다. 작품이 늘어도 번역 부담이 비례해서 늘지 않는다.

언어가 장벽이어서 외국 관람객을 포기해야 한다면, 사람을 구하기 전에 이 구조를 먼저 짜 보는 걸 권한다. DB에 *En 컬럼 하나 추가하고, 번역은 파일로 위임하고, 한글 수정 시 En을 자동으로 비우는 것만으로 충분히 굴러간다.

관련 프로젝트
한새암 미술관 LIVE
작가 새암(Saiam) 한의숙의 온라인 미술관 — 기획부터 배포까지 6시간, 지금도 운영 중.
보기 →
댓글