[FastAPI] uvicorn을 사용한 FastAPI의 변경이 감지되지 않는 원인 (`25.03.18 미해결 문제)

2025. 3. 18. 20:05·Backend/FastAPI
💡 자세한 원인을 분석하고 싶으나 에러 재현하는 방법을 알 수 없어, 추후 동일 문제가 다시 나타날 경우 업데이트할 예정입니다.

1. Introduction

 

📌 Why aren't the changes being updated?

내 운영환경은 Windows 11이었고, VSCode 내장 터미널에 다음과 같이 애플리케이션을 실행 중이었다.

uvicorn app.main:app --reload --host=127.0.0.1 --port=8080

 

지금껏 아무런 문제가 발생한 적이 없고, 이번 작업은 코드 복잡도가 더 증가하기 전에 무지성으로 작업한 코드를 리팩토링 하는 간단한 일이었다.

그런데 리팩토링 도중 다음과 같은 에러가 발생했다.

 

2025-03-17 19:23:36,025 - [PID:16652/TID:6740] - app.common.aop.ApiLogRouter - INFO - API Request:
{'httpMethod': 'POST', 'path': '/api/v1/correct', 'headers': Headers({'user-agent': 'PostmanRuntime/7.43.2', 'accept': '*/*', 'cache-control': 'no-cache', 'postman-token': '6ac1b793-fea0-49e2-a432-10e233245398', 'host': '127.0.0.1:8080', 'accept-encoding': 'gzip, deflate, br', 'connection': 'keep-alive', 'content-length': '209715', 'content-type': 'audio/mp4'}), 'queryParameters': QueryParams('')}
2025-03-17 19:23:36,025 - [PID:16652/TID:6740] - app.domain.services.correct_text_helper - ERROR - Error processing request: 'bytes' object has no attribute 'original'
2025-03-17 19:23:36,025 - [PID:16652/TID:6740] - app.api.routes.routes - ERROR - Error processing request: 'bytes' object has no attribute 'original'

파라미터로 전달받은 command 객체에서 command.original로 값을 조회하는데, command가 bytes 타입으로 식별되고 있던 것이다. 

 

파라미터를 bytes로 받은 건 임시로 구현할 때 잠시 끼워맞춘 방법이었으니, 그냥 변경 사항이 반영이 안 되었겠거니 싶어서 애플리케이션을 재실행했음에도 동일한 에러가 발생했다.

 

당연히 내가 놓친 부분이 있다고 생각해서 로그를 추가로 남겼으나, 반드시 나타나야 할 로그는 나오지도 않았다.

 

그래~ 한 번 해보자~~

 


2. Trial and Error

 

📌 trial1. --reload option

uvicorn 명령어에 reload 옵션을 추가하면, 소스 코드 변경마다 hot reload를 실행한다.

정확한 원리는 모르겠다만, 애플리케이션을 완전히 재실행하면 될 것이라 생각했으나 실패.

 

📌 trial2. pycache

파이썬 스크립트를 실행시키면 __pychache__라는 폴더와 함께 .pyc 확장자 파일이 하나 생기는 것을 볼 수 있다.

이게 일종의 성능 최적화용인데, python이 아무리 인터프리터 언어라지만 매번 소스코드 읽으면 아무래도 성능이 느릴 수밖에 없으니, 인터프리터는 항상 __pycache__ 폴더의 .pyc 파일이 최신 컴파일 버전이 있는 지 확인한다.

 

예전에 django 개발할 때 아직도 기억나는 건, 이 cache가 가끔 문제를 일으킬 때가 있었다는 것.

find . -name "__pycache__" -type d -exec rm -rf {} +

그래서 루트 폴더에서 __pycache__ 폴더를 전부 날려버리고, 이참에 잊어먹었던 .gitignore까지 등록해준 후 재실행 해보았다.

 

...그러나 여전히 코드 변경 사항이 반영이 되질 않았다.

 

📌 trail3. IDE

VSCode의 터미널을 사용한 것이 문제가 되는 건 아닐까 싶어서, PyCharm 2023 버전으로 실행했으나 동일 현상 반복

 

📌 trail4. PC restart

PC를 재시작해보겠다고 생각한 계기가 좀 웃긴데, Jupyter Notebook은 모듈을 한 번 불러오면 커널을 재시작할 때까지 다시 불러오지 않는다는 글을 읽었다.

이걸 읽고 "커널...재시작...? PC를 껐다 켜볼까?"라는 기적의 사고 흐름으로 이어졌다.

 

물론, 이런 주먹구구식 해결 방법을 혐오하지만,

이렇게까지 해도 문제가 해결이 안 되면 python 혹은 uvicorn을 low-level까지 파고 들어야 할 명분이 생길 테니,

공부할 게 늘어서 싱글벙글하면서 기대도 안 하고 PC를 재실행 했다.

 

왜 되는 건데

 


3. Reason?

 

📌 taskkill

다행히도 나만 이런 현상을 겪는 건 아니었는데, Stackoverflow와 Reddit에서 관련된 주제로 논의하는 것을 찾을 수 있었다.

PyCharm 쓰지 말고, 직접 명령어에 uvicorn 명령어 쳐서 실행하라는 조언은 나와 관련없으니 버리고,

 

한 가지 흥미로운 것은 다음 명령으로 실행 중인 모든 uvicorn 인스턴스를 확인하고, 모두 종료 후 재실행하라는 것이었다.

tasklist /FI "IMAGENAME eq python.exe"

taskkill /F /PID <프로세스ID>

 

그런데 port가 8080으로 고정되어 있는데, 프로세스가 두 개 이상 뜬다는 게 말이 되나..?

하지만 또 생각해보니 PC 재시작해서 되는 걸 보면, 진짜 이거 원인일 수도 있겠다는 생각이 들긴 한다.

 

당장 테스트해보고 싶은데, 문제가 다시 발생할 때까진 어떻게 해볼 방법이 없는 관계로 일단 미해결 상태로 포스팅을 남겨둔다.

저작자표시 비영리 (새창열림)
'Backend/FastAPI' 카테고리의 다른 글
  • [FastAPI] 동시성(Concurrency)과 병렬성(Parallelism)에 대한 고찰과 FastAPI 내부 메커니즘 분석 (오라, Single Thread 세상이여)
  • [FastAPI] 알리바바 클라우드 Qwen API와 FastAPI 연동
  • [Fast API] 기초 설정 및 데이터베이스 연결
나죽못고나강뿐
나죽못고나강뿐
싱클레어, 대부분의 사람들이 가는 길은 쉽고, 우리가 가는 길은 어려워요. 우리 함께 이 길을 가봅시다.
  • 나죽못고나강뿐
    코드를 찢다
    나죽못고나강뿐
  • 전체
    오늘
    어제
    • 분류 전체보기 (498)
      • Computer Science (61)
        • Git & Github (4)
        • Network (17)
        • Computer Structure & OS (13)
        • Software Engineering (5)
        • Database (9)
        • Security (5)
        • Concept (8)
      • Frontend (22)
        • React (14)
        • Android (4)
        • iOS (4)
      • Backend (87)
        • Spring Boot & JPA (53)
        • Django REST Framework (14)
        • MySQL (10)
        • Nginx (1)
        • FastAPI (4)
        • kotlin (2)
        • OpenSearch (1)
        • AI-Native (2)
      • DevOps (24)
        • Docker & Kubernetes (11)
        • Naver Cloud Platform (1)
        • AWS (2)
        • Linux (6)
        • Jenkins (0)
        • GoCD (3)
      • Coding Test (112)
        • Solution (104)
        • Algorithm (7)
        • Data structure (0)
      • Reference (149)
        • Effective-Java (90)
        • Pragmatic Programmer (0)
        • CleanCode (11)
        • Clean Architecture (5)
        • Test-Driven Development (4)
        • Relational Data Modeling No.. (0)
        • Microservice Architecture (2)
        • 알고리즘 문제 해결 전략 (9)
        • Modern Java in Action (0)
        • Spring in Action (0)
        • DDD start (0)
        • Design Pattern (6)
        • 대규모 시스템 설계 (8)
        • JVM 밑바닥까지 파헤치기 (4)
        • The Pragmatic Programmer (1)
        • AI Engineering (6)
        • LLM을 활용한 실전 AI 애플리케이션 개발 (2)
        • 요즘 개발자를 위한 시스템 설계 수업 (1)
      • Service Planning (2)
      • Side Project (5)
      • AI (1)
      • MATLAB & Math Concept & Pro.. (2)
      • Review (26)
      • Interview (4)
      • IT News (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃
  • 공지사항

    • AI Native 탭 개설
    • 요새 하고 있는 것
    • 한동안 포스팅은 어려울 것 같습니다. 🥲
    • N Tech Service 풀스택 신입 개발자가 되었습니다⋯
    • 취업 전 계획 재조정
  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
나죽못고나강뿐
[FastAPI] uvicorn을 사용한 FastAPI의 변경이 감지되지 않는 원인 (`25.03.18 미해결 문제)
상단으로

티스토리툴바