Postman으로 GET / → Health Check OK, POST /predict → "language": "german", "language": "italian" 확인.
실시간 언어 감지 API 배포 완료!
필요 시 각 섹션별로 관련 코드/구성요소를 다시 정리해드릴 수 있습니다.
나의 말:
섹션별로 관련 코드/구성요소를 다시 정리
아래는 영상에서 설명한 FastAPI + Docker + Heroku를 활용한 머신러닝 모델 배포 과정을 섹션별로 코드 및 구성요소 중심으로 재정리한 내용입니다:
1️⃣ 모델 개발 및 저장 (Colab)
✅ 사용 기술:
scikit-learn, pandas, re, pickle
???? 주요 코드:
python
from sklearn.pipeline import Pipeline from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split import pickle # 데이터 준비 및 전처리 label_encoder = LabelEncoder() y_encoded = label_encoder.fit_transform(df['language']) # 모델 파이프라인 정의 pipeline = Pipeline([ ('vectorizer', CountVectorizer()), ('classifier', MultinomialNB()) ]) # 훈련 pipeline.fit(df['text'], y_encoded) # 저장withopen('model_v0.1.0.pkl', 'wb') as f: pickle.dump(pipeline, f) # 레이블 저장 (선택) label_classes = label_encoder.classes_
2️⃣ FastAPI 앱 구성
???? 디렉터리 구조:
bash
app/ ├── main.py # FastAPI 엔트리포인트 ├── model/ │ ├── model.py # 모델 로딩 및 예측 함수 │ └── model_v0.1.0.pkl # 저장된 모델 파일
???? model/model.py (모델 로딩 및 예측)
python
import pickle import os import re BASE_DIR = os.path.dirname(__file__) MODEL_PATH = os.path.join(BASE_DIR, "model_v0.1.0.pkl") withopen(MODEL_PATH, "rb") as f: model = pickle.load(f) label_classes = ["english", "german", "italian", ...] # 실제 label listdefpredict_pipeline(text: str) -> str: text = re.sub(r"[^\w\s]", "", text) pred = model.predict([text])[0] return label_classes[pred]
???? main.py (FastAPI 엔드포인트)
python
from fastapi import FastAPI from pydantic import BaseModel from app.model.model import predict_pipeline app = FastAPI() classTextIn(BaseModel): text: strclassPredictionOut(BaseModel): language: str@app.get("/") defhealth_check(): return {"status": "ok", "model_version": "0.1.0"} @app.post("/predict", response_model=PredictionOut) defpredict(payload: TextIn): language = predict_pipeline(payload.text) return {"language": language}
3️⃣ Docker 구성
???? Dockerfile
dockerfile
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8 WORKDIR /app COPY ./app /app/app COPY requirements.txt /app RUN pip install --no-cache-dir -r /app/requirements.txt
???? requirements.txt
txt
scikit-learn==1.0.2
???? .dockerignore
txt
__pycache__/ *.pyc *.pkl *.zip .venv
4️⃣ 로컬 Docker 테스트 명령어
bash
# 빌드 docker build -t language-detection-app . # 실행 (포트 매핑) docker run -p 8080:80 language-detection-app