- CS_RETURN_REQUEST_URL 기본값을 http://dbx-corm:8002/api/return/request 로
(docker 컨테이너 간 통신, 옛 127.0.0.1:8001 폐기).
- httpx 요청에 X-Service-Token 헤더 첨부 (CORM AuthGuard 우회용).
INTERNAL_SERVICE_TOKEN env 가 있을 때만 첨부.
- .env.example 에 두 항목 안내 추가.
- index.html: profile-name-block 제거. 이름은 이메일 span 의 title(hover tooltip)로 보존.
- app.js: 이제 표시하지 않는 user-name 관련 코드 정리.
- style.css: profile-email 흰색 + 굵게, 로그아웃 버튼도 흰색 + 어울리는 반투명 배경.
- read_root() 가 세션 미인증 시 dbx-main /login?next=/orderlist/ 로 302.
OMS 는 더 이상 자체 로그인 UI 를 가지지 않는다.
- index.html: #login-screen 블록 제거, dashboard 만 렌더.
- 우측 상단 프로필 영역을 메인 페이지 스타일로 개편:
이름 + 이메일 + 아바타(Google picture URL, 폴백 아이콘) + 로그아웃 텍스트 버튼.
- main.py 가 세션의 user_name/user_email/user_picture 를 HTML placeholder 로 치환.
- app.js checkAuth() 단순화: 화면 토글 제거, 401 시 dbx-main 로그인으로 자동 이동.
- style.css 에 새 프로필 영역 CSS 추가.
Google 아바타가 보이려면 dbx-main 도 같이 user_picture 를 세션 top-level 에
저장하도록 수정됨 (dbx-main 별도 커밋).
Starlette Mount 가 FastAPI(root_path=...) 의 값을 mount 경로에 흡수해버려서
@app.get 라우트(/health/db)는 그대로지만 mount(/static)는 /orderlist/static
으로 등록되는 비대칭이 발생했다. NPM 이 /orderlist prefix 를 잘라서 백엔드로
보내면 /health/db 는 200 이지만 /static/css/style.css 는 404 가 났다.
해결: FastAPI 생성자에서 root_path 인자 제거. 대신 Dockerfile 의 uvicorn 명령에
--root-path "${APP_ROOT_PATH:-}" 를 추가해 ASGI scope 레벨에서만 root_path 가
세팅되도록 한다. 이러면 모든 라우트/마운트가 prefix 없이 등록되고 URL 생성
시에만 prefix 가 붙는다.
APP_ROOT_PATH 환경변수와 main.py 의 HTML 경로 치환 로직은 그대로 유지.
- SESSION_SECRET_KEY 가 .env 에 없으면 컨테이너 기동 단계에서 RuntimeError.
알려진 기본값(super-secret-key) 폴백 제거로 양쪽 secret 불일치 사고 방지.
- .env.example 의 SESSION_SECRET_KEY 안내 강화 (openssl 명령, dbx-main 동기화 언급).
dbx-main 의 SessionMiddleware max_age 가 8h(28800)인데 OMS 코드 기본값은 14d였다.
운영 .env 에 SESSION_MAX_AGE 가 빠지면 한쪽만 일찍 만료돼 재로그인 루프가 생길 수 있어
코드 기본값을 28800으로 통일한다.
.env.example 은 이미 SESSION_MAX_AGE=28800 으로 표기돼 있어 변경 없음.