top of page

기존 파이썬(Python) 앱을 컨테이너화하는 이유 및 방법

파이썬(Python) 앱을 더욱 포터블하고, 일관성 있고, 배포하기 쉬운 상태로 만드는 방법을 고민하고 계셨다면 이 글이 도움이 될 것입니다. 컨테이너화는 단순한 유행어가 아닙니다. 개발 워크플로우를 즉시 향상시켜 주는 실용적인 기술입니다.


Python & Docker

이 가이드에서는 간단한 FastAPI 애플리케이션을 컨테이너화하는 방법을 단계별로 안내해 드립니다. 불필요한 내용은 없고, 오늘 바로 여러분의 프로젝트에 적용할 수 있는 실질적인 지식만 제공합니다. 시작해 볼까요?



Python 애플리케이션을 컨테이너화해야 하는 이유는?

어떻게 하는지에 앞서, 이유를 먼저 알아보겠습니다.


  1. 다양한 환경에서의 일관성: "내 컴퓨터에서는 작동한다"는 생각은 이제 옛말이 되었습니다. 컨테이너를 사용하면 앱이 어디에서나 동일하게 실행된다는 보장이 있습니다.

  2. 격리: 각 컨테이너는 자체 종속성을 가지므로 다른 애플리케이션이나 시스템 라이브러리와의 충돌을 피할 수 있습니다.

  3. 이식성: Docker가 실행되는 곳이라면 노트북부터 AWS, Azure 또는 모든 클라우드 공급자까지 어디에서나 애플리케이션을 배포할 수 있습니다.

  4. 확장성: 컨테이너는 가볍고 빠르게 시작할 수 있으므로 필요에 따라 서비스를 확장하거나 축소하는 데 적합합니다.

  5. DevOps 친화적: 컨테이너는 최신 CI/CD 파이프라인에 완벽하게 맞아 지속적인 배포가 더욱 원활해집니다.


이제 이점을 이해하셨으니, 실제 Python 애플리케이션을 컨테이너화해 보겠습니다! 컨테이너화에 가장 적합한 Docker를 사용하겠습니다.


▶️ 시작하기 전에 : 코딩을 위해 Python과 Docker를 설치하세요.


Python FastAPI 애플리케이션을 컨테이너화하는 방법

통화 간의 환율을 계산하는 간단한 FastAPI 앱을 빌드하고 컨테이너화해 보겠습니다.


1단계: main.py 파일 만들기

먼저 프로젝트 디렉토리를 만들어 보겠습니다.

$ mkdir currency-api
$ cd currency-api

다음으로, 가상 환경을 만들고 활성화합니다.

$ python3 -m venv venv
$ source venv/bin/activate  # Windows에서는: venv\Scripts\activate

그런 다음, 필요한 패키지를 설치하세요.

$ pip3 install fastapi uvicorn

아래의 코드를 사용하여 main.py 파일을 만듭니다 .


이렇게 하면 금액, 소스 통화, 대상 통화를 입력받아 유효성을 검사하는 /convert API 엔드포인트가 생성됩니다 . 그런 다음 모의 환율을 사용하여 금액을 변환하고 결과를 구조화된 JSON 형식으로 반환합니다.


2단계: requirements.txt 파일 만들기

다음으로 프로젝트 루트 폴더에 requirements.txt 파일을 만듭니다.

fastapi==0.115.12
uvicorn==0.34.2

이 파일은 컨테이너가 일관되게 빌드되도록 종속성의 특정 버전을 고정합니다.



3단계: Dockerfile 만들기

이제 핵심 이벤트인 Dockerfile을 만들어 보겠습니다. 이는 컨테이너화 프로세스의 핵심 단계입니다.


Dockerfile의 내용은 다음과 같습니다.


