
Flask는 Python 기반의 경량 웹 프레임워크로, 간단하고 유연하게 웹 애플리케이션과 API 서버를 만들 수 있습니다.
2004년 Armin Ronacher가 개발했으며, WSGI(Web Server Gateway Interface)를 기반으로 동작합니다.
특징: "Micro Framework"
주요 용도: REST API 서버, 간단한 웹 서비스, 머신러닝 모델 배포
코드가 간결하고 직관적이라, 초기 API 설계와 테스트에 적합
예: 데이터 분석 결과를 웹에서 바로 확인하는 대시보드
pickle, joblib로 저장한 모델을 불러와 HTTP API로 제공
예: /predict 엔드포인트로 입력 데이터를 받아 예측값 반환
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/hello", methods=["GET"])
def hello():
return jsonify({"message": "Hello Flask"})
@app.route("/predict", methods=["POST"])
def predict():
data = request.get_json()
result = sum(data["numbers"])
return jsonify({"result": result})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
python app.py
GET: http://127.0.0.1:5000/hello
POST: curl -X POST http://127.0.0.1:5000/predict -H "Content-Type: application/json" -d '{"numbers":[1,2,3]}'
장점
배우기 쉽고 코드가 직관적
경량 → 불필요한 기능이 없어 빠른 개발 가능
생태계 풍부 → 다양한 확장 라이브러리 존재
레거시 시스템과 호환성 높음
단점
비동기 처리 지원 제한 → 대규모 트래픽 처리에 한계
자동 문서화 기능 없음 → Swagger 등 직접 설정 필요
데이터 검증 로직을 직접 작성해야 함
운영 환경 배포: app.run()은 개발용 → 운영에서는 Gunicorn, uWSGI 등 WSGI 서버 사용
보안: 입력 데이터 검증 필수 (SQL Injection, XSS 등 방지)
성능: CPU 바운드 작업은 별도 워커나 비동기 큐(Celery, RQ)로 처리
구조 설계: 프로젝트가 커지면 Blueprint로 모듈화 필요
API 문서화: Flask-RESTX, Flask-Swagger 등으로 자동 문서화
데이터 검증: Marshmallow, Pydantic(Flask에서도 사용 가능) 활용
배포: Docker + Gunicorn 조합이 안정적
로그 관리: logging 모듈로 요청/응답 및 예외 기록
Flask는 작고 단순하지만 강력한 웹 프레임워크로,
소규모 서비스나 빠른 프로토타입 제작에 최적입니다.