Python3 [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. [Python] 사과게임 (1) - 이미지에서 숫자 추출하기 사과게임을 하다가 모든 사과를 다 제거할 수 있는 맵이 존재하는지 궁금해서파이썬으로 해당 맵을 체크할 수 있는지 확인하는 프로그램을 작성하려고 한다.개발환경Colab구글 드라이브 연동from google.colab import drivedrive.mount('/content/drive') 개발환경은 간단하게 Colab을 이용했으며, 환경 구성을 위해 구글 드라이브를 연동하고 OpenCV와 Tesseract 등을 추가적으로 설치했다.OpenCV 및 Tesseract 설치!pip install opencv-python!sudo apt install tesseract-ocr!pip install pytesseract OpenCV는 실시간 컴퓨터 비전을 목적으로 하는 오픈소스 라이브러리이다. C/C++ 언어로 .. 2024. 3. 7. 이전 1 다음