v4.0.7: 덱 목록 JS 캐시 무효화 및 UaDeckFavorites.init 방어 처리

구 deck-favorites.js가 CDN에 남아 init 호출이 덱 로드를 막던 문제를 스크립트 ?v= 쿼리와 optional init로 수정한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-23 16:19:03 +09:00
parent ac1ab7d8c0
commit f3b7ac6cf0
5 changed files with 31 additions and 21 deletions

View File

@@ -1 +1 @@
v4.0.6
v4.0.7

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4516420168710424" crossorigin="anonymous"></script>
<link rel="stylesheet" href="./style/output.css?v=4.0.6" />
<link rel="stylesheet" href="./style/output.css?v=4.0.7" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800;900&family=Noto+Sans+KR:wght@400;700;900&display=swap" rel="stylesheet" />
<title>내 덱 관리 - UNIARE</title>
</head>
@@ -76,13 +76,13 @@
</div>
</div>
<script src="/script/api.js"></script>
<script src="/script/ads.js"></script>
<script src="/script/deck-favorites.js"></script>
<script src="/script/deck-preview-hold.js"></script>
<script src="/script/page-i18n.js"></script>
<script src="/script/page-help.js"></script>
<script src="/script/auth-header.js"></script>
<script src="/script/api.js?v=4.0.7"></script>
<script src="/script/ads.js?v=4.0.7"></script>
<script src="/script/deck-favorites.js?v=4.0.7"></script>
<script src="/script/deck-preview-hold.js?v=4.0.7"></script>
<script src="/script/page-i18n.js?v=4.0.7"></script>
<script src="/script/page-help.js?v=4.0.7"></script>
<script src="/script/auth-header.js?v=4.0.7"></script>
<script>
/** @type {Array<object>} */
let allDecks = [];
@@ -385,7 +385,9 @@
if (window.UaPageI18n?.applyPageI18n) {
await window.UaPageI18n.applyPageI18n();
}
await UaDeckFavorites.init();
if (typeof UaDeckFavorites?.init === 'function') {
await UaDeckFavorites.init();
}
loadDecks();
document.getElementById('deck-search').addEventListener('input', renderDeckList);

View File

@@ -114,9 +114,9 @@ wc -c style/output.css # 약 55000 (55KB) — 44000대면 구버전, pull 누
head -1 login.html # output.css?v= 버전 쿼리 포함 여부
```
브라우저에서도 `개발자 도구 → Network → output.css` 크기·상태를 확인한다. Cloudflare를 쓰면 구 CSS가 `immutable`로 남을 수 있어 HTML에 `?v=` 쿼리를 붙인다 (v4.0.6+).
브라우저에서도 `개발자 도구 → Network → output.css`·`deck-favorites.js` 크기·상태를 확인한다. Cloudflare를 쓰면 구 파일이 `immutable`로 남을 수 있어 HTML에 `?v=` 쿼리를 붙인다 (v4.0.6+ CSS, v4.0.7+ 덱 페이지 JS).
`nginx/default.conf`를 변경했다면 `docker compose -f docker-compose.prod.yml up -d --build uniare-web`으로 웹 컨테이너만 재빌드한다. HTML·`style/`만 바뀐 경우 컨테이너 재시작은 필요 없다.
`script/deck-favorites.js`는 `window.UaDeckFavorites.init`이 있어야 한다. 없으면 `git pull` 누락 또는 JS CDN 캐시다.
## 4. 전체 업데이트

View File

@@ -1,5 +1,11 @@
# 업데이트 이력
## 2026-06-23 / v4.0.7 — 덱 목록 JS 캐시·init 오류 수정
### 수행 작업
- 운영 `deck-favorites.js` 구버전( `init` 없음) + CDN JS 캐시로 `UaDeckFavorites.init is not a function` 발생 → 덱 로드 중단
- `deckHistory.html`·`preset.html`: 스크립트에 `?v=4.0.7` 캐시 무효화, `init` 없을 때도 `loadDecks` 실행되도록 방어 코드
## 2026-06-23 / v4.0.6 — CSS 캐시·배포 반영 수정
### 수행 작업

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4516420168710424" crossorigin="anonymous"></script>
<link rel="stylesheet" href="./style/output.css?v=4.0.6" />
<link rel="stylesheet" href="./style/output.css?v=4.0.7" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800;900&family=Noto+Sans+KR:wght@400;700;900&display=swap" rel="stylesheet" />
<title>공개 덱 - UNIARE</title>
</head>
@@ -69,13 +69,13 @@
</div>
</div>
<script src="/script/api.js"></script>
<script src="/script/ads.js"></script>
<script src="/script/deck-favorites.js"></script>
<script src="/script/deck-preview-hold.js"></script>
<script src="/script/page-i18n.js"></script>
<script src="/script/page-help.js"></script>
<script src="/script/auth-header.js"></script>
<script src="/script/api.js?v=4.0.7"></script>
<script src="/script/ads.js?v=4.0.7"></script>
<script src="/script/deck-favorites.js?v=4.0.7"></script>
<script src="/script/deck-preview-hold.js?v=4.0.7"></script>
<script src="/script/page-i18n.js?v=4.0.7"></script>
<script src="/script/page-help.js?v=4.0.7"></script>
<script src="/script/auth-header.js?v=4.0.7"></script>
<script>
/** @type {Array<object>} */
let allDecks = [];
@@ -245,7 +245,9 @@
if (window.UaPageI18n?.applyPageI18n) {
await window.UaPageI18n.applyPageI18n();
}
await UaDeckFavorites.init();
if (typeof UaDeckFavorites?.init === 'function') {
await UaDeckFavorites.init();
}
loadPublicDecks();
document.getElementById('deck-search').addEventListener('input', renderList);
document.getElementById('deck-series-filter').addEventListener('change', renderList);