
개발자가 로컬(내 컴퓨터)에서 만든 프로그램은 잘 돌아가지만, 막상 서버에 올리면 이런 문제가 생긴다:
pandas 2.x 버전, 서버는 pandas 1.x 버전즉, 개발자들 사이에서 흔히 말하는 “내 컴퓨터에선 잘 됐는데요?” 현상이 생김.
위에서 언급한 문제를 해결하기 위해 나온 게 컨테이너(Container)라는 개념이다. 컨테이너는 쉽게 말하면 “내 프로그램과 그 프로그램이 돌아가는 환경을 통째로 박스에 담는 것”이다.
그러면 이 컨테이너만 서버에 올리면, 환경 걱정 없이 똑같이 실행된다.
즉, 개발 환경과 운영 환경의 차이를 없애주는 기술이 컨테이너화(Containerization)이다!
여기서 컨테이너를 만들고 관리할 수 있는 가장 대표적인 도구가 바로 도커(Docker)이며, “개발자가 만든 프로그램을 어디서든 똑같이 실행할 수 있도록 해주는 컨테이너 기술의 표준 도구”이다.
개발자는 Dockerfile이라는 설계도를 작성해서 이미지를 만들고, 서버에서는 그 이미지를 실행만 하면 된다.
# 1) Python 기반 이미지 사용 (슬림 버전으로 가볍게)
FROM python:3.10-slim
# 2) 컨테이너 안 작업 디렉토리 설정
WORKDIR /app
# 3) 필요 패키지 설치를 위해 시스템 의존성 추가
RUN apt-get update && apt-get install -y \
libpq-dev gcc \
&& rm -rf /var/lib/apt/lists/*
# 4) requirements.txt 복사 및 설치
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 5) 소스 코드 복사
COPY . .
# 6) 장고에서 사용하는 포트 (Gunicorn/Runserver)
EXPOSE 8000
# 7) Gunicorn으로 앱 실행 (WSGI 방식 권장)
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "myproject.wsgi:application"]
Django==4.2
gunicorn==21.2.0
psycopg2-binary==2.9.9 # PostgreSQL을 쓴다면 필요
1) 이미지 빌드: docker build -t django-app .
2) 컨테이너 실행: docker run -p 8000:8000 django-app
3) 브라우저에서 확인: http://localhost:8000

VM (Virtual Machine, 가상머신)은 물리 서버 위에 하이퍼바이저(Hypervisor)를 이용해 완전한 운영체제를 가상으로 실행하는 기술로 다음과 같은 특징이 있음:
장점은 완벽한 격리, 다양한 OS 실행 가능(리눅스 위에 윈도우도 가능)하고,
무겁고 느림, 리소스 낭비 발생이라는 단점이 있다.
즉, 가상머신(VM)과 컨테이너(Container)는 애플리케이션 실행 환경을 분리한다는 점에서는 비슷하지만, 동작 방식과 효율성이 크게 다르다.
| 구분 | VM | Container |
|---|---|---|
| OS 포함 여부 | 전체 OS 포함 | 앱 실행 환경만 포함 |
| 부팅 속도 | 느림(분 단위) | 빠름(초 단위) |
| 무게 | 무거움 | 가벼움 |
| 격리 수준 | 높음 | 비교적 낮음 |
| 대표 기술 | VirtualBox, VMware | Docker, Kubernetes |
핵심 차이점: VM은 “OS 단위로 가상화”, 컨테이너는 “앱 실행 환경만 가상화”