[FastAPI] 1화 시작하기

Hyeseong·2021년 4월 27일
0

fastapi-notification

목록 보기
2/3

개인적 학습 목적으로 작성하였습니다.
혹시 작성한 것 중 잘못 이해하거나 틀린 부분에 대한 조언 주시면 감사하겠습니다.

시작하기

저는 파이썬의 django를 통해서 webframework를 시작하였는데요.
처음 시작 할 때는 몰랐지만 조금씩 공부하면서 django가 무겁다는 것과 다른 프레임워크들과 비교해서도 속도 적인 부분이 뒤떨어진다는 지적을 항상 손에 꼽더라구요.

그래도 여러 회사들에서 검증된 프레임워크임에는 틀림없습니다.
예)

  • JSFiddle
  • The Guardian
  • Spotify
  • NaASA
  • Udemy
  • Mozillia
  • Pinterest

깃헙 starts 수 역시 django, flask와 대비하여 절반이상 획득할 만큼 많은 개발자들의 이목과 관심을 끌고 있습니다.

철학

  • 높은 성능
  • 배우기 쉽고
  • 빠르게 코딩
  • 운영에 최적화

다른 프레임워크와의 특징

  • starlete프레임워크를 기반으로한 비동기 API 서버 지원
  • pydantic을 사용해서 data validation 지원
  • OPEN API를 사용하여 자동으로 API Swagger
  • 성능과 부하테스트에서 JS와 GO에서 사용되고 있는 웹프레임워크과 견주어도 손색 없음

ASGI 짚고 넘어가기

Django에는 WSGI(web server gateway interface)에 대해 한번쯤 들어 봤을 텐데요.
항상 공론화 되는 WSGI의 문제점이 트래픽을 감당해 낼수 없고 느리다는 점입니다.

이로 인해 비동기 작업을 APScheduler와 같은 백그라운드 Task를 처리해주는 모듈을 쓰거나!
Redis-Celery와 함께 사용하여 극복하는등 여러 방법이 있습니다.

하지만 결국 관리 포인트가 이곳 저곳에서 생기게 되는데요.
그래서 또 손이 가는 일이 생겨 유지보수의 어려움이 생깁니다.

다행히 FastAPI에서는 ASGI를 사용하여 비동기 처리를 수행하게 되요.

오픈API, API Swagger 자동 생성

프론트, 백엔드로 협업하면서 최근 API Swagger는 없어서는 안될 필수 불가결한 존재인데요.

API문서화와 API 호출을위해 데이터의 종류, 응답 예시등을 아예 떠먹여주기에 그렇습니다.

결국 이 자체로 메뉴얼화 되기에 업무 생산성이 이것 때문에 하루 적어도 몇십분 혹은 몇시간을 투자한 것을 아예 0에 수렴하게 만들기에 더 매력적인 것 같아요.

FastAPI VS NodeJS


결과는 위와 같이 나오네요. 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님에서 가져 왔으며 개인의 이해를 위한 목적으로 더 사족을 달았습니다.

reference - https://dingrr.com/blog/post/nodejs-%EC%95%84%EC%84%B1%EC%97%90-%EB%8F%84%EC%A0%84%ED%95%9C%EB%8B%A4-fastapi-written-in-python

profile
어제보다 오늘 그리고 오늘 보다 내일...

1개의 댓글

comment-user-thumbnail
2021년 12월 15일

DJANGO에서도 ASGI를 이용하여 비동기 구현django에서도 asgi 이용한 비동기 구현이 가능한 것으로 압니다..! 좋은 글 감사합니다.

답글 달기