package.json의 caret(^)은 어떻게 동작하는가 — 락파일이 빠진 Docker 빌드가 일으킨 사고
2026-05-25
코드 변경이 없는데 어느 날 갑자기 Docker production 빌드가 실패했습니다. 원인은 의존성 트리 깊은 곳의 transitive 패키지가 며칠 전 publish한 새 patch였습니다. 이 글은 사고의 전말을 풀면서 package.json의 caret 범위가 정확히 어떻게 동작하는지, 그리고 yarn.lock의 역할이 무엇인지를 정리합니다.
2024년 Polyfill.io 사고는 CDN으로 로드하는 외부 스크립트가 어떻게 10만 개 이상의 사이트를 한 번에 감염시킬 수 있는지 보여줬습니다. Subresource Integrity(SRI)의 동작 원리와 적용 방법, 그리고 Google Fonts 같은 동적 CSS에서 SRI를 어떻게 우회·대체할지 정리합니다.
새로운 취약점이 공개될 때마다 "우리 프로젝트가 영향받는가?"라는 질문에 즉답하지 못한다면, 의존성 가시성이 부족한 상태입니다. Log4Shell 사례를 통해 SBOM(Software Bill of Materials)이 왜 필요한지, GitHub Dependency Submission으로 어떻게 자동화하는지 정리합니다.
공급망 방어의 빈틈 중 하나인 lockfile 변조 공격을 다룹니다. Yarn 4의 Hardened Mode가 매 설치마다 resolution과 무결성 해시를 검증해 lockfile injection 시나리오를 어떻게 차단하는지, 그리고 한 줄 설정으로 어떻게 도입할 수 있는지 정리합니다.
word-break: break-word는 비추천입니다 — overflow-wrap: anywhere로 전환해야 하는 이유
2026-03-18
word-break: break-word는 CSS 스펙에서 비추천(deprecated)된 레거시 속성입니다. 대안인 overflow-wrap: break-word도 intrinsic sizing 요소에서 동작하지 않는 함정이 있습니다. 올바른 대체 조합(overflow-wrap: anywhere + word-break: normal + line-break: strict)과 Stylelint 커스텀 플러그인을 통한 자동화 방법을 공유합니다.