이 사이트는 Kohei Koyanagi가 개발한 소프트웨어로 여러 언어로 자동 번역됩니다. 보다 정확한 내용은 원문 영어 를 참고하세요.

이 블로그가 42개 언어로 번역되는 방법

Splync 블로그는 42개 언어로 제공됩니다

이것은 커플, 친구, 가족을 위한 공유 예산 추적기 Splync 블로그의 23번째 기사입니다. 혼자서 42개 언어로 게시물을 어떻게 발행하는지 궁금할 수 있습니다. 각 기사 상단의 고지사항에 따르면 이 웹사이트는 제가 제작한 소프트웨어로 여러 언어로 자동 번역됩니다. 분명히 하자면, 저는 영어 외의 언어로 한 문장도 수동으로 작성하지 않습니다. 따라서 가장 정확한 의미가 필요할 때는 영어 원문을 참조해주시길 부탁드립니다. 그렇지만 여러 번의 시행착오 끝에 번역 파이프라인을 개선한 덕분에 전체 번역 품질은 꽤 괜찮다고 생각합니다. 이 기사에서는 Splync 블로그를 다국어로 만드는 제 소프트웨어의 역할을 공유하겠습니다.

Python과 OpenAI API의 협력

저는 항상 각 기사를 평범한 영어로 작성하는 것부터 시작하며, SEO 관련 메타데이터도 포함합니다. 그 다음, 제 Python 스크립트가 영어 텍스트를 OpenAI API에 전송하고, 프롬프트와 작은 참조 파일도 함께 보냅니다. OpenAI 서버에서 ChatGPT-4o가 요청을 읽고, 번역된 기사를 예를 들어 아랍어 버전으로 JSON 형식으로 반환합니다. 제 MacBook이 그 번역을 받으면 스크립트가 즉시 다음 요청을 보냅니다. 이번에는 벵골어로 번역을 요청합니다. 스크립트는 자동으로 42개의 모든 대상 언어를 순환하며 처리합니다. 과정을 마치면 제 컴퓨터는 42개의 번역된 JSON 파일을 보유하게 됩니다. 또 다른 Python 스크립트가 각 번역을 HTML 템플릿에 삽입한 후 1초도 안 되는 시간 안에 42개의 HTML 파일을 생성합니다. 모든 파일은 이 블로그가 호스팅되고 있는 서버에 업로드되고, 각 언어 버전은 개별 디렉토리에 배치됩니다. 마지막으로 서버 측 Python 스크립트가 기사 색인과 “다음 게시물” 링크를 업데이트하여 모든 언어의 탐색이 일관되도록 합니다. 원본 영어 기사가 평범한 텍스트로 작성되어 있을 경우, 전체 과정은 보통 5분 또는 그 이하로 걸립니다. 변경이 필요할 때는 서버 측 Python 스크립트를 사용해 여러 HTML 파일을 동시에 업데이트합니다.

API란 무엇인가

기술 용어에 익숙하지 않다면, 제 컴퓨터가 처음에 어떻게 OpenAI의 서버와 "대화"하는지 궁금할 수 있습니다. 그 답은 API, 즉 애플리케이션 프로그래밍 인터페이스라는 것입니다. API는 두 프로그램 간의 메신저 창이라고 생각하면 됩니다. 하나의 프로그램이 요청을 보내면, 다른 프로그램이 응답을 보냅니다. 예를 들어, 제 Python 스크립트가 "이 기사를 독일어로 번역해 주세요"라는 메시지를 보냅니다. OpenAI는 그 메시지를 API를 통해 받고, 번역을 준비한 후 결과를 다시 보냅니다. 이는 마치 레스토랑에서 주문하는 것과 같습니다. 웨이터에게 원하는 것을 말하면 주방에서 준비하고, 웨이터가 다시 테이블로 가져옵니다. 그리고 왜 웨이터가 필요한 걸까요? 주방으로 직접 들어가거나 요리사와 직접 대화하지 않기 때문입니다. 주방이 어떻게 작동하는지 모르고 알 필요도 없기 때문입니다. 웨이터에게 "치즈버거 줄 수 있어요?"라고 말하면 웨이터는 "주문 들어왔습니다! T21, 치와와!"라고 완전히 다른 형식으로 소리칠 수 있습니다. API는 같은 역할을 합니다. 두 시스템을 연결하여 서로의 내부 언어나 워크플로를 이해할 필요 없이 상호작용하게 합니다.

왜 OpenAI API가 필요한가요

API가 무엇인지 알았으니, 이제 이 블로그에서 실제로 의존하는 이유를 설명하겠습니다. 실질적으로 저는 ChatGPT와 직접 "대화"할 수 있지만, 42개의 언어를 처리해야 합니다. 웨이터를 42번 부르는 것은 번거롭습니다 (프로그램은 영어를 영어로 번역하는 단계를 건너뛰지만, 여전히 텍스트를 JSON으로 변환합니다). OpenAI API를 사용하면 Python 스크립트가 모든 요청을 자동으로 보낼 수 있어 반복 작업에서 벗어나 다른 일에 집중할 수 있습니다. 저는 혼자서 개발하기 때문에 시간을 최대한 효율적으로 사용해야 합니다. 반복적이고 명확한 규칙이 있는 작업을 보면 자동화합니다. 그 결과 대부분 백만 배 빠르고 오류 없이 처리됩니다. 그래서 API를 통한 자동화가 필수적입니다 — 그것은 제 스크립트가 42개의 "주문"을 즉시, 신뢰성 있게 처리할 수 있도록 해줍니다.

왜 42개 언어인가요

