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

이 가이드에서는 간단한 FastAPI 애플리케이션을 컨테이너화하는 방법을 단계별로 안내해 드립니다. 불필요한 내용은 없고, 오늘 바로 여러분의 프로젝트에 적용할 수 있는 실질적인 지식만 제공합니다. 시작해 볼까요?
Python 애플리케이션을 컨테이너화해야 하는 이유는?
어떻게 하는지에 앞서, 이유를 먼저 알아보겠습니다.
다양한 환경에서의 일관성: "내 컴퓨터에서는 작동한다"는 생각은 이제 옛말이 되었습니다. 컨테이너를 사용하면 앱이 어디에서나 동일하게 실행된다는 보장이 있습니다.
격리: 각 컨테이너는 자체 종속성을 가지므로 다른 애플리케이션이나 시스템 라이브러리와의 충돌을 피할 수 있습니다.
이식성: Docker가 실행되는 곳이라면 노트북부터 AWS, Azure 또는 모든 클라우드 공급자까지 어디에서나 애플리케이션을 배포할 수 있습니다.
확장성: 컨테이너는 가볍고 빠르게 시작할 수 있으므로 필요에 따라 서비스를 확장하거나 축소하는 데 적합합니다.
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
위의 명령은:
현재 디렉토리에서 currency-api로 이름이 지정된 도커(Docker) 이미지를 빌드합니다 (끝의 점에 주의하세요)
이 이미지에서 컨테이너를 실행하고 호스트의 포트 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 파이프라인을 살펴보고 새로운 컨테이너화 기술을 확장해 보세요!