Docker 컨테이너 기반 MLOps 환경. LightGBM/PyTorch를 사용한 자금예측 모델의 학습·검증·서빙을 지원합니다.
┌─────────────────────────────────────────────────────────┐
│ Nginx Reverse Proxy (:80) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │JupyterHub│ │ MLflow │ │ FastAPI │ │ MinIO │ │
│ │ (:8000) │ │ (:5000) │ │ (:8080) │ │(:9000/01)│ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ └─────────────┴────────────┴─────────────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ PostgreSQL │ │
│ │ (:5432) │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────┘
| 서비스 | 포트 | 설명 |
|---|---|---|
| JupyterHub | 8000 | 다중 사용자 노트북 환경 (Colab 대체) + Jupyter AI (LLM 연동) |
| MLflow | 5000 | 실험 관리, 모델 레지스트리 |
| FastAPI | 8080 | 모델 서빙 REST API |
| MinIO | 9000/9001 | 오브젝트 스토리지 (데이터 캐시, 모델 아티팩트) |
| PostgreSQL | 5432 | 메타데이터 저장소 |
| Nginx | 80 | 리버스 프록시, 통합 진입점 |
- Windows 11
- Docker Desktop (WSL2 백엔드)
- Git
git clone https://github.com/your-username/mlops.git
cd mlopsCopy-Item .env.example .env
# .env 파일을 편집하여 API 키 등 설정# PowerShell 스크립트 사용
.\scripts\start-dev.ps1
# 또는 직접 실행
docker compose -f docker-compose-dev.yml up -d.\scripts\start-prod.ps1
# 또는 직접 실행
docker compose up -d| 서비스 | URL |
|---|---|
| JupyterHub | http://localhost:8000 |
| MLflow | http://localhost:5000 |
| API Docs | http://localhost:8080/docs |
| MinIO Console | http://localhost:9001 |
MLops/
├── docker/
│ ├── Dockerfile.train # 학습용 이미지 (CPU/GPU 자동 선택)
│ ├── Dockerfile.jupyter # JupyterHub + Jupyter AI
│ └── Dockerfile.mlflow # MLflow 서버
├── docker-compose.yml # 운영 환경 (GPU 모드)
├── docker-compose-dev.yml # 개발 환경 (CPU 모드)
├── Jenkinsfile # CI/CD 파이프라인
├── src/
│ ├── data/
│ │ ├── extract.py # 데이터 수집 (MinIO/API/DB)
│ │ └── preprocess.py # 전처리 & 피처 엔지니어링
│ ├── models/
│ │ ├── train.py # 모델 학습 (LightGBM/PyTorch)
│ │ ├── evaluate.py # 모델 평가
│ │ └── predict.py # 예측
│ ├── utils/
│ │ ├── config.py # 설정 관리
│ │ └── db_connector.py # 데이터 소스 연결 (MinIO/API/DB)
│ └── api/
│ └── main.py # FastAPI 서빙
├── configs/
│ ├── model_config.yaml # 모델 하이퍼파라미터
│ └── db_config.yaml # DB 연결 설정
├── notebooks/
│ └── 01_eda_fund_prediction.ipynb # 탐색적 분석 노트북
├── tests/ # 테스트 코드
├── nginx/ # Nginx 설정
├── jupyterhub/ # JupyterHub 설정
├── scripts/ # 실행 스크립트
├── requirements/
│ ├── requirements-train.txt # 학습 환경 패키지
│ └── requirements-jupyter.txt # Jupyter 환경 패키지
├── .env.example # 환경변수 템플릿
└── .gitignore
환경변수 DATA_SOURCE로 데이터 소스 전환:
# MinIO (기본, 개발용)
DATA_SOURCE=minio
# 제주은행 API
DATA_SOURCE=api
# 제주은행 DB 직접 연결
DATA_SOURCE=direct- http://localhost:8000 접속
notebooks/01_eda_fund_prediction.ipynb열기- 셀 실행
# 샘플 데이터로 LightGBM 학습
docker compose -f docker-compose-dev.yml --profile training run --rm trainer \
python -m src.models.train --model-name lightgbm --sample-data
# LSTM 학습
docker compose -f docker-compose-dev.yml --profile training run --rm trainer \
python -m src.models.train --model-name lstm --sample-data.env에 API 키 설정:
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...노트북에서 사용:
%%ai chatgpt
이 모델의 성능을 개선할 방법을 알려줘
%%ai claude
하이퍼파라미터 튜닝 코드를 작성해줘Jenkins 서버(제주은행 서버)에서 이 저장소의 Jenkinsfile을 파이프라인으로 등록하면:
- Code Checkout → Git에서 코드 가져오기
- Code Quality → Lint, Type Check
- Build Images → Docker 이미지 빌드
- Unit Tests → 자동 테스트
- Model Training → 모델 학습 (선택)
- Model Validation → 성능 검증
- Push Images → Docker Registry에 푸시
- Deploy → 운영 서버에 배포
- 5090 서버에 NVIDIA Driver 570+ 설치
- NVIDIA Container Toolkit 설치
- 동일한 코드를 서버에 클론
docker compose up -d실행 (GPU 자동 인식)
dev 환경과 prod 환경의 차이는 GPU 할당 유무뿐이므로, 코드 수정 없이 전환 가능합니다.