https://fastapi.tiangolo.com/lo/
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
일단 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 (웹 서버 게이트웨이 인터페이스)
이렇게 프로젝트 셋업이 됐고 애플리케이션을 실행 시키기 위한 진입점을 만들어준다.
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/
튜토리얼이 꽤나 괜찮다. 공부하면서 정리해보자... 💪
댓글