현재 작업 전체 반영

This commit is contained in:
Yun Chan 2026-06-27 16:08:41 +09:00
parent 5560638e54
commit c0dddab594
85 changed files with 11322 additions and 539 deletions

View file

@ -6,6 +6,8 @@
- 현재 머신에서 `tailscale serve` 루트 HTTPS가 `http://127.0.0.1:5173`으로 연결된다.
- Tailnet 런타임은 API를 `8010`에 띄우고, Vite proxy가 `VITE_API_PROXY_TARGET=http://127.0.0.1:8010`을 보도록 분리했다. 기존 8000 reloader 잔류와 충돌하지 않게 하기 위해서다.
- Tailnet dev-login은 `AUTH_DEV_LOGIN_EXTRA_ORIGINS=["https://alpaca-home.taile93291.ts.net"]`가 있을 때만 dev 환경에서 열린다. prod에서는 계속 차단된다.
- Tailnet dev-origin에서는 Google OAuth 버튼을 비활성화하고, 직접 `/api/auth/login?provider=google`을 열어도 `local_oauth_unavailable` 안내로 되돌린다. 현재 redirect URI가 `https://api-vignette.chanpaca.net/auth/callback`로 고정되어 있어 Tailnet API가 만든 OAuth state를 public API callback이 검증할 수 없기 때문이다. 원격 수동검증은 `로컬 테스트 계정으로 계속`을 사용한다.
- Vite proxy는 원래 프론트 `Host`/proto를 `X-Forwarded-Host`/`X-Forwarded-Proto`로 API에 넘긴다. 이 헤더가 없으면 dev OAuth 차단 redirect가 public 로그인으로 새는 회귀가 생긴다.
- `scripts/dev-up.ps1`는 API 포트와 `VITE_API_PROXY_TARGET`을 같은 값으로 강제한다. Vite가 8010을 보는데 API가 8000/8002로 떠서 `/api/auth/config`가 500을 내던 회귀를 막기 위한 조치다.
## 검증
@ -15,7 +17,10 @@
- `GET https://alpaca-home.taile93291.ts.net/login``200`
- `GET https://alpaca-home.taile93291.ts.net/api/auth/config``dev_login_enabled: true`
- `POST https://alpaca-home.taile93291.ts.net/api/auth/dev-login` + cookie 재사용 `GET /api/auth/me``200`
- `GET https://alpaca-home.taile93291.ts.net/api/auth/login?provider=google&next=%2Flearn``302 https://alpaca-home.taile93291.ts.net/login?oauth=local_oauth_unavailable`
- Playwright DOM 확인: `https://alpaca-home.taile93291.ts.net/login``로컬 테스트`, `학습자`, `교수자`, `관리자`, `로컬 테스트 계정으로 계속`이 표시된다.
- Tailnet auth readiness E2E: `PLAYWRIGHT_BASE_URL=https://alpaca-home.taile93291.ts.net PLAYWRIGHT_SKIP_WEB_SERVER=1 npx playwright test e2e/auth.spec.ts --project=chromium-desktop --grep "shows Google OAuth readiness"``1 passed`
- Tailnet dev-login E2E: `PLAYWRIGHT_BASE_URL=https://alpaca-home.taile93291.ts.net PLAYWRIGHT_SKIP_WEB_SERVER=1 npx playwright test e2e/auth.spec.ts --project=chromium-desktop --grep "shows Google OAuth readiness|logs in locally"``2 passed`
- 로컬 리스너:
- gateway `127.0.0.1:9099`
- Tailnet API `127.0.0.1:8010`
@ -36,7 +41,7 @@
- 현재 `vnet.18ka.net``api-vnet.18ka.net`은 DNS가 없다.
- 현재 cloudflared 인증 컨텍스트는 `18ka.net` zone을 관리하지 못한다. `cloudflared tunnel route dns vignette vnet.18ka.net` 실행 시 원하는 `18ka.net`이 아니라 `vnet.18ka.net.chanpaca.net` 레코드를 만들었다.
- prod API는 DB 연결이 없으면 fail-closed로 종료한다. 현재 `127.0.0.1:55432` Postgres가 꺼져 있어 `http://127.0.0.1:8001/health`가 뜨지 않는다.
- prod API는 현재 `127.0.0.1:8001`에서 `db:true`, `engine:true`로 건강하다. 다만 `api-vnet.18ka.net` DNS가 없어 외부 vnet 도메인으로는 아직 도달할 수 없다.
- Google OAuth Console에도 `https://api-vnet.18ka.net/auth/callback`을 Authorized redirect URI로 추가해야 실제 Google 로그인이 완료된다.
## 재기동 명령