diff --git a/.gitignore b/.gitignore index 78c2659..04372e2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,8 @@ cover.out *.test .DS_Store + +# 프론트 번들은 커밋하지 않는다 — index.html 셸만 두고 make web-build 가 채운다. +internal/webui/assets/* +!internal/webui/assets/.gitignore +!internal/webui/assets/index.html diff --git a/Makefile b/Makefile index be54e2e..2f1df6c 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all fmt vet test build clean +.PHONY: all fmt vet test build clean web-build # 외부 의존성 0 이 이 제품의 전제다 — go.mod 에 require 가 늘면 "차트 하나 = # 파드 하나 = 완결" 이 성립하지 않는다. dep-check 가 그것을 지킨다. @@ -26,3 +26,13 @@ build: clean: rm -rf dist cover.out + +# 프론트를 빌드한다. vite 의 outDir 이 internal/webui/assets 라 산출물이 바로 +# embed 대상에 떨어진다 — 복사 단계를 두면 emptyOutDir 와 순서가 엉켜 방금 +# 만든 번들을 지운다(실제로 그렇게 한 번 깨뜨렸다). +# +# 번들은 커밋하지 않고 index.html 셸만 커밋한다. 빌드 전에는 셸이 참조하는 +# 해시 번들이 없으므로 Go 테스트가 그 상태를 인식해 관련 검사를 건너뛴다 — +# 그래야 프론트를 빌드하지 않은 개발자의 `make all` 이 실패하지 않는다. +web-build: + cd web && pnpm install --frozen-lockfile && pnpm build diff --git a/internal/apiserver/server.go b/internal/apiserver/server.go index 9abe4cd..bc4ea3d 100644 --- a/internal/apiserver/server.go +++ b/internal/apiserver/server.go @@ -30,6 +30,7 @@ import ( "github.com/KeiaiLab/nodevitals-observatory/internal/rules" "github.com/KeiaiLab/nodevitals-observatory/internal/storage" "github.com/KeiaiLab/nodevitals-observatory/internal/tsdb" + "github.com/KeiaiLab/nodevitals-observatory/internal/webui" ) // queryWindow 는 /api/v1/query 의 평가창 폭이다 — [eval-queryWindow, eval]. @@ -75,6 +76,9 @@ func NewServer(d Deps) http.Handler { mux.Handle("POST /api/v1/auth/login", d.Auth.LoginHandler()) mux.Handle("POST /api/v1/auth/logout", d.Auth.LogoutHandler()) mux.HandleFunc("GET /api/", handleUnknownAPI) + // 콘솔 정적 자산. 데이터가 0 이라 인증 예외이고, 위 구체 패턴들이 + // ServeMux 우선순위로 먼저 매치되므로 이 catch-all 이 API 를 삼키지 않는다. + mux.Handle("GET /", webui.Handler()) // 보호 — 질의 q := storage.New(d.DB) diff --git a/internal/webui/assets/index.html b/internal/webui/assets/index.html new file mode 100644 index 0000000..ffe206e --- /dev/null +++ b/internal/webui/assets/index.html @@ -0,0 +1,13 @@ + + +
+ + +