인포그랩은 지난 4월 ‘Mattermost 공식 기술 문서 한글판 by 인포그랩(이하 Mattermost 공식 기술 문서 한글판)’이라는 서비스를 선보였는데요. 이는 OpenAI의 생성형 인공지능(AI) 모델 GPT로 Mattermost 기술 문서 총 600개를 한글로 자동 번역해 제공합니다. Mattermost는 미 항공우주국(NASA)과 삼성전자가 사용하는 글로벌 기업용 메신저인데요. 인포그랩은 Mattermost의 공식 리셀러로, 국내 사용자에게 이 서비스를 널리 알리고 편리한 이용을 돕고자 Mattermost 공식 기술 문서 한글판을 개발했습니다.
저는 이 서비스의 개발 과정에서 AI 번역 로직 구현과 RST(reStructuredText) 문법 교정 스크립트 개발 업무를 수행했는데요. 이번 Mattermost 기술 문서 번역 작업은 RST 형식의 기술 문서를 가공하는 데 중점을 뒀습니다. 이 작업은 지난 프로젝트인 ‘GitLab 공식 기술 문서 한글판 by 인포그랩(이하 GitLab 공식 기술 문서 한글판)’에 이어 진행했는데요. 이제 인포그랩 내부에 기술 문서 번역 자동화 워크플로가 정착했고요. AI 번역 작업에 요령이 생겨 이번에는 RST 문법을 정확히 이해하고, 효과적으로 변환하는 데 주력했습니다.
RST 형식의 기술 문서를 GPT로 번역하는 과정은 녹록지 않았는데요. 오늘 그 이유를 설명해 드리려 합니다. 지금부터 제가 Mattermost 기술 문서를 번역하며 겪은 시행착오와 이를 해결한 과정을 자세히 말씀드리겠습니다(Mattermost 공식 기술 문서 한글판의 개발 배경은 'Mattermost 공식 기술 문서 한글판 by 인포그랩’을 소개합니다'를 봐주시면 좋겠습니다. 😊).
번역용 프롬프트 작성했지만
저는 GPT에 입력할 기술 문서 번역용 프롬프트를 작성하기 위해 Mattermost 기술 문서 구조를 먼저 파악했습니다. Mattermost 기술 문서는 Markdown 형식이 아닌 RST 형식인데요. 저는 ‘RST 형식이라고 Markdown 형식과 얼마나 다르겠어’라고 생각했고요. 이에 GitLab 기술 문서를 GPT로 번역할 때 사용한 프롬프트를 Mattermost 기술 문서 번역용으로 수정, GPT에 적용했습니다. 프롬프트에는 역할, 지켜야 할 규칙, 예시를 입력했고요. 관련 응답만 생성하도록 설정했죠.
그 결과..! 멀쩡하게 진행되던 Mattermost docs site의 빌드가 실패하고 말았습니다. 😢
Mattermost docs site의 빌드 실패 현장Warning 단계 이상의 오류(심각한 문법 깨짐, 템플릿 문법과의 상호작용 이상 추정)가 다량으로 발생했는데요. 이는 제가 RST 문법의 특수성과 Mattermost docs site의 구조를 잘 몰랐기에 발생한 오류였습니다.
RST 문법 특수성 알아보니
RST 형식은 Python 프로그래밍 언어 커뮤니티에서 기술 문서에 주로 사용하는, 텍스트 데이터의 파일 형식입니다. 몇 가지 문법을 살펴보면 다음과 같은데요.
위 문법은 Markdown 형식으로 아래와 같이 바꿀 수 있습니다.
두 형식의 차이가 보이시나요? RST 형식으로 된 기술 문서를 어떠한 가공 없이 GPT로 번역하면 문법이 깨져 문서가 흐트러지는데요. 맨 처음 예시로 든 RST 형식의 테이블에서 ‘John’이라는 글자가 입력된 칸의 공백을 한 칸 지워보 겠습니다(아래 두 번째 이미지 참조).
RST 형식 테이블에서 ‘John’이 입력된 칸의 공백을 지우기 전 모습(왼쪽), 웹사이트에 테이블이 정상적으로 적용된 모습(오른쪽)RST 형식의 테이블에서 ‘John’이 입력된 칸의 공백을 한 칸 지운 모습(왼쪽), 웹사이트에 테이블이 사라진 모습(오른쪽)
위 이미지에서 보다시피 RST 형식의 테이블은 칸 오른쪽의 세로줄이 칸 아래의 +-----+
길이와 딱 맞게 정렬돼야 GPT로 번역할 때 테이블로 인식되고요. 그 결과, 웹사이트에도 정상적으로 적용됩니다. 이 세로줄이 +-----+
길이에 맞춰 정렬되지 않으면 테이블로 인식되지 않고요. 웹사이트에도 테이블이 나타나지 않죠.
이는 Mattermost 기술 문서를 GPT로 번역할 때 다음 문제를 낳았는데요. 예를 들어, GPT는 ‘hello’를 ‘안녕하세요’로 번역하죠. 이 단어가 RST 형식의 테이블 밖에 있으면 GPT로 번역할 때, 결과에 영향을 주지 않는데요. 이 단어가 RST 형식의 테이블 안에 있으면, 번역할 때 글자 수가 바뀌어 테이블 칸 오른쪽의 세로줄이 칸 아래의 +-----+
길이에 맞게 정렬되지 않고요. 그 결과, 웹사이트에 테이블이 정상적으로 적용되지 않습니다(아래 두 번째 이미지 참조).
RST 형식의 테이블에 있는 단어를 번역한 후 모습(왼쪽), 웹사이트에 테이블이 사라진 모습(오른쪽)
아울러 이는 에러를 발생시키지도 않아 ‘어떤 파일에서 문법이 깨졌는지’ 바로 파악하기도 어려운데요. 이를 확인하려면 모든 번역본을 원본 문서와 비교해야 하죠. 이는 Mattermost 기술 문서 번역 과정에서 시간이 굉장히 오래 걸리고, 집중력을 상당히 기울여야 하는 작업이었습니다.