디버깅
디버깅 (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에서는 이렇게 해요:
- "Debug" 패널로 간다.
- "Add configuration..."을 누른다.
- "Python"을 선택한다.
- "
Python: Current File (Integrated Terminal)" 옵션으로 디버거를 실행한다.
그러면 FastAPI 코드로 서버가 시작되고, 중단점에서 멈추는 식으로 동작해요.
PyCharm을 쓴다면:
- "Run" 메뉴를 연다.
- "Debug..." 옵션을 선택한다.
- 나타나는 컨텍스트 메뉴에서 디버그할 파일(여기선
main.py)을 선택한다.
마찬가지로 FastAPI 코드로 서버가 시작되고, 중단점에서 멈춰요.
핵심은 서버를 uvicorn CLI로가 아니라 파일에서 직접 시작하게 만드는 거예요. 그래야 디버거가 그 파일·그 코드 라인을 인식하고 중단점을 제어할 수 있어요.