chore: Delete processed raw file (Skybound Cache Case)

This commit is contained in:
Antigravity Agent
2026-04-26 21:33:30 +09:00
parent 8e0876cd15
commit 270cfcb039
2 changed files with 28 additions and 133 deletions
@@ -1,133 +0,0 @@
# Skybound Production Visual Mismatch Public Asset Cache Busting
작성일: 2026-04-26 20:55 KST
## 요청 요약
- 로컬에서 실행하면 비주얼이 정상인데, 도메인에 빌드 결과물을 올리면 전혀 다른 비주얼로 보인다.
- 빌드가 정상적으로 되고 있는지 확인해야 한다.
## 확인 결과
빌드 산출물 자체는 정상으로 확인했다.
확인 내용:
- 도메인 `https://koritips.com/`의 HTML이 로컬 `dist/47/index.html`과 같은 번들 파일을 참조하고 있었다.
- 원격 JS 파일 `index-DZFNJub_.js`와 로컬 `dist/47/assets/index-DZFNJub_.js`의 파일 크기와 SHA-256 해시가 동일했다.
- 새 기체/배경 SVG도 서버에서 `200 OK``image/svg+xml`로 정상 응답했다.
따라서 문제는 “빌드가 잘못됨”보다는 `public/sprites` 정적 에셋 캐시 문제일 가능성이 높다.
## 핵심 원인
Vite 번들 JS/CSS는 파일명에 해시가 붙는다.
예:
- `index-DZFNJub_.js`
- `index-CzXPPmjz.css`
그래서 코드가 바뀌면 브라우저가 새 파일을 받는다.
하지만 `public/sprites/...`에 있는 이미지 파일은 파일명이 고정이다.
예:
- `/sprites/player/falcon_magitech.svg`
- `/sprites/background/stylized_magitech_stage_1.svg`
- `/sprites/missiles/homing_missile.png`
Hostinger CDN은 이 파일들에 아래처럼 긴 캐시를 적용하고 있었다.
- `cache-control: public, max-age=604800`
- 약 7일 캐시
즉 코드 번들은 새로 받았지만, 이미지 파일은 브라우저/CDN이 예전 캐시를 계속 사용할 수 있다.
이 경우 로컬과 도메인의 비주얼이 달라진다.
## 적용한 해결 방향
정적 이미지 URL에 asset version query를 붙여 캐시를 강제로 갱신한다.
예:
- 기존: `/sprites/player/falcon_magitech.svg`
- 변경: `/sprites/player/falcon_magitech.svg?v=20260426-2048`
URL이 달라지면 브라우저와 CDN은 새 리소스로 판단한다.
## 적용한 변경
### 공통 asset version helper 추가
추가 파일:
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/config/assetVersion.ts`
추가 내용:
- `ASSET_VERSION`
- `assetUrl(path)`
### 런타임 스프라이트 로더 캐시 버스팅
수정 파일:
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/hooks/useGameAssets.ts`
적용 대상:
- 플레이어 기체
- 배경 타일
- 적/보스/엘리트 스프라이트
- 아이템 드랍
- supply crate
- missile/skill sprites
- VFX sprites
- hazard sprites
### 사용자 노출 UI 이미지 캐시 버스팅
수정 파일:
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/TitleScreen.tsx`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/ResultCard.tsx`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/SelectCard.tsx`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/HangarOverlay.tsx`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/stateMachine.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/config/skills.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/App.css`
적용 대상:
- 타이틀 배경
- 결과 화면 배경
- 기체 선택 이미지
- 모듈 캐시 이미지
- HQ 초상화
- 스킬 아이콘
- ending background
- CSS 기반 player preview
## 검증
- `npm run build` 성공
- 출력 디렉터리: `dist/48`
- 새 번들 파일:
- `dist/48/assets/index-BXnzL9eU.js`
- `dist/48/assets/index-DbtoIaXm.css`
- 빌드 결과에서 `20260426-2048` asset version 포함 확인
## 배포 시 주의
도메인에는 `dist/48` 폴더 자체가 아니라 `dist/48` 안의 내용을 `public_html` 루트에 업로드해야 한다.
업로드 후에도 Hostinger CDN이 HTML을 잠깐 잡고 있을 수 있으므로 아래를 권장한다.
- Hostinger cache purge 실행
- 브라우저 hard refresh
- 가능하면 시크릿 창에서 확인
이번 변경 이후에는 `/sprites/...` 이미지 URL도 버전이 바뀌므로 기존 이미지 캐시 때문에 로컬/운영 비주얼이 달라지는 문제를 크게 줄일 수 있다.