# Dockerfile

# 1. 베이스 이미지 설정
# 공식 Python 3.9 슬림 버전을 사용하여 이미지 크기를 최적화합니다.
FROM python:3.9-slim

# 2. 작업 디렉터리 설정
# 컨테이너 내에서 작업이 수행될 기본 경로를 설정합니다.
WORKDIR /app

# 3. 환경 변수 설정
# 파이썬이 .pyc 파일을 생성하지 않도록 하고, 버퍼링을 비활성화하여 로그가 즉시 출력되도록 합니다.
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# 4. 의존성 설치
# 먼저 의존성 정의 파일만 복사하여 설치합니다.
# 이렇게 하면 소스 코드가 변경되어도 의존성이 동일한 경우 Docker 캐시를 활용하여 빌드 속도를 높일 수 있습니다.
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt

# 5. 애플리케이션 코드 복사
# 로컬의 app 디렉터리에 있는 모든 소스 코드를 컨테이너의 /app/app 디렉터리로 복사합니다.
COPY ./app /app/app

# 6. 포트 노출
# 애플리케이션이 컨테이너의 8000번 포트에서 실행될 것임을 명시합니다.
EXPOSE 8000

# 7. 서버 실행 명령어
# Gunicorn을 사용하여 FastAPI 애플리케이션을 실행합니다.
# -w 4: 4개의 워커 프로세스를 사용합니다. (CPU 코어 수에 따라 조절)
# -k uvicorn.workers.UvicornWorker: Uvicorn 호환 워커 클래스를 사용합니다.
# app.main:app: app/main.py 파일의 app 인스턴스를 의미합니다.
# -b 0.0.0.0:8000: 모든 네트워크 인터페이스의 8000번 포트에 바인딩합니다.
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "app.main:app", "-b", "0.0.0.0:8000"] 