본문 바로가기
Python/FastAPI

[FastAPI] 파이썬 경량 프레임워크 (기본 개념 / 입문 / 개발 환경 구성)

by 비전공자 기록광 2023. 6. 6.
반응형

https://fastapi.tiangolo.com/lo/

 

FastAPI

FastAPI FastAPI framework, high performance, easy to learn, fast to code, ready for production Documentation: https://fastapi.tiangolo.com Source Code: https://github.com/tiangolo/fastapi FastAPI is a modern, fast (high-performance), web framework for buil

fastapi.tiangolo.com

FastAPI 기본 개념

FastAPI는 Django와 Flask와 같은 파이썬 웹 프레임워크다.

간단한 설치와 사용법으로 많이 사용되고 있다고 한다.

 

구글 트랜드로 파이썬 웹 프레임워크 트랜딩 검색을 해봤다.

5년을 기간으로 검색을 해보니 여전히 장고가 1위이지만 FastAPI의 기세가 만만치 않다.

 

아래는 한국에서의 트랜딩 변화인데

FastAPI가 Flask를 거의 다 따라잡아 이제는 둘의 인기가 비등비등한 걸 볼 수 있다. 

 

특징 및 장점으로

  • 빠르고 쉽고 짧은 코드
  • 높은 성능
  • 공식문서가 잘 되어 있음
  • API 문서 자동화
    • swagger 
    • redocs

를 뽑을 수 있다.

 

실제로 회사에서 새로운 프로젝트에 투입되며 python과 fastapi를 사용하게 되었는데

정말 며칠만에 간단한 API 개발이 가능할 정도로 쉽게 익힐 수 있었다.

 

또 공식문서가 정말 잘 되어 있어 웬만한 기능들은 모두 공식문서 예시를 따라 응용하면 됐다.

 

 

Mac OS에서 개발 환경 구성

회사에서는 윈도우환경이었지만 혼자 따로 공부하며 더 자세히 익히기 위해 개발 환경을 구성해봤다.

 

일단 mac os에는 기본적으로 python 2 버전이 설치 되어 있다.

하지만 나는 python 3을 사용할 것이기 때문에 pyenv를 통해 버전 관리를 해주려 했다.

 

pyenv 설치 & 가상환경 설정

https://github.com/pyenv/pyenv#homebrew-in-macos

 

GitHub - pyenv/pyenv: Simple Python version management

Simple Python version management. Contribute to pyenv/pyenv development by creating an account on GitHub.

github.com

일단 pyenv란 위에서 언급했듯이 여러 버전의 python을 사용할 수 있게 버전 관리를 돕는 도구이다.

간단히 설치를 하고 환경 변수를 설정해주면 된다.

 

또 virtualenv를 통해 가상환경을 만들어 각각의 환경에서 애플리케이션 패키지를 관리해줄 수 있다.

 

brew update
brew install pyenv
brew install pyenv-virtualenv

#환경변수 설정 > vscode로 실행
code ~/.zshrc

#환경변수 작성 > 저장후 쉘 다시 실행
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

#쉘 다시 실행 후 확인
pyenv --version

#추가 환경변수 설정
pyenv --init

pyenv install 3.10.6

# 가상 환경 설정
pyenv virtualenv 3.10.6 [가상환경 이름]

# 가상 환경 실행
pyenv activate [가상환경 이름]

 

추가적으로 패키지(의존성) 관리 라이브러리로 peotry를 다운받아줬다.

peotry는 npm과 같은 역할을 해준다고 생각하면 된다.

# poetry 설치
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

# 기본 pyproject.toml 생성
poetry init

# 패키지 설치
poetry add fastapi uvicorn

 

peotry로 fastapi와 uvicorn을 설치해줬다.

fastapi가 바로 내가 공부할 그 웹 프레임워크고 uvicorn은 파이썬의 ASGI 웹 서버이다.

 

🍥 ASGI (비동기 서버 게이트웨이 인터페이스) <-> WSGI (웹 서버 게이트웨이 인터페이스)

 

http://www.uvicorn.org/

 

Uvicorn

An ASGI web server, for Python. Introduction Uvicorn is an ASGI web server implementation for Python. Until recently Python has lacked a minimal low-level server/application interface for async frameworks. The ASGI specification fills this gap, and means w

www.uvicorn.org

 

이렇게 프로젝트 셋업이 됐고 애플리케이션을 실행 시키기 위한 진입점을 만들어준다.

 

main.py

from fastapi import FastAPI

app = FastAPI()

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

main 파일이 위치한 곳에서 해당 명령어를 날려주면 그대로 서버가 실행이 된다

--reload는 코드 변경 후 바로 서버 재시작을 해주는 옵션으로 개발 환경에서만 사용하라고 공식문서에 써있다

친절히 알려준 대로 http://127.0.0.1:8000 로 들어가면 코드에 작성한 대로 출력되는 걸 볼 수 있다.

 

간단한 API 개발 + API docs

from fastapi import FastAPI
from enum import Enum

app = FastAPI()


class ModelName(str, Enum):
    alexnet = "alexnet"
    resnet = "resnet"
    lenet = "lenet"


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

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

@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
    if model_name is ModelName.alexnet:
        return {"model_name": model_name, "message": "Deep Learning FTW!"}

    if model_name.value == "lenet":
        return {"model_name": model_name, "message": "LeCNN all the images"}

    return {"model_name": model_name, "message": "Have some residuals"}

간단한 get 요청 두개를 작성해줬다.

코드를 적어주고 save 해주면 자동으로 서버가 재실행 된다.

 

 

fastapi의 장점 중 하나인 API 문서 자동화를 확인해보려면

http://127.0.0.1:8000/docs 로 접속하면 된다.

 

swagger가 자동으로 생성이 됐다.

실행을 시켜보며 응답을 확인할 수도 있다.

 

 

 

다른 형식의 문서를 보고 싶다면 

http://127.0.0.1:8000/redoc 에 접속하면 된다.

 

 

FastAPI는 이렇게 API 개발과 문서 자동화를 짧고 간단한 코드로 쉽게 할 수 있다.

또 이외에도 OAuth나 CORS, 웹 소켓 등 다양한 고급 기능을 제공하니 시간을 들여 공부할만 하다고 느껴 꾸준히 파보려고 한다.

 

 

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

 

자습서 - 사용자 안내서 - 도입부 - FastAPI

자습서 - 사용자 안내서 - 도입부 이 자습서는 FastAPI의 대부분의 기능을 단계별로 사용하는 방법을 보여줍니다. 각 섹션은 이전 섹션을 기반해서 점진적으로 만들어 졌지만, 주제에 따라 다르게

fastapi.tiangolo.com

튜토리얼이 꽤나 괜찮다. 공부하면서 정리해보자... 💪

반응형

댓글