개인적 학습 목적으로 작성하였습니다.
혹시 작성한 것 중 잘못 이해하거나 틀린 부분에 대한 조언 주시면 감사하겠습니다.
저는 파이썬의 django를 통해서 webframework를 시작하였는데요.
처음 시작 할 때는 몰랐지만 조금씩 공부하면서 django가 무겁다는 것과 다른 프레임워크들과 비교해서도 속도 적인 부분이 뒤떨어진다는 지적을 항상 손에 꼽더라구요.
그래도 여러 회사들에서 검증된 프레임워크임에는 틀림없습니다.
예)
깃헙 starts 수 역시 django, flask와 대비하여 절반이상 획득할 만큼 많은 개발자들의 이목과 관심을 끌고 있습니다.
Django에는 WSGI(web server gateway interface)에 대해 한번쯤 들어 봤을 텐데요.
항상 공론화 되는 WSGI의 문제점이 트래픽을 감당해 낼수 없고 느리다는 점입니다.
이로 인해 비동기 작업을 APScheduler와 같은 백그라운드 Task를 처리해주는 모듈을 쓰거나!
Redis-Celery와 함께 사용하여 극복하는등 여러 방법이 있습니다.
하지만 결국 관리 포인트가 이곳 저곳에서 생기게 되는데요.
그래서 또 손이 가는 일이 생겨 유지보수의 어려움이 생깁니다.
다행히 FastAPI에서는 ASGI를 사용하여 비동기 처리를 수행하게 되요.
프론트, 백엔드로 협업하면서 최근 API Swagger는 없어서는 안될 필수 불가결한 존재인데요.
API문서화와 API 호출을위해 데이터의 종류, 응답 예시등을 아예 떠먹여주기에 그렇습니다.
결국 이 자체로 메뉴얼화 되기에 업무 생산성이 이것 때문에 하루 적어도 몇십분 혹은 몇시간을 투자한 것을 아예 0에 수렴하게 만들기에 더 매력적인 것 같아요.
결과는 위와 같이 나오네요. TechMPower에서 python과 javascript언어의 웹프레임워크만 골라서 비교해보았는데요. 흥미롭네요.
2개를 설치할게요.
pip install fastapi uvicorn
이후 본격적으로 서버를 돌려보고 API를 한번 만들텐데요. 공식페이지의 내용을 그대로 가져와서 가볍게 사용할게요.
# main.py
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
해당 소스코드의 출처는 githubriseryan89
님에서 가져 왔으며 개인의 이해를 위한 목적으로 더 사족을 달았습니다.
DJANGO에서도 ASGI를 이용하여 비동기 구현django에서도 asgi 이용한 비동기 구현이 가능한 것으로 압니다..! 좋은 글 감사합니다.