본문 바로가기
Coding/Python

FastAPI에서 HTTPException과 로깅으로 에러를 효율적으로 처리하는 방법

by 포스트it 2024. 11. 6.
728x90
반응형

FastAPI에서 HTTPException과 로깅으로 에러를 효율적으로 처리하는 방법

안녕하세요! 오늘은 애플리케이션 개발에서 꼭 알아야 할 에러 처리와 로깅에 대해 쉽게 설명해드리려고 합니다.

특히 FastAPI를 사용할 때 어떻게 HTTPException로깅(logging)을 활용하는지 알아보겠습니다.


1. FastAPI에서 HTTPException 사용하기

HTTPException이란?

FastAPI에서 에러가 발생했을 때 사용자에게 적절한 에러 메시지와 상태 코드를 전달하려면 HTTPException을 사용합니다. 이것은 FastAPI가 제공하는 기본 예외 처리 클래스입니다.

간단한 예제

예를 들어, 사용자가 존재하지 않는 아이템을 요청할 때 404 에러를 반환하고 싶다면 다음과 같이 코드를 작성합니다.

from fastapi import FastAPI, HTTPException

app = FastAPI()

items = {"apple": "A sweet red fruit", "banana": "A yellow fruit"}

@app.get("/items/{item_name}")
def read_item(item_name: str):
    if item_name not in items:
        # 아이템이 없을 경우 404 에러 반환
        raise HTTPException(status_code=404, detail="Item not found")
    return {"item_name": item_name, "description": items[item_name]}

위 코드에서 item_nameitems 딕셔너리에 없으면 HTTPException을 발생시켜 404 상태 코드와 "Item not found" 메시지를 반환합니다.

커스텀 에러 메시지

더 구체적인 에러 메시지를 전달하고 싶다면 detail에 원하는 내용을 넣으면 됩니다.

raise HTTPException(status_code=400, detail=f"{item_name} is not available")

이렇게 하면 400 상태 코드와 함께 아이템 이름이 포함된 에러 메시지를 반환합니다.


2. Python의 로깅(logging)으로 애플리케이션 상태 추적하기

로깅이란?

로깅은 애플리케이션이 실행되는 동안 발생하는 다양한 정보를 기록하는 것입니다. 이를 통해 코드가 어떻게 동작하는지, 어디서 문제가 발생하는지 알 수 있습니다.

로깅 설정하기

먼저 Python의 logging 모듈을 가져옵니다.

 
import logging

logging.basicConfig(level=logging.INFO)

이렇게 하면 INFO 레벨 이상의 로그 메시지가 출력됩니다.

로거(logger) 생성하기

로깅을 사용할 때는 로거를 생성하여 사용합니다.

logger = logging.getLogger(__name__)

__name__은 현재 모듈의 이름을 나타냅니다.

로깅 사용 예제

FastAPI 엔드포인트에서 로깅을 사용해보겠습니다.

@app.get("/log-test")
def log_test():
    logger.info("INFO 레벨 로그입니다.")
    logger.warning("WARNING 레벨 로그입니다.")
    logger.error("ERROR 레벨 로그입니다.")
    return {"message": "로그를 확인해보세요."}

이 엔드포인트를 호출하면 콘솔에 다음과 같은 로그가 출력됩니다.

INFO:__main__:INFO 레벨 로그입니다.
WARNING:__main__:WARNING 레벨 로그입니다.
ERROR:__main__:ERROR 레벨 로그입니다.

로그를 파일에 저장하기

로그를 파일에 저장하려면 basicConfigfilename 파라미터를 추가합니다.

logging.basicConfig(level=logging.INFO, filename='app.log', filemode='a')
  • filename='app.log': 로그를 저장할 파일 이름입니다.
  • filemode='a': 로그를 추가 모드로 기록합니다. 기존 파일이 있을 경우 내용을 유지하고 뒤에 추가합니다.

이렇게 설정하면 로그 메시지가 app.log 파일에 저장됩니다.


마무리

오늘은 FastAPI에서 HTTPException을 사용하여 에러를 처리하는 방법과 Python의 로깅(logging) 모듈로 애플리케이션의 상태를 추적하는 방법에 대해 알아보았습니다.

  • HTTPException을 사용하면 사용자에게 명확한 에러 메시지와 상태 코드를 전달할 수 있습니다.
  • 로깅을 통해 애플리케이션이 어떻게 동작하는지 실시간으로 확인하고, 문제 발생 시 빠르게 대응할 수 있습니다.

이 두 가지는 애플리케이션의 안정성을 높이는 데 큰 도움이 됩니다. 간단한 예제이지만 실제로 적용해보시면 개발과 유지 보수가 훨씬 수월해질 것입니다.

감사합니다!

728x90
반응형

댓글