새소식

부스트캠프 AI Tech 4기

[Product Serving Part.5] Poetry로 프로젝트 생성 및 FastAPI 기초

  • -

FastAPI는 최근 떠오르는 Python Web Framework이다.

  • Node.js, go와 대등한 성능
  • Flask와 비슷한 구조, Microservice에 적합, 쉽다
  • Swagger 자동 생성
  • Pydantic을 이용한 Serialization

 

 

FastAPI vs Flask

  • Flask보다 Router 문법이 간결하다.

Flask

@app.route("/books", method=["GET"])
def books_table_update():
    Title = request.args.get("title", None)
    Author = request.args.get("author", None)

 

FastAPI

@app.get("/books_title/{book_title}/author/{author}")
async def books_table_update(books_title: str, author: str):

 

  • 비동기 지원
  • Built-in API Documentation (Swagger)
  • Pydantic을 이용한 Serialization 및 Validation

 

아쉬운점

  • ORM등 Database와 관련된 라이브러리가 적음

 

 

 

 

환경 설정

프로젝트 구조

  • app 폴더 : 프로젝트 코드가 들어갈 곳 (또는 src의 이름을 사용함)
    • __main__.py : 간단하게 애플리케이션을 실행할 수 있는 Entrypoint 역할
    • main.py 또는 app.py : FastAPI의 어플리케이션과 Router 설정
    • model.py : ML model에 대한 클래스와 함수 정의

 

 

Poetry

  • virtualenv 같은 경우 순차적으로 라이브러리를 설치하는데, 위에 정의한 라이브러리랑 아래 정의한 라이브러리가 numpy를 사용하는데 요구 버전이 다를 수 있다. 그렇게 되면 의존성이 꼬일 수 있다.
    → Dependency Resolver로 복잡한 의존성들의 버전 충돌 방지
  • pyproject.toml을 기준으로 여러 툴들의 config를 명시적으로 관리 가능

 

설치

Bash

curl -sSL https://install.python-poetry.org | python3 -

 

윈도우 powershell

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
 
다음과 같은 오류가 발생할 경우
bash: curl: command not found
apt-get install sudo
sudo apt update
sudo apt install curl

 

근데 pip install poetry 해도 깔린다고 함

 

poetry를 설치하고서는 환경변수 편집의 시스템 변수의 Path에 해당 경로를 추가한다.

C:\Users\User\AppData\Roaming\Python\Scripts

 

그리고서 버전을 확인하면 잘 설치된 것을 확인할 수 있다.

 

Poetry 프로젝트 생성 흐름

  1. 프로젝트 init
  2. Poetry Shell 활성화
  3. Poetry Install
  4. Poetry Add

 

 

프로젝트 설정

FastAPI 프로젝트를 만들기 위해서는 아래 패키지 필요

  • fastapi
  • uvicorn or gunicorn

 

 

1. Poetry 프로젝트 생성하기

git init처럼 특정 폴더 안에서 poetry init을 통해 프로젝트를 생성한다.

 

1. 패키지 이름 및 검색 선택

 

2. 패키지 버전 명시

 

3. Dependency (프로덕션용) / Development Dependency (Dev용) 으로 분리 가능

처음에 설정하는 것은 프로덕션용

그리고 아래 그림과 같은 질문은 Dev용도 만들어서 추가할 것이 있는지 물어보는 것이다.

테스트코드는 프로덕션에서는 필요없으므로 Dev에서만 pytest 패키지를 추가해주자

개발환경마다 필요한 패키지를 분리할 수 있다는 것이 poetry의 장점!

 

 

그러면 아래와 같이 pyproject.toml이 생성된다.

 

 

2. Poetry Shell 활성화

poetry shell을 활성화해주면 알아서 virtualenv를 생성하고 실행해준다.

poetry shell

 

poetry 가상환경에 대한 정보를 보고 싶다면 아래와 같이 명령어를 실행하면 된다.

poetry env info

 

poetry 가상환경 list를 보고 싶다면 아래와 같이 명령어를 실행하면 된다.

poetry env list

 

 

3. Poetry Install

pyproject.toml에 저장된 내용에 기반해 라이브러리 설치

poetry install

 

 

3. Poetry Add

필요한 패키지를 추가하고 싶을 때 사용

poetry add pandas==1.5.2

pyproject.toml을 보면 추가됨을 확인할 수 있다.

 

 

poetry.lock

  • 작성하고 있는 프로젝트 의존성과 동일한 의존성을 가질 수 있다.
  • 협업을 할 때는 Github repo에 커밋

 

 

 

간단한 웹 서버 띄우기

poetry로 가상환경도 만들고 필요한 패키지들도 설치했으니 이제 FastAPI를 이용해서 간단한 웹서버를 띄워보자

 

simple_webserver.py

from fastapi import FastAPI

# FastAPI 객체 생성
app = FastAPI()

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

 

터미널에서 아래와 같이 simple_webserver를 실행시킨다.

uvicorn simple_webserver:app --reload

 

터미널에서 uvicorn을 작성하기 싫다면 파일에 추가해줄 수도 있다.

from fastapi import FastAPI
import uvicorn

# FastAPI 객체 생성
app = FastAPI()

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

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

그럼 python simple_webserver.py로 실행할 수 있다.

 

 

localhost:8000에 접근하면 GET 결과를 볼 수 있다.

 

 

localhost:8000/docs로 이동하면 자동으로 만들어진 Swagger를 확인할 수 있다.

 

728x90
Contents