Programming/Python

[Python] FastAPI: 현대적이고 빠른 웹 프레임워크

기록하는 백앤드개발자 2024. 11. 13. 05:02
반응형

ㅁ 들어가며

동년배 친구가 사업을 구상하면서 빠른 백엔드 개발을 위해 FastAPI를 사용하고 있었다. 

FastAPI는 Python 3.6+ 버전을 기반으로 한 현대적이고 빠른 웹 프레임워크다.

API를 구축하는데 특화되어 있으며, 높은 성능과 개발 속도를 자랑한다.

이 글에서는 FastAPI의 주요 장점과 기본적인 사용 방법에 대해 알아보겠다.

 

ㅁ FastAPI의 주요 장점

ㅇ 빠른 성능
  FastAPI는 Starlette와 Pydantic을 기반으로 하여 NodeJS 및 Go와 대등한 수준의 매우 높은 성능을 제공한다.

ㅇ 빠른 코딩
  타입 힌트를 활용한 자동 문서화, 자동 검증 등의 기능으로 개발 속도가 매우 빠르다.

ㅇ 적은 버그
  강력한 타입 체크와 자동 검증 기능으로 인해 버그 발생 가능성이 낮다.

ㅇ 직관적
  Python 타입 힌트를 사용하여 코드가 직관적이고 이해하기 쉽다.

ㅇ 쉬운 학습
  문서화가 잘 되어 있어 학습 곡선이 낮다.

ㅇ 자동 문서화
  Swagger UI와 ReDoc을 통한 자동 대화형 API 문서를 제공한다.

ㅇ 표준 기반
  OpenAPI(Swagger)와 JSON Schema 등 개방형 표준을 따른다.

 

ㅁ FastAPI 사용 방법

pip install fastapi
pip install uvicorn

ㅇ FastAPI와 ASGI 서버인 Uvicorn을 설치한다.

 

from fastapi import FastAPI

app = FastAPI()

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

기본 애플리케이션 생성

ㅇ main.py로 간단한 FastAPI 애플리케이션을 생성한다.

uvicorn main:app --reload

서버 실행
ㅇ Uvicorn을 사용하여 서버를 실행한다.

ㅇ main: main.py 파일 (파이썬 "모듈").

ㅇ app: the object created inside of main.py with the line app = FastAPI()

ㅇ --reload: 코드가 변경된 후 서버 재시작하기. 개발환경에서만 사용

 

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

@app.post("/items/")
async def create_item(item: Item):
    return item

 요청 본문
ㅇ Pydantic 모델을 사용하여 요청 본문을 정의하고 검증할 수 있다.

 

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

경로 매개변수
ㅇ URL에서 매개변수를 받아 사용할 수 있다.

 

@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}

쿼리 매개변수
ㅇ URL의 쿼리 문자열에서 매개변수를 받을 수 있다.

 

ㅇ 문서 확인
ㅇ 서버를 실행한 후, /docs 또는 /redoc 경로로 접속하면 자동 생성된 API 문서를 확인할 수 있다.

 

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}

ㅇ 최종 소스

 

ㅁ 마무리 

  FastAPI는 현대적인 Python 웹 개발의 강력한 도구다. 쉽고 빠르게 API 개발이 가능하다. 특히 타입 힌트는 개발자에게 꼭 필요한 기능으로 자동 문서화와 검증 기능은 개발 생산성을 크게 향상시킨다.

  FastAPI를 사용하면 복잡한 API도 쉽고 빠르게 개발할 수 있으며, 자동 생성되는 대화형 문서는 API 사용자들에게 큰 도움이 된다.      Python을 사용하는 백엔드 개발자라면 FastAPI를 한번 시도해 볼 만한 가치가 충분히 있다.

 

ㅁ 함께 보면 좋은 사이트

FastAPI Home

반응형