[AITech][Product Serving] 20220525 - Fast API 3 (Fast API 심화)
본 포스팅은 SOCAR의 ‘변성윤’ 마스터 님의 강의를 바탕으로 작성되었습니다.
Fast API 3 (Fast API 심화)
Event Handler
설명
- 이벤트가 발생했을 때, 그 처리를 담당하는 함수
- FastAPI에선 Application이 실행할 때, 종료될 때 특정 함수를 실행할 수 있음
코드
@app.on_event("startup")
@app.on_event("shutdown")
예시
- startup 할 때 머신러닝 모델 Load
- shutdown 할 때 로그 저장
API Router
설명
- API Router는 더 큰 애플리케이션들에서 많이 사용되는 기능
- API Endpoint를 정의
- Python Subpackage
- APIRouter는 Mini FastAPI로 여러 API를 연결해서 활용
코드
- 기존에 사용하던 @app.get, @app.post를 사용하지 않고, router 파일을 따로 설정하고 app에 import하여 사용
@{router명}.get
,@{router명}.post
예시
- user Router, order Router 2개 생성
- app에 연결 (include_router)
- 실제 활용 시에는 하나의 파일에 저장하지 않고 각각 다른 파일에 저장하여 app에서 import
- user.py, order.py
[예제 프로젝트 구조]
Error Handling
설명
- Error Handling은 웹 서버를 안정적으로 운영하기 위해 반드시 필요한 주제
- 서버에서 Error가 발생한 경우, 어떤 Error가 발생했는지 알아야 하고 요청한 클라이언트에 해당 정보를 전달해 대응할 수 있어야 함
- 서버 개발자는 모니터링 도구를 사용해 Error Log를 수집해야 함
- 발생하고 있는 오류를 빠르게 수정할 수 있도록 예외 처리를 잘 만들 필요가 있음
예시
- item_id가 1~3까지 존재, 4 이상의 숫자가 들어올 경우 Key Error 발생
- Internal Server Error
- item_id가 5일 경우 Internal Server Error 500 return
- 이렇게 되면 클라이언트는 어떤 에러가 난 것인지 정보를 얻을 수 없고, 자세한 에러를 보려면 서버에 직접 접근해서 로그를 확인해야 함
- 에러 핸들링을 더 잘 하려면 에러 메시지와 에러의 이유 등을 클라이언트에 전달하도록 코드를 작성해야 함
HTTPException
- FastAPI의 HTTPException 클래스는 Error response를 더 쉽게 보내도록 해 줌
- HTTPException을 이용해서 클라이언트에게 더 자세한 에러 메시지 전송
Backbround Task
설명
- FastAPI는 Stralett이라는 비동기 프레임워크를 래핑해서 사용
- FastAPI의 기능 중 Background Tasks 기능은 오래 걸리는 작업들을 background에서 실행함
- Online Serving에서 CPU 사용이 많은 작업들을 background task로 사용하면, 클라이언트는 작업 완료를 기다리지 않고 즉시 response를 받아볼 수 있음
예시
- Background tasks를 사용하지 않은 작업들은 작업 시간만큼 응답을 기다림
- Background tasks를 사용한 작업들은 기다리지 않고 바로 응답을 주기 때문에 0초 소요
- 실제 작업은 background에서 실행
- 작업 결과물을 조회할 때는 Task를 어딘가에 저장해두고, GET 요청을 통해 Task가 완료됐는지 확인
Leave a comment