Python

[Python] FastAPI 란

비번변경 2024. 11. 10. 00:07

개요

최근 새로 API 개발 업무를 맡게 되었는데…… 기존에 공부를 했었던 Flask, Tornado가 아니라 FastAPI라는 웹 프레임워크를 사용하게 되었다. 기본적인 설치나 실행 방법에 대해서 알아보자.

 

 

FastAPI

Python 타입 힌트(타입 어노테이션)를 기반으로 API 개발에 초점을 둔 Python 웹 프레임워크. 

공식 문서에 의하면 다음과 같은 특징을 갖고 있다.

  • 내부적으로 Starlette라는 비동기 프레임워크를 사용하며 가장 빠른 Python 프레임워크 중 하나이다.
  • Pydantic을 사용해 입출력 항목을 빠르게 정의하고 값을 검증할 수 있으며, Swagger를 사용하여 빠르게 API 문서를 작성할 수 있다.
  • 내부 테스트에 의하면 개발자에 의한 오류를 40% 정도 감소시키는 것으로 측정되었다.
  • 거의 모든 부분에서 자동완성을 지원한다.
  • 쉽게 배우고 사용할 수 있도록 설계되었다.
  • 코드 중복을 최소화하여 간결한 코드를 작성할 수 있다.
  • 견고하다.
  • API에 대한 개방형 표준을 기반으로 하며 완벽하게 호환된다.

 

이 글에서는 FastAPI를 이용해 간단한 웹 서버를 만들어보려고 한다.

 

 

설치

FastAPI는 다른 라이브러리와 동일하게 pip를 이용해 간단히 설치할 수 있다.

pip install fastapi

# 모든 의존성과 기능을 함께 설치
pip install "fastapi[all]"

 

서비스 실행을 위해 ASGI 서버도 설치해야 한다. uvicorn, hypercorn을 많이 사용하는 것 같다.

🤔 WSGI; Web Server Gateway Interface
동기적인 프로그래밍 모델을 따르는 Python 웹 애플리케이션과 웹 서버 간의 인터페이스
Flask나 Django와 같안 웹 프레임워크가 지원한다.

🤔 ASGI; Asynchronous Server Gateway Interface

비동기 웹 애플리케이션을 위한 파이썬 웹 서버와 웹 프레임워크 간의 인터페이스
비동기 처리와 동시 처리를 지원한다.

🤔 uvicorn
Python을 위한 ASGI 웹 서버 구현
HTTP/1.1과 WebSockets을 지원한다.

🤔 hypercorn
sans-io hyper, h11, h2, wsproto libraries을 기반으로 하고 Gunicorn에서 영감을 받은 ASGI 및 WSGI 웹 서버
HTTP/1, HTTP/2, WebSockets을 지원한다.

 

이 글에서는 uvicorn을 설치하여 사용한다.

pip install uvicorn

# Cython 기반 종속성 및 선택적 기능 포함 설치
pip install "uvicorn[standard]"

 

 

기본 구조

공식 문서에서 확인할 수 있는 기본적인 FastAPI 애플리케이션은 다음과 같은 모습이다.

# main.py

# FastAPI 임포트
from fastapi import FastAPI

# FastAPI 객체 생성
# API를 생성하기 위한 상호작용의 주요 지점이 된다.
app = FastAPI()

# URL 및 HTTP 메서드 지정
# 지정한 요청이 들어오면 함수가 실행된다.
@app.get("/")
async def root():
    return {"message": "Hello World"}

예시에서는 비동기 함수로 정의했는데, 일반적인 동기 함수로 정의할 수도 있다.

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

 

 

실행

작성한 FastAPI 애플리케이션은 다음과 같이 실행시킬 수 있다.

uvicorn <MODULE>:<FAST_API 객체>
# --reload : 코드 변경 시 서버 자동 재시작

# 예시
uvicorn main:app --reload

실행시키면 로그에 어느 주소의 어느 포트에서 실행되는지 확인할 수 있다.

접속해 보면 아래와 같이 동작함을 확인할 수 있다. 

 

 

API 문서 확인

FastAPI를 실행하면 /docs 라는 경로로 Swagger 기번욿 자동 생성된 API 문서를 확인할 수 있다.

 

/redocs로 접근하면 Redoc 기반 API 문서도 확인할 수 있다.

 

참고 문서

https://fastapi.tiangolo.com/ko/

https://asgi.readthedocs.io/en/latest/

https://www.uvicorn.org/

https://github.com/pgjones/hypercorn

FastAPI 파이썬으로 간단하게 웹 API 만들기