LibreTranslate: 자체 호스팅 가능한 오픈소스 번역 API 배포 및 활용 가이드

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에 접속하면 간단한 웹 인터페이스가 나타납니다.

  1. 원문 언어와 번역 대상 언어를 선택합니다.
  2. 번역할 텍스트를 입력합니다.
  3. 번역 버튼을 클릭합니다.
  4. 즉시 번역 결과를 확인합니다.

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

성능 최적화 팁

  1. 적절한 하드웨어 선택: 번역 서비스는 CPU와 메모리 자원을 요구하므로, 최소 2코어 4GB 메모리 이상을 권장합니다.
  2. 필요한 언어만 로드: 실제로 필요한 언어 모델만 로드하면 메모리 사용량을 크게 줄일 수 있습니다.
  3. 캐시 활용: 캐시를 활성화하면 반복되는 번역 작업의 속도를 현저히 향상시킬 수 있습니다.
  4. 모델 정기 업데이트: 언어 모델은 지속적으로 개선되므로, 주기적인 업데이트를 통해 더 나은 번역 품질을 얻을 수 있습니다.

운영 환경 배포

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를 통해 사용 현황을 파악할 수 있습니다.

모범 사례 요약

  1. 필요에 따른 배포: 실제 요구사항에 맞춰 언어 모델을 선택하여 불필요한 자원 소모를 방지합니다.
  2. 정기적인 업데이트: LibreTranslate와 언어 모델을 최신 버전으로 유지하여 최적의 성능을 확보합니다.
  3. 적절한 설정: 서버 자원에 맞춰 캐시 크기 및 워커 프로세스 수를 조절합니다.
  4. 데이터 백업: 설정 파일과 사용자 정의 사전을 정기적으로 백업합니다.
  5. 보안 우선: 운영 환경에서는 API 키 인증을 반드시 활성화합니다.

태그: LibreTranslate 오픈소스 번역 API 자체 호스팅 기계 번역

7월 9일 16:52에 게시됨