Commit Graph

11 Commits

Author SHA1 Message Date
king 55e54aacd9 feat(returns): 반품 입고/조회 시 복수 송장번호 주문 매칭 기능 추가 및 예외 처리 강화
- 복수 송장번호 검색 기능 최적화: routers/returns.py 파일의 단건 조회(/lookup) 및 벌크 입고(/receive/bulk) 내 orders 테이블 대상 SQL 쿼리 개선 / 기존 단일 송장번호 완전 일치 검사(B-Tree 인덱스 스캔)를 유지하면서, 불일치 시 명시적 IS NOT NULL 및 빈값 검사 방어 코드를 수행하여 안정성 확보 / 쉼표(,)나 공백( ) 외에도 슬래시(/) 및 세미콜론(;) 구분자('[,\s/;]+')까지 함께 분리 지원하여 다양한 입력 형태 호환 보장

- 코드 안정성 확보: 다중행 SQL 문자열에 raw string(r 접두사)를 적용하여 Python의 이스케이프 시퀀스 구문 경고(SyntaxWarning: '\s' is an invalid escape sequence) 해결
2026-05-26 21:17:58 +09:00
king ed2819d90e feat(config): 구글 시트 설정 데이터 인메모리 캐싱 적용 및 동기화 최적화
- 설정 조회 속도 개선을 위한 인메모리 캐싱 도입: read_config(force_refresh=False)로 변경하여 캐시가 존재하고 유효 기간(10분) 내인 경우 구글 시트 API 호출을 건너뛰고 메모리 데이터 즉시 반환 / 다중 스레드 환경을 고려한 threading.Lock 및 Double-Checked Locking 적용으로 동시성 안전 보장

- 실시간 데이터 일관성 유지: write_config(config) 함수 성공 시 새로 작성한 설정 로우(rows) 데이터로 로컬 캐시 즉시 최신화

- 신규 제어 장치 및 Warm up 추가: /api/config/refresh (POST) API 신설 (구글 시트 웹 문서에서 직접 변경 시 강제로 캐시를 갱신할 수 있는 기능 제공) / 서버 시작(startup_event) 시 캐시 초기 적재(Warm up) 처리 추가로 첫 로딩 딜레이 완전 차단
2026-05-26 00:19:42 +09:00
king c4973224aa feat(auth): X-Service-Token 헤더로 서비스 간 호출 우회 허용
OMS 의 반품 신청 같은 서버-서버 호출은 사용자 세션이 없으므로 AuthGuard 가
401 로 막아왔다. INTERNAL_SERVICE_TOKEN env 가 설정돼 있고 요청 헤더
X-Service-Token 이 같은 값이면 세션 검사를 우회한다.

보안: NPM 의 /corm/ location 블록에서 외부에서 들어온 X-Service-Token 헤더를
proxy_set_header X-Service-Token ""; 로 strip 해야 외부에서 토큰 추측 공격 방지.
2026-05-24 18:15:00 +09:00
king 6288716992 fix(sso): AuthGuard 경로 정규화 — scope.path 가 root_path 포함 여부와 무관하게 동작
uvicorn --root-path 설정 시 ASGI scope.path 가 환경/버전에 따라 prepend 되는
경우가 있어 매칭이 어긋났다. raw path 가 APP_ROOT_PATH 로 시작하면 잘라내고,
아니면 그대로 사용하도록 정규화.

증상: GET /health/db → 302 (exempt 미작동), next=/corm/corm/ (이중 prefix).
2026-05-24 17:58:57 +09:00
king a8ea265e61 fix(sso): AuthGuard 가 ASGI scope.path 를 사용하도록 변경
request.url.path 는 uvicorn --root-path 가 prepend 된 형태(/corm/health/db)라
_AUTH_EXEMPT_PREFIXES 의 /health prefix 와 매칭 안 됐다. scope.path 는
root_path 가 제외된 형태(/health/db)라 정확히 매칭된다.

next_path 계산도 같이 정리 (이중 prefix 방지).
2026-05-24 17:56:09 +09:00
king 2795b93d43 fix(sso): 미들웨어 등록 순서 수정 — AuthGuard 가 session 을 읽을 수 있도록
Starlette 의 add_middleware 는 마지막에 추가한 것이 가장 바깥(먼저 실행).
AuthGuardMiddleware 가 request.session 을 보려면 SessionMiddleware 가
먼저 scope 에 session 을 주입해야 한다. 따라서:
  app.add_middleware(AuthGuardMiddleware)    # 안쪽
  app.add_middleware(SessionMiddleware, ...) # 바깥쪽 (먼저 실행)
2026-05-24 17:53:48 +09:00
king e8de7de170 fix(deps): itsdangerous 추가 — SessionMiddleware 의존성 2026-05-24 15:58:04 +09:00
king b17c3d14fb fix(docker): curl 설치 추가 — healthcheck 와 컨테이너 내 진단용 2026-05-24 15:55:05 +09:00
king 31fa8d573b feat(sso): dbx-main SSO 통합, /corm/ 서브경로 호스팅, 인증 미들웨어 적용
- SessionMiddleware 추가 (dbx-main/OMS 와 동일 SECRET_KEY/COOKIE_NAME/MAX_AGE).
  미설정 시 fail-fast.
- AuthGuardMiddleware: 미인증 시 HTML 요청은 dbx-main /login?next=... 으로 302,
  API 요청은 401 JSON. 예외 경로: /static/, /health, OAuth 콜백, /login, /logout.
- /health/db 엔드포인트 추가 (DB ping) — dbx-main 헬스 배지가 폴링.
- /login, /logout 라우트 추가 (자체 OAuth 없음, dbx-main 으로 302 위임).
- APP_ROOT_PATH 환경변수 도입 — Dockerfile 의 uvicorn --root-path 로 전달.
- templates/index.html: 모든 /static/, /js 절대경로를 {{ root_path }} 기반으로,
  window.APP_BASE_PATH 변수 주입.
- static/js/app.js: fetch wrapper 1개로 /api/* 호출에 APP_BASE_PATH prepend,
  401 응답 시 dbx-main 로그인으로 자동 이동. 32 곳 호출 사이트는 그대로 둠.
- Cafe24 OAuth 콜백의 hard-coded redirect 도 root_path 인지하도록 수정.
- docker-compose.yml: 호스트 포트 바인딩 제거(0.0.0.0:8002 노출 차단),
  expose 추가, web_net(npm_default) 외부 네트워크 attach, healthcheck 추가.
- .env.example 에 SSO/네트워크 항목 추가.
2026-05-24 15:44:28 +09:00
king a5fa1f43f3 chore: push_to_gitea.bat 인코딩 및 구문 호환성 수정
- 한글 제거 (Windows cmd 인코딩 문제)
- for 멀티라인 구문 → 서브루틴 방식으로 변경

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 15:15:42 +09:00
king 6e438344d0 init: dbx-corm 프로젝트 Docker 기반 마이그레이션
주요 변경사항:
- 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>
2026-05-24 15:11:34 +09:00