728x90

파이썬 공식 홈페이지에서는 아래와 같은 코드로 디버그를 실행하도록 안내하고 있습니다.

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

하지만 개발을 진행된 프로젝트의 경우 위 코드로 fast api를 실행할 때, 아래와 같은 오류가 발생할 수 있습니다.

Traceback (most recent call last):
  File "/Users/project/app/main.py", line 134, in <module>
    app.mount("/static", StaticFiles(directory="app/static"), name="static")
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/.../staticfiles.py", line 57, in __init__
    raise RuntimeError(f"Directory '{directory}' does not exist")
RuntimeError: Directory 'app/static' does not exist

위 에러 메세지는 app/static 디렉토리가 존재하지 않는다고 하지만, 실제 프로젝트 환경에서는 app/static 폴더가 존재합니다. 이를 확인하기 위해 아래 코드를 작성하였습니다.

logging.info("*" * 100)
logging.info(f"현재 작업 폴더: {os.getcwd()}")
static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "static"))

logging.info(f"Static 폴더 경로: {static_dir}")  # 경로 확인을 위한 출력

if os.path.isdir(static_dir):
    logging.info("Static 폴더 존재.")
else:
    logging.info("Static 폴더 부재.")
logging.info("*" * 100)

---

2024-06-04 09:53:42,771 - INFO - *********************************************************************************
2024-06-04 09:53:42,771 - INFO - 현재 작업 폴더: /Users/project/app
2024-06-04 09:53:42,771 - INFO - Static 폴더 경로: /Users/project/app/static
2024-06-04 09:53:42,771 - INFO - Static 폴더 존재.
2024-06-04 09:53:42,771 - INFO - *********************************************************************************

사실, mount하고 있는 코드(app.mount("/static", StaticFiles(directory="app/static"), name="static"))를 주석처리하여 문제를 넘길 수 있지만, 매번 주석처리를 하기도 귀찮고 static에 있는 파일을 사용하는 경우가 있기 때문에 다른 방법을 찾아야 했다.

그래서 생각한 방법이 os 라이브러리를 사용하여 해당 경로를 절대 경로로 지정하는 방법이었다.

static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "static"))
app.mount("/static", StaticFiles(directory=static_dir), name="static")

위처럼 코드를 변경한 후, 로컬 환경에서 이상 없이 작동하였다.
서버 개발자는 배포 환경이 중요하므로, 배포 환경에서도 바로 테스트를 진행했다.

배포 환경에서는 다음과 같이 log가 찍혔다.

2024-06-04 00:52:45,292 - INFO - ******************************************************************************
2024-06-04 00:52:45,293 - INFO - 현재 작업 폴더: /opt/code
2024-06-04 00:52:45,293 - INFO - Static 폴더 경로: /opt/code/app/static
2024-06-04 00:52:45,293 - INFO - Static 폴더 존재.
2024-06-04 00:52:45,294 - INFO - ******************************************************************************

배포 환경에서도 static 파일이 이상 없이 mount 되었고, 특별한 이슈 없이 잘 작동 되는 것을 확인하였다.
static 폴더 내에 파일 등이 모두 이상 없이 사용되는 것 또한 확인하였다.

이제 디버깅을 위해 mount코드를 주석처리하는 등 불필요한 과정을 생략할 수 있게 되었디.

 

 

 

디버깅 - FastAPI

FastAPI framework, high performance, easy to learn, fast to code, ready for production

fastapi.tiangolo.com

 

반응형
코드플리