디버깅

디버깅 (Debugging)

코드가 예상대로 안 돌아갈 때, 에디터에 붙어 있는 디버거(debugger)를 FastAPI 코드에 연결할 수 있어요. 예를 들어 Visual Studio Code나 PyCharm에서요.

출처: 공식문서

uvicorn 직접 호출하기 (Call uvicorn)

FastAPI 애플리케이션에서 uvicorn을 임포트해서 직접 실행하면, 디버거를 붙이기 쉽게 서버를 우리 코드에서 바로 시작할 수 있어요:

import uvicorn
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def root():
    a = "a"
    b = "b" + a
    return {"hello world": b}


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

보통은 터미널에서 uvicorn 명령어로 서버를 띄우지만, 이렇게 uvicorn.run(app, host="0.0.0.0", port=8000)으로 직접 호출하면 서버가 이 파일에서 시작해요. 그래서 디버거가 이 코드에 붙어 중단점(breakpoint)에서 멈출 수 있어요.

__name__ == "__main__"에 대하여 (About __name__ == "__main__")

파일 이름이 myapp.py라고 해 볼게요. 이걸 이렇게 실행하면:

$ uv run python myapp.py

Python이 자동으로 만들어 주는 내부 변수 __name__의 값이 문자열 "__main__"이 돼요. 그래서 이 부분이 실행되는 거죠:

uvicorn.run(app, host="0.0.0.0", port=8000)

반대로 이 파일이 다른 모듈에 의해 import된다면 __name__"__main__"이 아니게 되고, uvicorn.run(...)은 실행되지 않아요. import했을 때 서버까지 자동으로 떠버리는 일을 막아 주는 안전장치예요.

디버거로 코드 실행하기 (Run your code with your debugger)

이제 서버를 직접 띄우는 코드가 있으니, 에디터의 디버거로 이 파일을 실행하면 돼요.

Visual Studio Code에서는 이렇게 해요:

  1. "Debug" 패널로 간다.
  2. "Add configuration..."을 누른다.
  3. "Python"을 선택한다.
  4. "Python: Current File (Integrated Terminal)" 옵션으로 디버거를 실행한다.

그러면 FastAPI 코드로 서버가 시작되고, 중단점에서 멈추는 식으로 동작해요.

PyCharm을 쓴다면:

  1. "Run" 메뉴를 연다.
  2. "Debug..." 옵션을 선택한다.
  3. 나타나는 컨텍스트 메뉴에서 디버그할 파일(여기선 main.py)을 선택한다.

마찬가지로 FastAPI 코드로 서버가 시작되고, 중단점에서 멈춰요.

핵심은 서버를 uvicorn CLI로가 아니라 파일에서 직접 시작하게 만드는 거예요. 그래야 디버거가 그 파일·그 코드 라인을 인식하고 중단점을 제어할 수 있어요.

더 알아보기 (Learn more)