LibreTranslate: 자체 호스팅 가능한 오픈소스 번역 API 배포 및 활용 가이드
유료 번역 API의 비용과 데이터 프라이버시 문제로 고민하고 계신가요? LibreTranslate는 이러한 우려를 해소할 수 있는 완벽한 대안을 제공합니다. 이 프로젝트는 완전히 무료이며 오픈소스 기계 번역 API로, 로컬 서버에 직접 배포하여 데이터 프라이버시를 완벽하게 제어하고 외부 서비스에 의존할 필요 없이 독자적인 번역 환경을 구축할 수 있습니다. 본 가이드에서는 LibreTranslate를 신속하게 배포하고 활용하는 방법을 상세히 설명하여, 여러분만의 번역 서비스를 손쉽게 갖출 수 있도록 돕겠습니다.
왜 LibreTranslate를 선택해야 할까요?
시작하기 전에 LibreTranslate가 지닌 주요 이점들을 살펴보겠습니다. 다음은 LibreTranslate가 특별한 이유입니다:
- 완전 무료: 사용량 제한이나 API 요금이 없어 장기적으로 운영 비용이 발생하지 않습니다.
- 오픈소스 투명성: AGPLv3 라이선스 기반으로 코드를 직접 검토할 수 있어 보안과 신뢰성이 보장됩니다.
- 로컬 배포: 모든 데이터 처리가 로컬 서버에서 이루어지므로 100% 데이터 프라이버시를 보호합니다.
- 오프라인 사용 가능: 인터넷 연결 없이도 동작하여 내부망 환경에서도 유용합니다.
- 다국어 지원: 100가지 이상의 언어 간 상호 번역을 지원하여 다양한 요구사항을 충족합니다.
빠른 시작: 5분 만에 배포하기
사전 준비
먼저, LibreTranslate 프로젝트를 로컬 시스템에 복제합니다.
git clone https://github.com/LibreTranslate/LibreTranslate
cd LibreTranslate
종속성 설치
LibreTranslate는 여러 설치 방법을 제공하지만, 가장 간단한 방식은 pip을 사용하는 것입니다.
pip으로 설치:
pip install libretranslate
또는 소스 코드로부터 설치:
pip install -e .
서비스 시작
설치 완료 후 서비스 실행은 매우 간단합니다.
libretranslate
기본적으로 서비스는 http://localhost:5000에서 시작됩니다. 이 주소로 브라우저에 접속하면 직관적인 웹 인터페이스를 확인할 수 있습니다.
서비스 요구사항에 맞게 설정하기
기본 설정 옵션
LibreTranslate는 환경 변수나 명령줄 인자를 통해 서비스를 맞춤 설정할 수 있는 다양한 옵션을 제공합니다.
# 포트 및 호스트 지정
libretranslate --host 0.0.0.0 --port 8080
# API 키 인증 활성화
libretranslate --api-keys true --require-api-key-secret my_secure_key
# 요청 빈도 제한 (초당 요청 수, 기간)
libretranslate --limit 5 --limit-period 60
언어 모델 관리
번역 품질은 언어 모델에 달려 있습니다. LibreTranslate는 Argos Translate를 백엔드로 사용하며, 필요에 따라 모델을 다운로드할 수 있습니다.
# 특정 언어 모델만 다운로드 (저장 공간 절약)
export LOAD_ONLY_LANG_CODES="en,ko"
libretranslate
# 또는 내장 스크립트 사용
python scripts/install_models.py --load_only_lang_codes en,ko
Docker 배포
컨테이너 기반 배포를 선호한다면, LibreTranslate는 완벽한 Docker 지원을 제공합니다.
# 공식 이미지 사용
docker run -ti --rm -p 5000:5000 libretranslate/libretranslate
# docker-compose 사용
docker-compose up -d
실제 사용 사례: API 호출 예시
웹 인터페이스 활용
서비스를 시작한 후 http://localhost:5000에 접속하면 간단한 웹 인터페이스가 나타납니다.
- 원문 언어와 번역 대상 언어를 선택합니다.
- 번역할 텍스트를 입력합니다.
- 번역 버튼을 클릭합니다.
- 즉시 번역 결과를 확인합니다.
API 인터페이스 호출
개발자라면 API를 통해 번역 서비스를 호출하는 경우가 더 많을 것입니다.
Python 예시:
import requests
translation_payload = {
"q": "Hello, LibreTranslate!",
"source": "en",
"target": "ko",
"format": "text"
}
response = requests.post(
"http://localhost:5000/translate",
json=translation_payload
)
if response.status_code == 200:
translation_data = response.json()
print(f"번역 결과: {translation_data['translatedText']}") # 출력: 번역 결과: 안녕하세요, 리브레트랜슬레이트!
else:
print(f"에러 발생: {response.status_code} - {response.text}")
cURL 예시:
curl -X POST "http://localhost:5000/translate" \
-H "Content-Type: application/json" \
-d '{"q":"Hello, LibreTranslate!", "source":"en", "target":"ko"}'
JavaScript 예시:
const textToTranslate = 'Hello, LibreTranslate!';
const sourceLanguage = 'en';
const targetLanguage = 'ko';
fetch('http://localhost:5000/translate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
q: textToTranslate,
source: sourceLanguage,
target: targetLanguage
})
})
.then(response => response.json())
.then(data => console.log('번역된 텍스트:', data.translatedText))
.catch(error => console.error('번역 오류:', error));
고급 기능: LibreTranslate 최대한 활용하기
일괄 번역
많은 양의 텍스트를 번역해야 한다면, 일괄 번역 기능을 활용할 수 있습니다.
import requests
source_texts = ["Hello", "Good morning", "How are you?"]
translated_results = []
for single_text in source_texts:
translation_response = requests.post(
"http://localhost:5000/translate",
json={"q": single_text, "source": "en", "target": "ko"}
)
if translation_response.status_code == 200:
translated_results.append(translation_response.json()["translatedText"])
else:
translated_results.append(f"에러: {translation_response.text}")
print(translated_results)
# 출력 예시: ['안녕하세요', '좋은 아침입니다', '어떻게 지내세요?']
파일 번역
LibreTranslate는 파일을 직접 번역하는 기능도 지원합니다.
# argos-translate-files 도구 사용
argos-translate-files --from en --to ko input.txt output.txt
언어 감지
텍스트의 언어를 확신할 수 없을 때 언어 감지 기능을 사용할 수 있습니다.
import requests
detection_payload = {"q": "Bonjour tout le monde"}
detection_response = requests.post(
"http://localhost:5000/detect",
json=detection_payload
)
if detection_response.status_code == 200:
detected_language_info = detection_response.json()
print(detected_language_info)
# 출력 예시: [{"confidence": 0.99, "language": "fr"}]
else:
print(f"언어 감지 에러: {detection_response.status_code} - {detection_response.text}")
문제 해결 및 최적화
일반적인 문제 해결
문제 1: 시작 시 종속성 누락 오류 발생
해결책: 모든 필요한 종속성이 설치되었는지 확인합니다.
pip install -r requirements.txt
문제 2: 번역 속도가 느림
해결책: 로드하는 언어 모델의 수를 제한합니다.
export LOAD_ONLY_LANG_CODES="en,ko,es,fr"
문제 3: 메모리 사용량이 너무 높음
해결책: 캐시 크기를 조정합니다.
libretranslate --cache-size 100
성능 최적화 팁
- 적절한 하드웨어 선택: 번역 서비스는 CPU와 메모리 자원을 요구하므로, 최소 2코어 4GB 메모리 이상을 권장합니다.
- 필요한 언어만 로드: 실제로 필요한 언어 모델만 로드하면 메모리 사용량을 크게 줄일 수 있습니다.
- 캐시 활용: 캐시를 활성화하면 반복되는 번역 작업의 속도를 현저히 향상시킬 수 있습니다.
- 모델 정기 업데이트: 언어 모델은 지속적으로 개선되므로, 주기적인 업데이트를 통해 더 나은 번역 품질을 얻을 수 있습니다.
운영 환경 배포
Gunicorn 활용
운영 환경에서는 Gunicorn을 WSGI 서버로 사용하는 것이 좋습니다.
gunicorn "libretranslate:main()" -b 0.0.0.0:5000 -w 4
리버스 프록시 설정 (Nginx)
Nginx를 리버스 프록시로 사용하는 경우, 다음과 같이 설정할 수 있습니다.
server {
listen 80;
server_name translate.yourdomain.com;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
systemd를 이용한 서비스 관리
systemd 서비스 파일(/etc/systemd/system/libretranslate.service)을 생성하여 서비스를 관리할 수 있습니다.
[Unit]
Description=LibreTranslate Machine Translation Service
After=network.target
[Service]
User=libretranslate_user # 실제 사용자명으로 변경
WorkingDirectory=/opt/libretranslate # LibreTranslate 설치 경로로 변경
ExecStart=/usr/local/bin/libretranslate --host 0.0.0.0 --port 5000
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
서비스 파일 생성 후 다음 명령어로 서비스를 활성화하고 시작합니다:
sudo systemctl daemon-reload
sudo systemctl enable libretranslate
sudo systemctl start libretranslate
모니터링 및 유지보수
상태 확인
LibreTranslate는 상태 확인(Health Check) 엔드포인트를 제공합니다.
curl http://localhost:5000/health
지원 언어 목록 확인
curl http://localhost:5000/languages
번역 통계 모니터링
프로젝트에는 간단한 통계 기능이 내장되어 있어 API를 통해 사용 현황을 파악할 수 있습니다.
모범 사례 요약
- 필요에 따른 배포: 실제 요구사항에 맞춰 언어 모델을 선택하여 불필요한 자원 소모를 방지합니다.
- 정기적인 업데이트: LibreTranslate와 언어 모델을 최신 버전으로 유지하여 최적의 성능을 확보합니다.
- 적절한 설정: 서버 자원에 맞춰 캐시 크기 및 워커 프로세스 수를 조절합니다.
- 데이터 백업: 설정 파일과 사용자 정의 사전을 정기적으로 백업합니다.
- 보안 우선: 운영 환경에서는 API 키 인증을 반드시 활성화합니다.