언어 번역 앱 만들기

언어 번역 앱 만들기

이 가이드는 Docker를 사용해 NLP 작업용 언어 번역 모델을 배포하는 방법을 보여줘요.

출처: 문서

본문

개요

이 가이드는 언어 번역 어플리케이션을 만들고 실행하는 과정을 안내해요. Python과 Googletrans를 사용해 어플리케이션을 만든 다음 Docker로 환경을 설정하고 어플리케이션을 실행할 거예요.

이 어플리케이션은 언어 번역을 위한 Googletrans 라이브러리의 간단하지만 실용적인 사용을 보여주며, 기본적인 Python과 Docker 개념을 소개해요.

Googletrans는 Google Translate API를 구현하는 무료 무제한 Python 라이브러리예요. Google Translate Ajax API를 사용해 detect 와 translate 같은 메서드를 호출해요.

사전 요구사항

  • 최신 버전의 Docker Desktop 을 설치했어야 해요. Docker는 정기적으로 새 기능을 추가하므로 이 가이드의 일부 부분은 최신 버전의 Docker Desktop에서만 작동할 수 있어요.
  • Git 클라이언트 가 있어야 해요. 이 섹션의 예제는 명령줄 기반 Git 클라이언트를 사용하지만, 어떤 클라이언트든 사용할 수 있어요.

샘플 어플리케이션 가져오기

터미널을 열고 다음 명령으로 샘플 어플리케이션의 리포지토리를 클론해주세요.

$ git clone https://github.com/harsh4870/Docker-NLP.git

리포지토리를 클론했는지 확인해주세요.

Docker-NLP 디렉터리에 다음 파일이 보여야 해요.

01_sentiment_analysis.py
02_name_entity_recognition.py
03_text_classification.py
04_text_summarization.py
05_language_translation.py
entrypoint.sh
requirements.txt
Dockerfile
README.md

어플리케이션 코드 탐구

어플리케이션의 소스 코드는 Docker-NLP/05_language_translation.py 파일에 있어요. 텍스트 또는 코드 편집기에서 05_language_translation.py 를 열어 다음 단계로 내용을 탐구하세요.

필요한 라이브러리 가져오기

from googletrans import Translator

이 줄은 googletrans 에서 Translator 클래스를 가져와요. Googletrans는 Google Translate의 AJAX API에 대한 인터페이스를 제공하는 Python 라이브러리예요.

메인 실행 블록 지정

if __name__ == "__main__":

이 Python 관용구는 이 스크립트가 메인 프로그램일 때만 다음 코드 블록이 실행되게 보장해요. 스크립트가 독립형 프로그램이자 가져온 모듈로 기능할 수 있게 유연성을 제공해요.

연속 입력을 위한 무한 루프 만들기

    while True:
        input_text = input("Enter the text for translation (type 'exit' to end): ")
        if input_text.lower() == 'exit':
            print("Exiting...")
            break

여기서 무한 루프를 만들어 지속적으로 텍스트 입력을 받아 상호작용성을 보장해요. exit 을 입력하면 루프가 중단되어 어플리케이션 흐름을 효과적으로 제어할 수 있어요.

Translator 인스턴스 만들기

    translator = Translator()

이렇게 Translator 클래스의 인스턴스를 만들어 번역을 수행해요.

텍스트 번역하기

    translated_text = translator.translate(input_text, dest='fr').text

여기서 사용자 입력으로 translator.translate 메서드를 호출해요. dest='fr' 인자는 번역 대상 언어가 프랑스어임을 지정해요. .text 속성이 번역된 문자열을 가져와요. 사용 가능한 언어 코드에 대한 자세한 내용은 Googletrans 문서 를 참고하세요.

원본과 번역 텍스트 출력

    print(f"Original Text: {input_text}")
    print(f"Translated Text: {translated_text}")

이 두 줄은 사용자가 입력한 원본 텍스트와 번역된 텍스트를 출력해요.

requirements.txt 만들기

샘플 어플리케이션에는 어플리케이션이 가져오는 필요한 모듈을 지정하는 requirements.txt 파일이 이미 포함되어 있어요. 코드 또는 텍스트 편집기에서 requirements.txt 를 열어 내용을 탐구하세요.

...
# 05 language_translation
googletrans==4.0.0-rc1

언어 번역 어플리케이션에는 googletrans 만 필요해요.

어플리케이션 환경 탐구

