기록하는삶

[FastAPI] FastAPI와 uvicorn을 활용해 간단한 웹 서버 만들기, Swagger 자동 문서화 본문

AI/AI Product Serving

[FastAPI] FastAPI와 uvicorn을 활용해 간단한 웹 서버 만들기, Swagger 자동 문서화

mingchin 2022. 5. 25. 02:25
728x90
반응형

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

 

FastAPI

FastAPI FastAPI 프레임워크, 고성능, 간편한 학습, 빠른 코드 작성, 준비된 프로덕션 문서: https://fastapi.tiangolo.com 소스 코드: https://github.com/tiangolo/fastapi FastAPI는 현대적이고, 빠르며(고성능), 파이썬

fastapi.tiangolo.com

FastAPI는 2019년 공개된 Python Web Framework 중 하나로, Flask와 Django를 뒤이어 떠오르는 웹 개발 도구다.

 

출처: https://towardsdatascience.com/understanding-flask-vs-fastapi-web-framework-fe12bb58ee75

Flask와 Django 대비 우수한 성능과 쉬운 문법, 그리고 Swagger라 불리는 기능을 활용한 자동 documentation, Pydantic을 이용한 Serialization & Validation을 통한 코드 간소화 등의 장점이 있어 빠르게 그 사용자가 늘어나고 있다고 한다. 이번 글에서는 웹 서버를 띄우는 방법과 Swagger가 어떻게 생성되는지를 확인해본다.

 

가상 환경 설정은 다음 글과 같은 방법으로 poetry를 이용해 했다.

 

from fastapi import FastAPI
import uvicorn
from typing import Union

app = FastAPI()

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

@app.get("/users/{user_id}")
def get_user(user_id):
    return {"user_id": user_id}

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


if __name__ == '__main__':
    uvicorn.run(app, host="0.0.0.0", port=8000)

문법은 Flask와 거의 유사하다. 위의 코드를 통해 localhost:8000의 주소로 접속하면 GET 요청을 보내 read_root() 함수의 return 값을 화면에 출력해준다.

또한 /users/user_id에 대해 user_id를 출력하도록 했으므로, 아래의 주소로 접속하면 그 결과를 보여준다.

localhost:8000/docs에서는 Swagger를 확인할 수 있다.

이렇게 서버에 정의된 가능한 호출에 대해 규칙과 requirements 등을 자동으로 문서화해준다. 함수 인자에 Union을 이용해 넣어주면 선택적 argument로 활용이 가능하다. "Try it out"을 통해 세 번째 사진처럼 요청을 보내보고 그 결과를 받아볼 수 있다.

 

Flask로 작업했을 때는 서버를 띄우고 제대로 동작하는지 확인해보기 위해 Postman을 별도로 활용했었던 기억이 있는데, 훨씬 간편하다는 걸 느꼈다. 그리고 애초에 문서화 작업은 수동으로 해줬어야 한다고 하니,, 대단한 기능인 것 같다.

 

localhost:8000/redoc에서는 좀 다른 형태의 API 문서를 제공한다.

프로젝트시 가벼운 서버를 구현하고 테스트가 필요한 상황, 그리고 해당 내용을 공유하고 협업하는 과정에서 문서화에 드는 에너지를 줄이고 싶은 상황에 유용하게 사용할 수 있을 것 같다.

728x90
반응형