비교할 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 (위젯 컴포넌트로 대시보드 생성)
참고한 자료들
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
'mlops, devops' 카테고리의 다른 글
컨테이너간 통신 (0) | 2022.03.11 |
---|---|
docker-compose에서 localhost 사용 (0) | 2022.02.28 |
nginx proxy_pass에서 host의 ip 사용할 때 (0) | 2022.01.24 |
E: Package 'docker.io' has no installation candidate (0) | 2022.01.20 |
메모리 테스트 (0) | 2022.01.14 |