uvicorn --root-path 설정 시 ASGI scope.path 가 환경/버전에 따라 prepend 되는
경우가 있어 매칭이 어긋났다. raw path 가 APP_ROOT_PATH 로 시작하면 잘라내고,
아니면 그대로 사용하도록 정규화.
증상: GET /health/db → 302 (exempt 미작동), next=/corm/corm/ (이중 prefix).
request.url.path 는 uvicorn --root-path 가 prepend 된 형태(/corm/health/db)라
_AUTH_EXEMPT_PREFIXES 의 /health prefix 와 매칭 안 됐다. scope.path 는
root_path 가 제외된 형태(/health/db)라 정확히 매칭된다.
next_path 계산도 같이 정리 (이중 prefix 방지).
Starlette 의 add_middleware 는 마지막에 추가한 것이 가장 바깥(먼저 실행).
AuthGuardMiddleware 가 request.session 을 보려면 SessionMiddleware 가
먼저 scope 에 session 을 주입해야 한다. 따라서:
app.add_middleware(AuthGuardMiddleware) # 안쪽
app.add_middleware(SessionMiddleware, ...) # 바깥쪽 (먼저 실행)
주요 변경사항:
- DB 접속정보를 환경변수(.env) 방식으로 분리
- orderlist_app → orderlist_db 변경 (main.py, routers/returns.py)
- 네이버/카페24 API 키도 환경변수로 분리
- Dockerfile / docker-compose.yml 작성 (외부 PostgreSQL 네트워크 연결)
- .gitignore: 민감파일(.env, cafe24_tokens.json, manual-ordering.json) 제외
- 불필요 파일 정리 (venv, __pycache__, 일회성 스크립트, xlsx 등)
- README.md / .env.example / push_to_gitea.bat 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>