o2o-site-AEO/admin/backend/main.py
Mina Choi cabcdeaacc 구조: 내부 API 진입점을 admin/backend 로 옮긴다
admin/ 이 프론트만 있는 폴더였다. :9801 을 띄우는 코드는 solution/backend 안에
admin_main.py 로 얹혀 있었는데, 그러면 폴더만 봐서는 admin 에 백엔드가 있다는 걸 모른다.

  solution/backend/admin_main.py         → admin/backend/main.py
  solution/backend/router/admin_router.py → admin/backend/app.py

도메인 코드는 여전히 복제하지 않는다 — `PYTHONPATH=/app/solution/backend` 한 줄이
두 폴더를 잇는다. admin/backend 에 있는 건 진입점 두 파일뿐이다.

## 이미지 빌드 컨텍스트를 레포 루트로 올렸다

진입점이 admin/ 에, 도메인 코드가 solution/ 에 있어서 한 이미지에 둘 다 들어와야 한다.
나누면 requirements 를 두 번 설치하게 된다. 컨텍스트가 넓어진 만큼 루트 .dockerignore 로
프론트·문서·테스트·시크릿을 잘라냈다(옛 solution/backend/.dockerignore 대체).

이미지 배치:
  /app/solution/backend   ← 도메인 코드. api·worker 의 working_dir
  /app/admin/backend      ← 내부 API 진입점. api-admin 의 working_dir

검증: api·api-admin 둘 다 healthy, 다섯 엔드포인트(9800·9801·3000·3002·80) 전부 200.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019uYhHQdssRubirPirrdJJC
2026-08-31 16:14:19 +09:00

31 lines
1.1 KiB
Python

# 내부 운영 API 서버. 사장님 API(solution/backend/web_main.py, :9800)와
# **다른 프로세스·다른 포트**다.
#
# PYTHONPATH=../../solution/backend python main.py
#
# ★ 코드는 나누지 않는다. services/crud/models 를 web_main 과 그대로 공유하고
# 진입점만 둘이다 — 도메인을 두 번 구현하지 않으면서 프로세스·네트워크만 가른다.
# 왜 그래야 하는지는 app.py 주석에 있다.
import os
import uvicorn
from common.logger import LOG
from config.server_configs import web_server_config
LOG.SetPrefix(f"{web_server_config.server_name}-admin")
import app # noqa: F401 (import 시점에 FastAPI app · DB 세션 매니저가 선다)
ADMIN_PORT = int(os.environ.get("ADMIN_API_PORT", "9801"))
if __name__ == "__main__":
LOG.i(f"Admin API Port : {ADMIN_PORT}")
run_kwargs = dict(host="0.0.0.0", port=ADMIN_PORT, access_log=False)
if os.environ.get("RELOAD") == "1":
run_kwargs["reload"] = True
else:
run_kwargs["workers"] = 1
uvicorn.run("app:app", **run_kwargs)