이벤트가 발생했을 때, 그 처리를 담당
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 Endpoint를 정의
Mini FastAPI로 여러 API를 연결해서 활용
기존에 사용하던 @app.get, post 이 아닌, router 파일을 따로 설정하고 app에 import
Line 4-5) user_router, order_router 생성
@user_router.get(”/me”)
생성한 router를 include_router 통해 추가하고, main app을 실행
실제론 user.py, order.py 분리해서 사용

어떤 에러가 발생했는지 알아야 하고, 요청한 클라이언트에 해당 정보를 전달해 대응
모니터링 도구를 사용해 에러 로그 수집
따로 조치를 취해주지 않는다면?
Internal Server Error 500 Return
해당 에러를 보고 클라이언트는 어떤 에러인지 정확히 모름
에러 메세지, 에러 이유 등을 클라이언트에 전달하도록 코드를 작성해야 함
⇒ HTTPException 사용

Fast API는 Starlett이라는 비동기 프레임워크를 래핑해서 사용
Fast API 기능 중 Background Tasks 기능은 오래 걸리는 작업들을 background에서 실행
Online Serving에서 CPU 사용이 많은 작업들을 Background Task로 사용하면,
클라이언트는 작업 완료를 기다리지 않고 즉시 Response를 받을 수 있음
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로 사용함을 정의Cookiecutter
많은 사람들이 프로젝트 구조에 대한 템플릿을 서로 공유
CLI 형태로 프로젝트 생성 과정을 도와줌
도커 이미지처럼 사용
커스텀 쿠키 커터 제작 가능
FastAPI에 관련된 쿠키 커터도 찾을 수 있음
객체 지향
절차형 vs 객체 지향 프로그래밍 차이 이해하기
코드 중복을 최소화해서 재사용성 증가
⇒ 무엇을 만들겠다 (X) 기능을 정의하고 하나씩 구현 (O)
※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※