FastAPI ch09 의존성 충돌 및 데이터베이스 연결 트러블슈팅 리포트

FastAPI ch09 의존성 충돌 및 데이터베이스 연결 트러블슈팅 리포트

본 포스팅은 깃허브 클라우드 워크스페이스(GitHub Codespaces)의 Python 3.12 환경에서 예제 프로젝트(ch09/planner)를 구동하는 과정 중 발생한 패키지 버전 불일치 오류와 데이터베이스(MongoDB) 연결 실패 문제를 소스코드 수정 없이 오직 인프라 설정 및 패키지 최적화만으로 해결한 기술적 기록입니다.

💡 핵심 요약: Python 3.12에서 발생한 asyncio 및 email-validator 버전 오류를 상위 호환 패키지 세트로 격파하고, 도커(Docker) 기반 데이터베이스 다중 가동 및 pip freeze 역추적을 통해 인프라 환경을 완벽하게 동기화했습니다.
Issue 1: Python 3.12 라이브러리 문법 삭제로 인한 ImportError

[증상] 책의 오리지널 requirements.txt 기반 패키지 설치 후 서버 구동(python main.py) 시, asyncio 하위 모듈 진입 단계에서 시스템이 전면 중단되는 오류가 발생했습니다.

ImportError: cannot import name 'coroutine' from 'asyncio' (/home/codespace/.python/current/lib/python3.12/asyncio/__init__.py)

[원인] 파이썬 3.12 버전 번역기부터 과거의 레거시 문법인 asyncio.coroutine이 전면 삭제되었으나, 예제에 고정된 구버전 프레임워크(FastAPI 구버전, Motor 구버전 등)가 해당 문법을 여전히 참조하고 있어 발생한 호환성 충돌이었습니다.

[해결] 소스코드를 건드리지 않는 원칙에 따라, 기존 낡은 패키지 주머니를 완전히 삭제한 후 파이썬 3.12 환경을 정식 지원하는 최적의 상위 호환 버전 세트를 가상환경 내에 수동으로 재구성하여 일괄 클린 설치를 집행했습니다.

pip uninstall -y fastapi uvicorn motor beanie passlib python-jose email-validator
pip install fastapi==0.104.1 uvicorn==0.24.0 motor==3.3.2 beanie==1.25.0 email-validator==2.1.0
Issue 2: MongoDB 연결 설정 미비 및 다중 터미널 가동 문제

[증상] 패키지 버전 충돌을 격파한 후, 애플리케이션 시작 대기(Waiting for application startup) 로그 출력 직후 데이터베이스 연결 자격증명이 누락되었다는 구성 오류가 연쇄적으로 분출되었습니다.

pymongo.errors.ConfigurationError: No default database name defined or provided.
ERROR: Application startup failed. Exiting.

[원인] 백엔드 서비스(FastAPI)가 기동될 때 데이터를 적재할 식재료 창고인 MongoDB 데이터베이스 엔진이 로컬 시스템 내에 가동되고 있지 않았으며, 환경 변수 수첩(.env) 내의 접속 경로 포트 번호가 클라우드 컨테이너의 포트 포워딩 환경과 일치하지 않아 발생한 통신 단절이었습니다.

[해결] 첫째, + 버튼을 활용해 **독립적인 2번 터미널(알바생)을 추가 개설**하고, 백그라운드 환경에서 식재료 창고를 상시 열어두는 도커 컴포즈 오케스트레이션 명령을 단독 실행시켰습니다.

docker compose -f docker-compose.xml up -d database

둘째, 깃허브 클라우드가 무작위로 매핑한 포트 가상 번호(예: 32768)를 정확히 추적하여 프로젝트 내 비밀 수첩인 .env 파일의 DATABASE_URL 주소 값을 물리적으로 동기화 튜닝했습니다. 그 결과 서버 재시작 시 Application startup complete와 함께 초록색 200 OK 통신망이 완벽하게 결속되었습니다.

Infrastructure Freezing: 재현 가능성을 위한 최종 동기화

[결과 보존] 트러블슈팅이 완전히 종결된 직후, 다음 챕터 학습 시 동일한 시행착오를 차단하기 위해 pip freeze 명령을 사용하여 현재 완벽하게 정제된 파이썬 3.12용 의존성 환경 구조를 설정 파일에 영구 박제(Freeze)했습니다.

pip freeze > requirements.txt

동시에 실시간 기계어 변환 과정에서 생성되는 캐시 찌꺼기 파일(.pyc)들이 깃의 추적 목록을 더럽히지 않도록 만능 블랙리스트 수첩 규칙(__pycache__/)을 .gitignore에 심어 줌으로써, 소스 제어창을 완전히 투명하게 리팩토링하고 최종 세이브포인트(Commit)를 깔끔하게 마무리했습니다.

댓글

인기 포스츠

"내 말이 그 말이야!" 원어민들이 매일 쓰는 맞장구 영어 표현 3가지

"인생에 참여하라" 삶을 변화시키는 영어 표현 2가지

2. Local Post Workspace Update and Technical SEO Template Deployment