Docker로 컨테이너에서 어플리케이션을 실행할 거예요. Docker는 어플리케이션을 컨테이너화해 일관되고 격리된 실행 환경을 제공해요. 즉 어플리케이션이 기본 시스템 차이와 무관하게 Docker 컨테이너 안에서 의도한 대로 동작한다는 뜻이에요.

컨테이너에서 어플리케이션을 실행하려면 Dockerfile이 필요해요. Dockerfile은 이미지를 조립하기 위해 명령줄에서 호출할 모든 명령을 담은 텍스트 문서예요. 이미지는 Docker 컨테이너를 만들기 위한 지침이 있는 읽기 전용 템플릿이에요.

샘플 어플리케이션에는 Dockerfile 이 이미 포함되어 있어요. 코드 또는 텍스트 편집기에서 Dockerfile 을 열어 내용을 탐구하세요. 다음 단계가 Dockerfile 의 각 부분을 설명해요. 자세한 내용은 Dockerfile 참조 를 참고하세요.

베이스 이미지 지정

FROM python:3.8-slim

이 명령이 빌드의 기초를 설정해요. python:3.8-slim 은 크기와 속도에 최적화된 Python 3.8 이미지의 경량 버전이에요. 이 slim 이미지를 사용하면 전체 Docker 이미지 크기가 줄어 더 빠른 다운로드와 더 적은 보안 취약점 노출면을 가능하게 해요. 이는 전체 표준 Python 이미지가 필요하지 않을 수 있는 Python 기반 어플리케이션에 특히 유용해요.

작업 디렉터리 설정

WORKDIR /app

WORKDIR 은 Docker 이미지 안의 현재 작업 디렉터리를 설정해요. 이를 /app 으로 설정하면 Dockerfile 의 모든 후속 명령( COPY 와 RUN 같은)이 이 디렉터리에서 실행되게 보장해요. 모든 어플리케이션 관련 파일이 특정 디렉터리에 포함되므로 Docker 이미지를 구성하는 데도 도움이 돼요.

요구사항 파일을 이미지로 복사

COPY requirements.txt /app

COPY 명령은 requirements.txt 파일을 내 로컬 머신에서 Docker 이미지로 전송해요. 이 파일은 어플리케이션이 필요한 모든 Python 의존성을 나열해요. 컨테이너로 복사하면 다음 명령( RUN pip install )이 이미지 환경 안에서 이러한 의존성을 설치할 수 있게 해줘요.

이미지에 Python 의존성 설치

RUN pip install --no-cache-dir -r requirements.txt

이 줄은 Python의 패키지 설치 프로그램인 pip 를 사용해 requirements.txt 에 나열된 패키지를 설치해요. --no-cache-dir 옵션은 캐시를 비활성화해 불필요한 캐시 데이터를 저장하지 않음으로써 Docker 이미지 크기를 줄여요.

추가 명령 실행

RUN python -m spacy download en_core_web_sm

이 단계는 spaCy 라이브러리가 필요한 NLP 어플리케이션에 특화돼 있어요. spaCy용 소형 영어 모델인 en_core_web_sm 모델을 다운로드해요. 이 앱에는 필요 없지만 이 Dockerfile을 사용할 수도 있는 다른 NLP 어플리케이션과의 호환성을 위해 포함돼 있어요.

어플리케이션 코드를 이미지로 복사

COPY *.py /app
COPY entrypoint.sh /app

이 명령들은 Python 스크립트와 entrypoint.sh 스크립트를 이미지의 /app 디렉터리로 복사해요. 컨테이너가 어플리케이션을 실행하려면 이 스크립트가 필요하므로 이는 중요해요. entrypoint.sh 스크립트는 컨테이너 안에서 어플리케이션이 어떻게 시작되는지를 결정하기 때문에 특히 중요해요.

entrypoint.sh 스크립트에 권한 설정

RUN chmod +x /app/entrypoint.sh

이 명령은 entrypoint.sh 의 파일 권한을 수정해 실행 가능하게 만들어요. Docker 컨테이너가 이 스크립트를 실행해 어플리케이션을 시작할 수 있게 하려면 이 단계가 필요해요.

엔트리 포인트 설정

ENTRYPOINT ["/app/entrypoint.sh"]

ENTRYPOINT 지시문은 컨테이너가 entrypoint.sh 를 기본 실행 파일로 실행하도록 구성해요. 즉 컨테이너가 시작되면 자동으로 스크립트를 실행해요.

코드 또는 텍스트 편집기에서 열어 entrypoint.sh 스크립트를 탐구할 수 있어요. 샘플이 여러 어플리케이션을 포함하므로 스크립트는 컨테이너가 시작될 때 어떤 어플리케이션을 실행할지 지정할 수 있게 해줘요.

