FastAPI - 1 (튜토리얼)

Jaehyeong Kwon·2023년 2월 20일
0

FastAPI

목록 보기
1/3

특징


  • 비동기 함수 지원 (django, flask의 경우 특정 라이브러리를 이용해야함. 특정 버전 이상의 django에서는 비동기 함수를 지원하는 것으로 알고 있음
  • 속도: Starlette과 Pydantic으로 인해 NodeJS 및 Go 에 대등할 정도로 성능이 매우 높음.
  • 빠른 코드 작성: 200~300%까지 기능 개발 속도 증가
  • 쉬움: 쉽게 사용하고 배우도록 설계되어 있음.
  • 짧음: 코드 중복 최소화. 적은 버그.
  • 직관적: 훌륭한 편집기 지원.

제일 놀라왔던 특징은 Swagger를 통해 자동으로 api 문서를 만들어준다는 것이다.


  • 호스트 주소 뒤에 /docs 를 입력하면 자동으로 문서를 만들어줌
from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    is_offer: Union[bool, None] = None

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

위의 코드만으로도 서버를 바로 띄울 수 있다.

서버 띄우기


  1. 파이썬 프로젝트를 생성하고, 다음과 같은 커맨드로 가상환경을 생성한다.
python -m venv .venv

어떤 프로젝트를 수행하던 가상환경을 만드는 습관을 들여놓자.

  1. fastapi, uvicorn 라이브러리를 설치한다.
pip install fastapi uvicorn
  1. 아래 코드를 main.py에 붙여넣는다.
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.get("/items/{item_id}")
async def read_item(item_id):
    return {"item_id": item_id}
  1. 아래 커맨드로 서버를 띄운다.
uvicorn main:app --reload
  1. localhost:8000 으로 접속해서 확인해본다.

다음과 같은 화면이 뜨면 서버가 성공적으로 떴다는 것을 의미한다.

  1. /docs 를 붙이면 api 문서인 swagger를 볼 수 있다.

후기

  • 머신러닝 모델 서빙에 대한 중요도가 높아지면서 가벼운 프레임워크에 대한 니즈가 증가하여 그중 가장 적합한 프레임워크가 FastAPI 라고 하길래 배워보고 싶었다. 실제로 배워보니 직관적이고 쉬운 느낌이다.
profile
나무와 같이 성장하는 사람

0개의 댓글