비교할 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 (위젯 컴포넌트로 대시보드 생성)
참고한 자료들
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
https://hasty.ai/content-hub/mp-wiki/deployment/commonly-used-web-frameworks
https://itnext.io/streamlit-kills-flask-1773c33fdc88
'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 |