본문 바로가기

mlops, devops

python framework 비교

 

비교할 framework 종류

- flask

- fastapi

- django

- streamlit

- 번외) bootstrap 사용 여부

 

비교 결과

  django flask fastapi streamlit
장점 이미 모든것이 준비되어있음. (서드파티, 패키지 등) 조립만 하면됨

ORM 지원

생태계가 큼

상세한 공식문서

확장성이 좋음
미니멀하고 직관적임

개발 속도가 빠름
ASGI 사용으로 비동기 처리 수행

철학 : 빠르고, 코딩하기 쉽고, 배우기 쉽고, 바로 운영 적용이 가능하게

swagger 연동 - open api 문서 자동 생성

상세한 공식문서
쉽게 컴포넌트를 이용해 페이지 구성 가능
단점 사이즈가 큼

속도가 느림(비교적)
러닝커브 있음 2018년12월에 나와 약한 생태계

아직 1.0버전이 나오지 않음(beta)
api 없음

위젯 커스터마이징 어려움

스케일 조정 불가능

나온지 얼마 안돼 약한 생태계

 

[번외] flask의 확장 라이브러리

flask-restful

swagger 미지원

 

공식문서 : https://flask-restful.readthedocs.io/en/latest/

github : https://github.com/flask-restful/flask-restful/tags

현재기준, 21년도에도 업데이트 진행됨. 6.3k stars

 

flask-restplus

swagger 내장

fastapi와 같이 data formatting 가능

namespace를 지정해 라우터들을 묶어서 관리할 수 있고, 여기서 param(), expect() 등을 지원하여 swagger에서 문서화 할 수 있음 (공식문서 참고)

19년에 업데이트 종료됨 -> restX가 이어감

 

공식문서 : https://flask-restplus.readthedocs.io/en/stable/

github : https://github.com/noirbizarre/flask-restplus

현재기준, 19년8월이 마지막 업데이트. 2.6k stars

 

flask-restX

20년 첫 출시로, flask-restplus를 fork해서 이어간 라이브러리

기본적으로 flask-restplus와 특성은 동일

swagger 내장

 

공식문서 : https://flask-restx.readthedocs.io/en/latest/

github : https://github.com/python-restx/flask-restx

현재기준, 20년 1월부터 시작해 21년도에도 업데이트 진행됨.  1.5k stars

 

요약

flask에서 swagger를 사용한다면 flask-restplus를 이어받은 flask-restX를 고려

 

 

프로젝트 내 적용

적용 시 고려되어야 할 사항

- 운영이 가능한 api를 생성해야함

- 구성원들이 쉽게 dashboard와 api를 만들 수 있어야함

 

bootstrap 사용 여부

bootstrap은 html, css, js를 이해해야하기 때문에 페이지 구성은 streamlit을 사용하는게 더 직관적일거라 예상됨

streamlit만 사용하기에는 운영가능한 api를 생성할 수 없음 -> back-end를 따로 구성

back-end는 개발속도가 빠르면서도 swagger로 문서화를 자동화 해줘 협업하기 쉽고, 운영까지 적용가능한 fastapi가 적합

 

결론

- back-end : fastapi (운영 가능한 안정성있는 api 생성)

- front-end : streamlit (위젯 컴포넌트로 대시보드 생성)

 

 

참고한 자료들

 

 

 

https://dingrr.com/blog/post/python-%EC%9B%B9%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EB%81%9D%ED%8C%90%EC%99%95-%EA%B0%80%EB%A6%AC%EA%B8%B0-django-flask-fastapi-sanic

 

Python 웹프레임워크 끝판왕 가리기 (Django, Flask, FastAPI, Sanic) | 블로그 | 딩그르르

Python 웹프레임워크 끝판왕 가리기 (Django, Flask, FastAPI, Sanic)

dingrr.com

 

FastAPI특징

  • High Performance
    -- Node.js, go와 대등한 성능
  • Easy
    -- Flask와 비슷한 구조
    -- Microservice에 적합
  • Productivity
    -- Swagger 자동생성
    -- Pydantic을 이용한 Serialization

장고의 경우 ml서비스 만들땐 좀 무겁다 !!

 

FastAPI vs Flask

  • 장점
    -- Flask보다 간결한 Router 문법
    -- FastAPI는 데코레이터로 감쌀때 인자를 작성하고 함수 내부에서 사용할 수 있음
    -- Asynchronous(비동기) 지원
    -- Built-in API Documentation(Swagger 내장)
    -- Pydantic을 이용한 Serialization 및 Validation
간결한 Router문법 예시

Flask : 
	@app.route("/",methods=["GET"])
	@app.route("/",methods=["POST"])
FastAPI:
	@app.get("/")
	@app.post("/")
  • 아쉬운 점
    -- 아직까지는 Flask의 유저가 더 많음
    -- ORM 등 Database와 관련된 라이브러리가 적음

 

https://modernflow.tistory.com/137

 

웹 서비스 형태 - Streamlit

1. 웹 서비스 형태 - Streamlit 1.1 웹 서비스를 만드는 과정 다른 조직의 도움 없이 빠르게 웹 서비스를 만드는 방법이 무엇일까? Voila는 노트북환경에서 빠르게 프로토타입으로 보여주기 위한 방법

modernflow.tistory.com

https://hasty.ai/content-hub/mp-wiki/deployment/commonly-used-web-frameworks

 

Hasty.ai

 

hasty.ai

https://itnext.io/streamlit-kills-flask-1773c33fdc88

 

Streamlit Kills Flask!

Use Streamlit as your Web application base when security is not needed. If you need security from your Web application, use Flask, FastAPI…

itnext.io