From 57ee154c8dc554f4326d332b73ce1020f874cd24 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 17 Nov 2025 19:31:57 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20Admin=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20A?= =?UTF-8?q?PI=20=EB=9D=BC=EC=9A=B0=ED=8C=85=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=20=EB=82=B4=EC=9A=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...shboard_standard_deployment_refactoring.md | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/journey/troubleshooting/251117_admin_dashboard_standard_deployment_refactoring.md b/journey/troubleshooting/251117_admin_dashboard_standard_deployment_refactoring.md index 2626b61..b6e766c 100644 --- a/journey/troubleshooting/251117_admin_dashboard_standard_deployment_refactoring.md +++ b/journey/troubleshooting/251117_admin_dashboard_standard_deployment_refactoring.md @@ -199,3 +199,48 @@ curl -I http://localhost/admin/ # HTTP/1.1 200 OK - IDE 터미널 문제 발생 시 가장 먼저 IDE 재시작 시도 - 재시작으로 해결되지 않으면 shell 경로 확인 (`/bin/bash`) +### Admin 로그인 API 라우팅 문제 해결 + +**문제**: `/admin/api/login` POST 요청 시 404 오류 발생 + +**원인**: +1. **프론트엔드 JavaScript 실행 문제**: 폼 제출 시 POST 요청이 발생하지 않고 GET 요청으로 처리됨 +2. **Gateway 라우팅 문제**: Gateway 컨테이너에서 `localhost:8000`으로 접근 시 자기 자신을 가리킴 +3. **Docker 네트워크 문제**: 컨테이너 간 통신은 컨테이너 이름 또는 Docker 네트워크 IP 사용 필요 + +**해결**: + +1. **프론트엔드 JavaScript 수정** (`admin-dashboard/frontend/index.html`): + - form 태그에 `method="POST"` 및 `action="javascript:void(0);"` 추가 + - JavaScript 이벤트 리스너를 IIFE로 감싸서 확실히 실행되도록 수정 + - 에러 처리 개선 (showError 함수 의존성 제거) + +2. **Gateway 라우팅 수정** (`robeing-gateway/app/routers/admin.py`): + ```python + # Before: ADMIN_BACKEND_URL = "http://localhost:8000" + # After: + ADMIN_BACKEND_URL = "http://admin-dashboard-backend:8000" + ``` + - Docker 컨테이너 내부에서는 `localhost` 대신 컨테이너 이름 사용 + - 같은 Docker 네트워크(`appnet`)에 있는 컨테이너는 이름으로 접근 가능 + +3. **Gateway 라우터 등록 확인** (`robeing-gateway/app/main.py`): + ```python + app.include_router(admin.router, prefix="") + ``` + - admin router에 prefix가 없으므로 main.py에서도 prefix="" 명시 + +**검증**: +```bash +curl -X POST http://localhost:8100/admin/api/login \ + -H "Content-Type: application/json" \ + -d '{"password":"19800508"}' +# {"access_token":"...", "token_type":"bearer"} +``` + +**교훈**: +- Docker 컨테이너 간 통신은 `localhost`가 아닌 컨테이너 이름 또는 네트워크 IP 사용 +- 같은 Docker 네트워크에 있는 컨테이너는 이름으로 자동 DNS 해석됨 +- 프론트엔드 JavaScript는 브라우저 환경에서 실행되므로 상대 경로(`/admin/api/login`) 사용 가능 +- Gateway는 nginx를 통해 프록시되므로 nginx 설정(`/admin/api/` → Gateway) 확인 필요 +