본 문서는 Google Cloud Platform(GCP)의 Compute Engine을 기반으로, Docker 환경에서 PyTorch로 학습된 딥러닝 모델을 배포하고, Flask를 활용해 REST API 형태로 모델을 서비스하는 과정을 단계별로 정리한 실습 기록입니다.
모델 용량이 큰 .pt 파일은 GitHub에 직접 포함시키지 않고, Google Drive를 통한 외부 다운로드 방식으로 처리하였습니다.
1. GCP 인스턴스 구성 및 방화벽 설정
- GCP Console 접속 후, Compute Engine > VM 인스턴스 생성
- Ubuntu 22.04 LTS 또는 Debian 12 계열 이미지 선택
- 인스턴스 생성 시 "방화벽" 항목에서 HTTP, HTTPS 트래픽 허용 체크
- VM 생성 후, VPC 네트워크 > 방화벽 규칙으로 이동하여 포트 5000을 다음과 같이 개방
- 방향: 인그레스
- 대상: 모든 인스턴스
- 소스 IP 범위: 0.0.0.0/0
- 포트: 5000
- 적용 대상: 해당 VM 인스턴스

2. Docker 및 시스템 의존성 설치
sudo apt update
sudo apt install -y docker.io python3 python3-pip ffmpeg libsndfile1
sudo systemctl enable docker
3. 프로젝트 코드 및 모델 준비
3.1 GitHub에서 프로젝트 클론
git clone https주소
3.2 모델 다운로드를 위한 gdown 설치
pip3 install gdown --break-system-packages
gdown를 설치하실 때는 python를 설치하셔야합니다!
4. 모델 다운로드 (Google Drive)
Google Drive에 업로드한 .pt 모델을 gdown으로 다운로드합니다.
mkdir -p KoBERTModel/model
~/.local/bin/gdown [KoBERT 모델 파일 ID] -O KoBERTModel/model/train.pt
mkdir -p deepvoice_detection/model
~/.local/bin/gdown [딥보이스 모델 파일 ID] -O deepvoice_detection/model/train.pt
파일 ID는 Google Drive 공유 링크에서 추출합니다.
예시: https://drive.google.com/file/d/1abcXYZ.../view → ID는 1abcXYZ...
5. Dockerfile 작성 및 이미지 빌드
FROM python:3.9-slim
WORKDIR /app
RUN apt-get update && apt-get install -y ffmpeg libsndfile1 && apt-get clean
RUN pip install --upgrade pip
RUN pip install flask flask-cors torch torchaudio transformers gdown
COPY . .
CMD ["python", "server.py"]
docker build -t voicephishing-app .
docker run -d -p 5000:5000 --name voicephishing-container voicephishing-app
6. 모델 파일 컨테이너로 복사
docker cp KoBERTModel/model/train.pt voicephishing-container:/app/KoBERTModel/model/train.pt
docker cp deepvoice_detection/model/train.pt voicephishing-container:/app/deepvoice_detection/model/train.pt
7. 컨테이너 재시작
docker restart voicephishing-container
마무리
본 실습을 통해 GCP 환경에서 Docker를 활용해 PyTorch 기반 딥러닝 모델을 REST API 형태로 안정적으로 서비스하는 전체 과정을 구성하였습니다.
Google Drive 기반의 외부 모델 저장소와 gdown을 이용한 모델 다운로드 방식은 대용량 모델 파일 관리에 매우 효과적이며,
Flask 기반 API 구조는 실제 서비스 및 실시간 탐지 시스템의 기반으로 확장할 수 있습니다.
향후 HTTPS 적용, JWT 인증, Swagger 문서화, FastAPI 마이그레이션 등으로 확장 가능성을 고려할 수 있습니다.
'Backend & Infra > Docker' 카테고리의 다른 글
| 로컬에서 프로젝트(PDFMASK) 서비스를 Docker로 실행하는 방법 (0) | 2025.11.26 |
|---|---|
| Docker 명령어 정리 (자주 사용하던 명령어_2) (1) | 2025.06.04 |
| GCP 서버에 (Flask + Gunicorn) + KoBERT + Whisper 기반 음성피싱 탐지 시스템 구축기 (1) | 2025.05.27 |
| GCP + Docker 기반 Flask API 서버 배포 중 발생한 3가지 핵심 문제와 해결 방법 (0) | 2025.05.23 |
| Docker를 사용할 때 가장 자주 쓰는 명령어 정리 (0) | 2025.05.20 |