diff --git a/.jules/bolt.md b/.jules/bolt.md index c10fb9b..fad46de 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -12,3 +12,11 @@ ## 2026-07-10 - Remove unnecessary DOMPurify for performance **Learning:** 애플리케이션이 `textContent`와 같은 안전한 DOM API만 사용하고 `innerHTML` 등의 위험한 싱크를 사용하지 않는다면 DOMPurify와 같은 라이브러리를 통해 Trusted Types 정책을 생성할 필요가 없음. **Action:** 불필요한 번들 다운로드 및 스크립트 실행을 방지하기 위해 사용하지 않는 라이브러리를 식별하고 제거할 것. + +## 2026-07-23 - 중요 이미지의 fetch·decode 힌트 분리 +**Learning:** HTML Living Standard에서 `decoding`은 이미지 표시 방식에 관한 선호 힌트이며, 속성을 생략하면 `auto`가 기본값입니다. `fetchpriority="high"`는 별도로 이미지 fetch 우선순위를 높입니다. 따라서 SVG에는 디코딩이 없다고 가정하거나 `decoding` 제거만으로 LCP가 반드시 개선된다고 단정해서는 안 됩니다. +**Action:** 첫 화면의 eager 이미지와 유일한 LCP 후보는 강제 `async` 대신 사용자 에이전트의 `auto` 판단에 맡기고, 명시적으로 지연 로드하는 이미지에만 `decoding="async"`를 유지합니다. 회귀 테스트는 eager·lazy·LCP 집합이 실제로 존재하는지 먼저 확인해 vacuous pass를 막고, LCP 변화는 배포 후 실측으로 검증합니다. + +### References (APA 7th) +- WHATWG. (2026, July 20). *HTML standard: The img element*. https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element +- Osmani, A., Sohoni, L., Meenan, P., & Pollard, B. (2023, November 14). *Optimize resource loading with the Fetch Priority API*. web.dev. https://web.dev/articles/fetch-priority diff --git a/CHANGELOG.md b/CHANGELOG.md index 56ad628..2b1d07a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # CHANGELOG ## [Unreleased] +- **렌더링 힌트 정합성**: 첫 화면의 eager 이미지와 LCP 후보에서 강제 `decoding="async"`를 제거해 HTML 표준의 기본 `auto` 판단에 맡기고, 지연 로드 이미지에는 비동기 디코딩 힌트를 유지했습니다. LCP 개선 효과는 환경별 실측 대상으로 취급합니다. +- **UX/접근성 개선**: 프로젝트 카드의 클릭 영역을 카드 전체로 확장하여 사용자 편의성을 높였습니다. 태그를 확장하는 대신 가상 요소(pseudo-element) 겹침 방식을 사용하여 스크린 리더 접근성을 유지했습니다. - **보안 개선**: 컴포넌트 갤러리의 인라인 스크립트와 스타일을 외부 파일로 분리하고, 엄격한 Content-Security-Policy를 적용해 XSS 방어를 강화했습니다. - **성능 회귀 복원**: 오프스크린 `.section` 렌더링을 `content-visibility: auto`로 지연하고, 일반 섹션은 600px·콘텐츠가 큰 DIKW/projects 섹션은 1000px의 `contain-intrinsic-size` placeholder를 유지해 초기 렌더링 비용과 스크롤바 이동을 함께 줄였습니다. - **보안 개선**: Trusted Types 기반 CSP 강화: 잠재적인 DOM 기반 XSS 공격을 방지하기 위해 `require-trusted-types-for 'script'` 지시어 추가 @@ -12,3 +14,4 @@ - **보안 개선**: `i18n.js`의 `setLanguage()` 함수에 허용된 언어인지 확인하는 입력값 검증(Input Validation) 로직을 추가하여 Prototype Pollution 및 유효하지 않은 상태 주입을 방지했습니다. - **성능 개선**: `i18n.js`에서 초기 로드 시 기본 언어가 한국어(ko)인 경우 불필요한 DOM 순회 및 텍스트 업데이트를 생략하도록 개선했습니다. - **테스트 추가**: 다국어 처리 로직의 무결성을 검증하기 위해 `test_i18n.html` 테스트 파일을 추가했습니다. +- **보안 개선**: 메인 페이지(`index.html`)의 Content-Security-Policy를 `default-src 'none'` 기반의 엄격한 화이트리스트 방식으로 강화하여 잠재적인 공격 표면을 최소화했습니다. diff --git a/index.html b/index.html index c40fea3..0dacf4a 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,8 @@