특정 이벤트가 발생했을 때, 그 처리를 담당하는 함수를 의미한다.
FastAPI에선 Application이 실행될 때, 종료될 때 특정 함수를 실행할 수 있다.
@app.on_event("startup")
@app.on_event("shutdown")
위와 같이 데코레이터를 사용한 함수를 이용하여 사용할 수 있다.
API Router는 더 큰 애플리케이션들에서 많이 사용되는 기능이다.
기존에 사용하던 @app.get
, @app.post
를 사용하지 않고 router파일을 따로 설정하고 app에 import해서 사용한다.
위와 같은 라우터 파일을 만들고 메인파일(app)에 app.include_router(user_router)
의 방식으로 연결할 수 있다.
API Router는 Mini FastAPI로 여러 API들을 연결해서 활용하는 방법이다.
Error handling은 웹 서버를 안정적으로 운영하기 위해 반드시 필요한 주제이다. 서버에서 Error가 발생한 경우, Error의 종류를 파악해야하고 요청한 클라이언트에 해당 정보를 전달하여 대응할 수 있어야 한다.
서버 개발자는 모니터링 도구를 사용해 Error Log를 수집해야 하며 발생하고 있는 오류를 빠르게 수정할 수 있도록 예외 처리를 잘 만들어 둘 필요가 있다.
FastAPI의 HTTPException
는 Error response를 쉽게 보낼 수 있도록 하는 Class로 이를 이용해 클라이언트에게 더 자세한 에러 메세지를 보내는 코드를 작성할 수 있다.
HTTPException(status_code=404, detail="아이템을 찾을 수 없습니다.")
FastAPI는 Starlett이라는 비동기 프레임워크를 래핑해서 사용하고 있다.
Background Tasks 기능은 오래 걸리는 작업들을 background에서 실행한다.
Backgound Tasks를 사용한 작업들은 기다리지 않고 바로 응답을 주기 때문에 0초가 소요되며 실제 작업을 Background에서 실행된다.
from fastapi import FastAPI, BackgroundTasks
...
@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"
작업 결과물을 조회할 때는 Task를 어딘가에 저장해두고 GET요청을 통해 Task가 완료됐는지 확인한다.
CLI형태로 프로젝트 생성 과정을 도와주며 고통의 프로젝트 구조가 필요하면 쿠키 커터로 설정할 수 있다.
cookiecutter
Data Science cookiecutter
fastAPI cookiecutter
위와 같은 프로젝트 구조를 참고해서 코드를 개선해볼 수 있다.
객체 지향 프로그래밍은 코드의 중복을 최소화하여 재사용성을 증가시킬 수 있다. 복잡한 로직이 들어갈수록 빛을 발휘하는 방법이다.
처음에는 뭐든 어렵지만 하나씩 기능을 구현하고 시행착오를 겪으며 하다보면 무조건 잘할 수 있다!