feat: profile 새 버전 안내 toast를 추가한다

배포 bundle과 같은 commit의 정적 버전 문서를 생성하고, 열린 탭이 DB mutation 없이 변경을 감지하도록 한다. 동일 버전은 tab session에서 한 번만 안내하며 강제 새로고침은 하지 않는다.
This commit is contained in:
2026-08-22 05:11:50 +00:00
parent 55f41601e6
commit 5549f0c1e8
12 changed files with 343 additions and 4 deletions
+10
View File
@@ -136,6 +136,16 @@ Profile frontend build에는 같은 전체 commit SHA를 `VITE_BUILD_COMMIT_SHA`
commit의 cached artifact를 현재 버전으로 오인하지 않습니다. Orchestrator 밖의
개발 build는 현재 Git checkout의 `HEAD`를 fallback으로 사용하고 Git metadata를
읽을 수 없을 때만 `unknown`을 표시합니다.
같은 build 단계는 profile root에 `deployment-version.json`을 생성합니다. 이미 열린
game frontend는 bundle에 고정된 commit과 이 정적 문서의 commit을 최초 mount,
60초 주기, tab visibility 복귀와 network online 복귀 때 비교합니다. 다른 full SHA를
처음 관찰하면 공용 info toast로 새로고침 안내만 하고 reload를 강제하지 않습니다.
조회에는 cache-busting query와 `cache: no-store`를 사용하며, 실패·잘못된 문서는
현재 화면을 방해하지 않고 무시합니다. 알림 여부는 tab session storage에만 남으므로
Gateway/game DB, Redis, 인증, 턴 처리에는 mutation이 없습니다. Profile `DEPLOY`
API·engine·frontend를 같은 commit worktree에서 함께 전환하므로 이 frontend 문서는
해당 profile의 새 backend/frontend release가 readiness를 통과해 실제 서빙되기 시작한
뒤에만 달라집니다.
`RESET` operation은 같은 build 경계를 사용한 뒤 현재 시즌 테이블을 seed로
교체합니다. Seeder의 reset 목록에는 `hall`, `ng_games`, `yearbook_history`,
과거 장수·국가와 상속·진단 자료가 포함되지 않습니다.
+5
View File
@@ -140,6 +140,11 @@ path별 Turbo cache에 저장됩니다. Orchestrator는 cache 복원 후 이를
`.release-dist/<profileName>/game-frontend`에 staging directory를 거쳐 교체합니다.
따라서 같은 commit·같은 공개 prefix의 재배포는 `vue-tsc`와 Vite를 다시 실행하지
않고, 여러 instance가 같은 prefix를 쓰더라도 각 runtime target은 따로 materialize됩니다.
각 artifact의 `deployment-version.json`은 bundle과 같은 full commit SHA만 담습니다.
열린 profile 탭은 이 파일을 cache 우회로 확인해 bundle SHA와 달라졌을 때 한 번만
`새 버전이 준비되었습니다. 새로고침하면 변경사항이 반영됩니다.` toast를 표시합니다.
서버는 reload를 강제하지 않으며 이 확인은 정적 GET과 tab session storage만 사용해
game/Gateway DB와 Redis에 영향을 주지 않습니다.
`RESET`은 선택 worktree의 Gateway profile-seed CLI도 실행하므로 기존처럼
`gateway-api`까지 server build에 포함하고, seed를 호출하지 않는 `DEPLOY`만 명시적
server target을 `game-api`로 제한합니다.