기술적으로는 더 많은 언어를 추가할 수 있습니다; 단지 실행하는 데 몇 분 더 걸릴 뿐입니다. 하지만 개인적으로는 Douglas Adams의 책에 나오는 "삶, 우주, 그리고 모든 것에 대한 궁극적 질문의 답"인 숫자 42를 좋아합니다. 숫자 42에 대한 애착을 넘어서, 매우 적은 언어를 추가하는 것은 위험할 수 있습니다. AI 번역은 훈련 데이터가 제한된 언어에 대해 덜 신뢰할 수 있게 될 수 있기 때문입니다.

ChatGPT 4o의 온도

다국어 번역 접근법을 처음 시도했을 때, 결과는 괜찮았지만 완벽하지 않았습니다. 일부 문장은 잘못 번역되거나, 지나치게 직역되거나, 특정 언어에서 미묘하게 오해를 불러일으킬 수 있었습니다. 특정 문화적 맥락에서 부적절하거나 민감할 수 있는 표현이 무심코 생성되는 것을 걱정했으며, 번역이 기계적이거나 로봇처럼 들리지 않기를 원했습니다. 번역 품질의 중요한 요소 중 하나는 온도 설정입니다 — AI가 얼마나 "창의적" 또는 "엄격"해야 하는지를 조절하는 매개변수입니다. 높은 온도는 AI를 더 창의적으로 만들지만, 더 예측 불가하게 만듭니다. 낮은 온도는 원본 의미에 가깝게 유지되지만, 때로는 딱딱하게 느껴질 수 있습니다. 적절한 균형을 찾기 위해 많은 시행착오가 필요했습니다: 정확성을 보장할 만큼 낮지만, 텍스트가 생기 없을 정도로 낮지 않도록. 많은 실험 끝에 저는 온도 = 0.8이 이 블로그의 필요에 가장 적합하다고 느꼈습니다: 영어 원문에 충실할 만큼 정확하지만, 다른 언어에서 자연스럽게 들리도록 유연합니다.

ChatGPT 5.x는 온도를 지원하지 않습니다

ChatGPT 5와 5.1 같은 최신 모델은 온도 설정을 전혀 지원하지 않습니다 — 매개변수가 제거되고, 모델의 사고에 영향을 미치는 개념, 즉 창의적이지 않게 만드는 것들로 대체되었습니다. 다시 말해, ChatGPT 4o는 번역 스타일을 미세 조정할 수 있는 물리적 다이얼을 제공했지만, 5.x 계열은 완전히 다른 철학을 따릅니다. 최신 모델에 "온도 = 0.8로 번역해 주세요"라고 묻는다면, 그런 설정이 여전히 존재하는 척하려 할 수 있지만, 내부적으로는 매개변수가 사라졌습니다. 모델은 단순히 의도를 근사화할 뿐입니다. OpenAI가 모델을 계속 업데이트하면서, 언젠가 번역 파이프라인을 조정할 수도 있습니다. 현재로서는 ChatGPT 4o가 다국어 번역에 대한 제 선택입니다 — 여러 언어에서 맥락을 잘 이해할 뿐 아니라, API 가격이 저 같은 혼자 개발자에게 합리적이기 때문입니다. 사실, 4o는 OpenAI 역사상 가장 사랑받는 모델 중 하나로 기억될 수 있습니다.

OpenAI API의 작업자들

브라우저에서 직접 ChatGPT를 사용하는 것과 비교할 때 OpenAI API의 놀라운 점은 동시에 여러 ChatGPT "작업자"를 사용할 수 있다는 것입니다. 42개 언어에 대한 번역 요청을 보낼 때 하나씩 느리게 보내는 것이 아닙니다. API는 마치 갑작스럽게 여러 번역가를 고용한 것처럼 여러 요청을 동시에 처리할 수 있습니다. 제 Python 스크립트는 작은 생산 라인처럼 워크플로를 관리합니다: 영어 기사를 준비하고, 요청을 보내고, 응답을 기다리고, 결과를 JSON 파일로 처리합니다. 한편, OpenAI 서버는 여러 모델 인스턴스를 동시에 실행하여 각각 다른 언어를 병렬로 번역합니다. 이는 ChatGPT 웹사이트나 앱에서 할 수 없는 것입니다 — 그 인터페이스는 한 번에 하나의 모델, 하나의 대화, 하나의 작업만 제공합니다. 하지만 API를 사용하면 스크립트가 허용하는 만큼 작업량을 확장할 수 있습니다. 혼자 개발자로서 이는 마치 가장 똑똑하고 이기적이지 않은 조그만 팀을 가진 것과 같습니다. 인터넷 속도에 일부 의존하지만 보통 workers = 12로 설정합니다.

블로그를 다국어화하는 방법은 설거지입니다

제가 교토대학교에서 수학을 공부할 때 학생 식당에서 설거지 아르바이트를 했습니다. 시급은 약 5달러였지만, 몇 시간, 때로는 며칠 동안 깊이 집중한 후 반복적인 수작업을 항상 좋아했습니다. 나중에 홋카이도에 있는 마늘 공장에서 일할 때 수천 개의 흰 마늘을 벨트에서 더 밝게 보이게 닦는 일이었습니다. 하루에 8시간 — 완전 집중, 꾸준한 리듬. 이상하게도 만족스러웠습니다. 이제 그 추억에서 돌아와, 저는 현재 지적인 일을 하고 있습니다 — 소프트웨어를 작성하고, 시스템을 설계하고, 이 기사들을 작성하고 있습니다. 그러나 균형은 변하지 않았습니다. 저 혼자서 42개 언어로 블로그 기사를 게시할 수 있는 방법을 묻는다면, 솔직한 대답은: 설거지를 하면서 합니다.