FastAPI - Etc

홍찬우·2023년 7월 30일

Fast API 익숙해지기

Event Handler

  • 이벤트가 발생했을 때, 그 처리를 담당

  • application이 실행 및 종료될 때 특정 함수 실행 가능

    • @app.on_event(”startup”)

    • @app.on_event(”shutdown”)

    • e.g., startup 할 때 머신러닝 모델 Load, shutdown 할 때 로그 저장

    • 슬랙에 연동해서 알람 받는 기능 가능

@app.on_event("startup"):
def startup_event():
		...

@app.on_event("shutdown"):
def shutdown_event():
		...

API Router

  • 더 큰 애플리케이션들 안에서 많이 사용되는 기능

  • API Endpoint를 정의

  • Mini FastAPI로 여러 API를 연결해서 활용

    • e.g., Fast API 3개를 이용해 셋을 연결해서 사용
  • 기존에 사용하던 @app.get, post 이 아닌, router 파일을 따로 설정하고 app에 import


  • Line 4-5) user_router, order_router 생성

    • router 생성하면서 prefix (주소) 인자 넘김
  • @user_router.get(”/me”)

    • 전체 주소로 치면 localhost:8000/users/me 에 해당
  • 생성한 router를 include_router 통해 추가하고, main app을 실행

  • 실제론 user.py, order.py 분리해서 사용


  • 파일들이 늘어나며 전체 프로젝트 구조가 복잡해짐

Error Handling

  • 어떤 에러가 발생했는지 알아야 하고, 요청한 클라이언트에 해당 정보를 전달해 대응

  • 모니터링 도구를 사용해 에러 로그 수집

  • 따로 조치를 취해주지 않는다면?

    • Internal Server Error 500 Return

    • 해당 에러를 보고 클라이언트는 어떤 에러인지 정확히 모름

    • 에러 메세지, 에러 이유 등을 클라이언트에 전달하도록 코드를 작성해야 함

      ⇒ HTTPException 사용

  • Internal Server Error 500 → “아이템을 찾을 수 없습니다” 404 에러로 나타남

Background Tasks

  • Fast API는 Starlett이라는 비동기 프레임워크를 래핑해서 사용

  • Fast API 기능 중 Background Tasks 기능은 오래 걸리는 작업들을 background에서 실행

  • Online Serving에서 CPU 사용이 많은 작업들을 Background Task로 사용하면,
    클라이언트는 작업 완료를 기다리지 않고 즉시 Response를 받을 수 있음

    • e.g., 특정 작업 후 이메일 전송
from fastapi import FastAPI, BackgroundTasks

class TaskInput(BaseModel):
    wait_time: int = Field(default=1, le=10, ge=1)

def cpu_bound_task(wait_time: int):
    sleep(wait_time)
    return f"task done after {wait_time}"

# 비동기 작업이 등록됐을 때, HTTP Response 202 (Accepted)를 보통 리턴합니다.
@app_2.post("/task", status_code=202)
async def create_task_in_background(task_input: TaskInput, background_tasks: BackgroundTasks):
    background_tasks.add_task(cpu_bound_task, task_input.wait_time)
    return "ok"
  • background_tasks: BackgroundTasks : BackgroundTask로 사용함을 정의

FastAPI가 어렵다면

Cookiecutter

  • 많은 사람들이 프로젝트 구조에 대한 템플릿을 서로 공유

  • CLI 형태로 프로젝트 생성 과정을 도와줌

  • 도커 이미지처럼 사용

  • 커스텀 쿠키 커터 제작 가능

  • FastAPI에 관련된 쿠키 커터도 찾을 수 있음

객체 지향

  • 절차형 vs 객체 지향 프로그래밍 차이 이해하기

  • 코드 중복을 최소화해서 재사용성 증가

⇒ 무엇을 만들겠다 (X) 기능을 정의하고 하나씩 구현 (O)







※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※

profile
AI-Kid

0개의 댓글