python_fastapi2 [FastAPI] 요청 단위 로깅 구현하기 - Middleware, ContextVar, Decorator 문제상황: 요청 단위 로깅 및 쓰레드 로컬이번에 로깅 시스템을 개선하는 작업을 진행했습니다. 원래는 아주 단순한 수준의 로깅만 되어 있었는데, 실제로 장애나 예외 상황이 발생했을 때 특정 요청의 흐름을 추적하기가 너무 어려웠습니다. 예를 들어, 같은 시점에 여러 요청이 들어오면 로그가 섞여버리기 때문에 "이 로그가 어떤 요청에서 나온 건지" 확인하려면 로그 타임스탬프나 유추에 의존해야 했습니다. 그래서 이번에 요청 단위로 UUID 같은 고유한 ID를 부여하고, 그걸 모든 로그에 자동으로 포함시키는 방식을 적용했습니다. 자바/스프링에서는 AOP와 ThreadLocal을 지원하기 때문에 이러한 로깅을 손쉽게 적용할 수 있습니다. 요청이 들어올 때마다 ThreadLocal에 request ID를 저장하고, .. 2025. 10. 14. [Python] Context Manager 문제상황프로젝트를 운영하던 중, 로그에 주기적으로 아래와 같은 에러가 발생했습니다. [ERROR] token_manager: Thread error during token refresh 처음에는 일시적인 네트워크 문제나 인증 서버의 응답 지연이라고 생각했지만, 해당 로그가 계속 같은 주기로 쌓이고 있었고, 특정 기능을 호출하지 않아도 지속적으로 에러가 발생했습니다. 결국 코드 레벨에서 로그를 추적한 결과, 해당 오류는 제가 작성한 코드가 아니라 사용 중이던 SDK 내부의 토큰 관리 스레드(token_manager)에서 발생하고 있음을 확인했습니다. 이 객체는 내부적으로 인증 토큰을 자동으로 갱신하는 token_manager를 가지고 있었고, 토큰 만료 시마다 백그라운드 스레드를 통해 지수 백오프(Expo.. 2025. 10. 1. 이전 1 다음