어플리케이션 실행하기

Docker로 어플리케이션을 실행하려면:

이미지 빌드

터미널에서 Dockerfile 이 있는 디렉터리 안에서 다음 명령을 실행해주세요.

$ docker build -t basic-nlp .

이 명령의 분석:

  • docker build : Dockerfile과 컨텍스트에서 Docker 이미지를 빌드하는 기본 명령. 컨텍스트는 보통 지정된 위치의 파일 집합이며, 흔히 Dockerfile이 포함된 디렉터리예요.
  • -t basic-nlp : 이미지에 태그를 다는 옵션. -t 플래그는 태그를 의미해요. 이미지에 이름을 할당하며, 이 경우 basic-nlp 예요. 태그는 나중에 이미지를 참조하는 편리한 방법이며, 특히 레지스트리에 푸시하거나 컨테이너를 실행할 때 유용해요.
  • . : 명령의 마지막 부분으로 빌드 컨텍스트를 지정해요. 마침표( . )는 현재 디렉터리를 의미해요. Docker는 이 디렉터리에서 Dockerfile을 찾을 거예요. 빌드 컨텍스트(이 경우 현재 디렉터리)가 빌드를 가능하게 하기 위해 Docker 데몬으로 전송돼요. 지정된 디렉터리의 모든 파일과 하위 디렉터리를 포함해요.

자세한 내용은 docker build CLI 참조 를 참고하세요.

Docker는 이미지를 빌드하면서 여러 로그를 콘솔에 출력해요. 의존성을 다운로드하고 설치하는 것을 볼 수 있을 거예요. 네트워크 연결에 따라 몇 분이 걸릴 수 있어요. Docker에는 캐싱 기능이 있어 후속 빌드는 더 빨라질 수 있어요. 완료되면 콘솔이 프롬프트로 돌아와요.

이미지를 컨테이너로 실행

터미널에서 다음 명령을 실행해주세요.

$ docker run -it basic-nlp 05_language_translation.py

이 명령의 분석:

  • docker run : Docker 이미지에서 새 컨테이너를 실행하는 기본 명령.
  • -it : 두 옵션의 결합.
    • -i 또는 --interactive : 연결되지 않아도 표준 입력(STDIN)을 열어 유지해요. 컨테이너가 포그라운드에서 실행되고 대화형이 되게 해줘요.
    • -t 또는 --tty : 의사 터미널을 할당해 본질적으로 명령 프롬프트나 셸 같은 터미널을 시뮬레이션해요. 컨테이너 안의 어플리케이션과 상호작용할 수 있게 해줘요.
  • basic-nlp : 컨테이너를 만드는 데 사용할 Docker 이미지의 이름을 지정해요. 이 경우 docker build 명령으로 만든 basic-nlp 이미지예요.
  • 05_language_translation.py : Docker 컨테이너 안에서 실행하려는 스크립트. entrypoint.sh 스크립트에 전달되어 컨테이너가 시작될 때 실행돼요.

자세한 내용은 docker run CLI 참조 를 참고하세요.

참고: Windows 사용자는 컨테이너를 실행할 때 오류가 발생할 수 있어요. entrypoint.sh 의 줄 끝이 CRLF( \r\n )가 아닌 LF( \n )인지 확인한 후 이미지를 재빌드하세요. 자세한 내용은 예상치 못한 구문 오류 피하기, 컨테이너 파일에는 Unix 스타일 줄 끝 사용 을 참고하세요.

컨테이너가 시작된 후 콘솔에 다음이 보일 거예요.

Enter the text for translation (type 'exit' to end):

어플리케이션 테스트

텍스트를 입력해 번역을 받아보세요.

Enter the text for translation (type 'exit' to end): Hello, how are you doing?
Original Text: Hello, how are you doing?
Translated Text: Bonjour comment allez-vous?

요약

이 가이드에서 언어 번역 어플리케이션을 만들고 실행하는 방법을 배웠어요. Python과 Googletrans로 어플리케이션을 만들고 Docker로 환경을 설정하고 실행하는 방법을 배웠어요.

관련 정보:

  • Docker CLI 참조
  • Dockerfile 참조
  • Googletrans
  • Python 문서

다음 단계

더 많은 자연어 처리 가이드 를 탐구해보세요.

더 알아보기 (Learn more)

  • Docker CLI 참조
  • Dockerfile 참조
  • Googletrans