http://fastapi.tiangolo.com/ko/tutorial/
자습서 - 사용자 안내서 - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com
FastAPI는 Python 기반의 최신 웹 프레임워크로, API 개발에 최적화되어 있다.
높은 성능과 사용 편의성을 자랑하며, 자동 문서화 기능을 제공하는 것이 특징이다.
구글 트랜드(trends.google)로 파이썬 웹 프레임워크 3종에 대해 트랜딩 검색을 해봤다.
5년을 기간으로 검색을 해보니 여전히 장고가 1위이지만 FastAPI의 기세가 만만치 않다.
최근 2년으로 그래프를 보았더니, Flask와 FastAPI 격차가 매우 좁아졌다.
FastAPI란?
FastAPI는 Starlette과 Pydantic을 기반으로 만들어진 비동기(Asynchronous) 웹 프레임워크이다.
FastAPI의 주요 특징은:
- 고성능: 비동기 기능을 활용하여 빠른 응답 속도를 제공
- 자동 문서화: Swagger UI 및 ReDoc을 통해 API 문서를 자동 생성 (이게 은근히 편하다)
- 간편한 데이터 검증: Pydantic을 활용한 유효성 검사
- 타입 기반 개발: Python의 타입 힌트를 적극 활용하여 코드 품질 향상
Flask와 비슷한 구조를 가지고 있으며, 기본적으로 비동기식으로 작성되어 있어 I/O 병목현상이 자주 일어나는 웹 서버에서 빠른 성능을 보여주고 있어 Python API서버로 적합하다고 생각한다.
실제로 학부생 시절 캡스톤 디자인 프로젝트과 중소기업 현장실습 프로젝트에 투입되며 fastapi를 사용한 경험이 있다.
Django 유저나 Python 개발자라면,
정말 며칠만에 간단한 API 개발이 가능할 정도로 쉽게 익힐 수 있을 것이다.
또한 FastAPI 공식문서가 정말 잘 되어 있어서 웬만한 기능들은 모두 공식문서 예시를 따라 학습하면 된다.
FastAPI 설치하기
FastAPI를 설치하려면 다음 명령어를 사용한다
pip install fastapi uvicorn
uvicorn은 FastAPI 애플리케이션을 실행하는 ASGI 서버이다.
FastAPI 기본 사용법
FastAPI를 이용하여 간단한 API를 만들어 보자.
1. FastAPI 애플리케이션 생성
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
2. 서버 실행하기
위 코드를 main.py 파일에 저장한 후, 아래 명령어로 실행한다.
uvicorn main:app --reload
3. API 문서 확인하기
서버를 실행한 후, 브라우저에서 아래 주소로 접속하면 자동 생성된 API 문서를 확인할 수 있다.
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
FastAPI의 주요 기능
1. 경로 및 요청 매개변수 처리
FastAPI에서는 다양한 방식으로 요청 매개변수를 처리한다.
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
2. 요청 바디 처리
Pydantic 모델을 사용하여 요청 데이터를 검증할 수 있다.
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.post("/items/")
def create_item(item: Item):
return {"item_name": item.name, "item_price": item.price}
3. 응답 모델 지정
FastAPI는 응답 데이터를 타입 힌트를 기반으로 검증 및 변환할 수 있다.
from typing import List
@app.get("/items/", response_model=List[Item])
def read_items():
return [{"name": "Item1", "price": 10.5, "is_offer": True}]
4. 비동기(Async) 지원
FastAPI는 비동기 프로그래밍을 완벽하게 지원한다.
import asyncio
@app.get("/async")
async def async_endpoint():
await asyncio.sleep(1)
return {"message": "This is an async endpoint!"}
FastAPI의 장점
- 빠른 성능 - Starlette을 기반으로 비동기 처리 최적화
- 자동 문서화 - Swagger UI 및 ReDoc 지원
- 강력한 데이터 검증 - Pydantic을 활용한 모델 검증
- 쉬운 개발 및 유지보수 - Python 타입 힌트를 활용한 명확한 코드 구조
FastAPI의 단점
- 짧은 역사 - Django 대비 적은 규모의 커뮤니티 및 서드파티 라이브러리 개수
- 레퍼런스 부족
- 자유도가 높음 - 공식문서에서 조차 디렉토리에 대한 명확한 기준이 없다
vs FastAPI의 성능
구글링을 통해 성능에 대한 다른 사람들의 평가와 생각은 어떨지 자료를 찾아보았다.
또한 여러 사람들이 참여해서 함께 만들어가는 벤치마크 결과를 찾아 볼수있었다.
개인들이 작성한 코드를 올려서 테스트 되는 방식이라 퀄리티가 가지각색이다. 고로 참고만 하자
TechEmpower Framework Benchmarks
www.techempower.com
- JSON : JSON serialization - {"message":"Hello, World!"}
- 1-query : DB에 단일 행 조회 후 JSON 응답 - {"id":3217,"randomNumber":2149}
- 20-query : DB에 복수 행 조회 후 JSON 응답 - 동시성과 관련된 조금 더 복잡한 조건이 있음
- Fortunes : DB에서 Unix fortune cookie 메시지가 포함된 모든 행(12개)을 가져와서 HTML 템플릿으로 응답
- Updates : DB에 복수 행을 업데이트 - 행을 가져와서 메모리에 올리고 객체를 수정, 동시성 등 세부 조건 있음
- Plaintext : 일반 텍스트로 응답 - Hello, World
여기 데이터를 봐도 FastAPI는 확실히 다른 파이썬 프레임워크 django, flask보다 뛰어난 면모를 보이지만,
Go의 웹 프레임워크인 gin이나 node.js와 직접 비교하기엔 아직 갈 길이 멀다.
물론 Node.js의 express와 비교한다면 월등하다.
결론
FastAPI는 높은 성능과 편리한 기능을 제공하는 현대적인 웹 프레임워크이다.
특히 API 개발에 적합하며, 데이터 검증, 자동 문서화, 비동기 처리 기능을 활용하여 빠르고 안정적인 서비스를 구축할 수 있다.
앞으로 FastAPI 기반 API 개발 학습을 진행해 볼것이다.
'Programming Language' 카테고리의 다른 글
[Python] 파이썬 기본 내장함수(Built-in Function) (0) | 2023.06.27 |
---|