이 Dockerfile이 무엇을 하는지 살펴보겠습니다.


  • 기본 이미지: 프로덕션에 적합한 가벼운 python:3.11-slim Python 이미지 로 시작합니다 .

  • 작업 디렉토리 설정: 컨테이너 내부에 /app 작업 디렉토리(WORKDIR)를 만들고 설정합니다.

  • 종속성 설치: 모든 요구 사항을 설치합니다. 이는 Docker의 레이어 캐싱을 활용하므로 앱 코드를 변경해도 종속성이 완전히 다시 설치되지 않습니다.

  • 애플리케이션 코드 복사: COPY . . 코드를 컨테이너에 복사합니다.

  • 포트 노출: EXPOSE 8000 Docker에 애플리케이션이 사용하는 포트를 알려줍니다.

  • 시작 명령: 마지막으로 Uvicorn을 사용하여 컨테이너 환경에 적합한 구성으로 FastAPI 앱을 실행합니다.


4단계: .dockerignore 파일 만들기

컨테이너를 간소하게 유지하려면 .dockerignore 파일을 추가할 수 있습니다 .


이 파일은 프로젝트의 .gitignore 파일과 비슷합니다. 불필요한 파일이 컨테이너 환경에 복사되는 것을 방지합니다.


이렇게 하면 컨테이너 사이즈가 작아지고 로컬 개발 파일과 관련된 잠재적인 문제가 방지됩니다.


다음은 .dockerignore 파일의 예입니다 .



5단계: 컨테이너 빌드 및 실행

이제 컨테이너화된 애플리케이션을 빌드하고 실행해 보겠습니다.

# Build the Docker image
$ docker build -t currency-api .

# Run the container
$ docker run -p 8000:8000 currency-api

위의 명령은:


  1. 현재 디렉토리에서 currency-api로 이름이 지정된 도커(Docker) 이미지를 빌드합니다 (끝의 점에 주의하세요)

  2. 이 이미지에서 컨테이너를 실행하고 호스트의 포트 8000을 컨테이너의 포트 8000에 매핑합니다.


이제 FastAPI 앱이 컨테이너에서 실행됩니다! http://localhost:8000 주소로 앱에 접속할 수 있습니다.



6단계: 컨테이너화된 API 테스트

API 엔드포인트를 테스트해 보세요. cURL을 사용하여 다음과 같이 API의 /convert 엔드포인트로 환전 요청을 전송해 보겠습니다.

$ curl "http://localhost:8000/convert?amount=100&from_currency=USD&to_currency=EUR"
Output:
{
	"from_currency": "USD",
	"to_currency": "EUR",
	"amount": 100.0,
	"converted": 91.0,
	"rate": 0.91,
}


마무리

이제 Python FastAPI 애플리케이션이 컨테이너화되어 본격적으로 사용할 준비가 되었습니다. 이 접근 방식은 FastAPI뿐만 아니라 거의 모든 Python 애플리케이션에 적용됩니다. Flask, Django 또는 다른 Python 프레임워크를 컨테이너화하는 경우에도 동일한 원칙이 적용됩니다.


컨테이너화의 진정한 가치는 다양한 환경에 배포할 때 발휘됩니다. 이제 컨테이너화된 앱을 개발, 스테이징 또는 프로덕션 환경에 안전하게 푸시할 수 있으며, 어디에서든 일관되게 작동할 것입니다.


다음 스텝은 무엇일까요? 다중 컨테이너 애플리케이션을 위한 도커 컴포즈(Docker Compose), 쿠버네티스(Kubernetes)를 활용한 컨테이너 오케스트레이션, CI/CD 파이프라인을 살펴보고 새로운 컨테이너화 기술을 확장해 보세요!

pngegg (11)_result.webp

<Raank:랑크 /> 구독 하기 : Subscribe

감사합니다! : Thanks for submitting!

©2024 by <Raank:랑크 /> Knowledge is Power

  • Linkedin
  • Knowledge Arcadia - Icon 8c
  • Raanktone - Icon 16 - 1
  • Qubitronix
  • Naver Blog
bottom of page