프런트엔드 개발에 가장 많은 영향을 주는 크롬 브라우저의 버전별 변경 예정 항목을 정리 및 공유한다.
💡 각 항목은 Chrome Platform Status의 Roadmap과 한 달간의 blink-dev 활동 요약을 바탕으로 정리했다.
💡 각 항목의 ⚠️는 지원 중단(Deprecated), ✅는 새로운 기능(Enabled by default), 🧪는 미리 보기(Developer Trial, Origin Trial)를 의미한다.
💡 각 항목 중 기존 서비스에 미치는 영향이 크다고 판단한 항목은 소제목 뒤에 📌 표시를 했다.
💡 지원 중단(⚠️) 외의 항목은 공유 가치가 있다고 판단한 경우에만 포함했다.
💡 미리 보기(🧪)는 chrome://flags
페이지에서 Experimental Web Platform features
를 활성화(Developer Trial) 또는 출처 미리 보기(Origin Trial)를 신청해 사용할 수 있다.
💡 각 항목에 대한 주요 브라우저와 웹 개발자의 의견은 Chrome Platform Status를 그대로 인용했다.
Chrome 137
transform
속성 지정 가능Chrome 138
Clear-Site-Data
헤더에 캐시를 명시적으로 초기화하기 위한 옵션 추가<
, >
문자 이스케이프stretch
속성 추가drawElement()
Chrome 139
corner-shape
도입<script>
요소에 async 속성 추가Chrome NEXT
_current
네비게이션 제거Storage Key
(최상위 사이트, 프레임 출처, 교차 사이트 조상이 있는지 여부)를 확인하여 출처가 동일하지 않은 경우 Blob URL
로의 이동을 제한한다.
이에 따라 Storage Key가 다르면 접근 불가능해지므로, 교차 사이트간 Blob URL 공유가 차단된다.
이번 변경점으로 개발자에게 몇 가지 영향이 생길 수 있다.
window.open(blobUrl)
을 사용할 때 크로스 사이트인 경우 noopener
가 자동 적용되므로, 이를 활용한 특정 보안 취약점이 방어된다.Blob URL
을 생성 후 일반 웹 페이지에서 사용한다면, 이제 동작하지 않는다.이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
CSS if()
함수는 조건부 값을 간결하게 표현하는 방법을 제공한다. 이 함수는 세미콜론으로 구분된 조건-값 쌍을 순차적으로 평가하며, 처음으로 참인 조건에 연관된 값을 반환한다. 모든 조건이 거짓일 경우 빈 토큰 스트림을 반환한다.
div {
color: var(--color);
background-color: if(style(--color: white): black; else: white);
}
.dark {
--color: black;
}
.light {
--color: white;
}
기존의 미디어 쿼리나 @supports와 같은 방법보다 더 유연하고 간결한 대안을 제공한다. 특히 CSS Mixins에서 사용자 정의 함수와 결합하여 활용될 가능성이 주목받고 있다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
transform
속성 지정 가능<svg>
요소는 XML 기반 벡터 그래픽 파일 형식으로, 2차원 그래픽을 표현하기 위한 표준이다.
이제 <svg>
루트 요소에 직접 transform
속성을 지정하여 회전, 확대/축소, 이동, 기울기기 등을 적용해 전체에 대한 좌표계 조작을 가능하게 한다.
기존에는 <svg>
요소 위에 래퍼를 설정하거나, 외부에서 css
설정을 통해 변경해야 했다.
<svg transform="rotate(45)" width="100" height="100" viewBox="0 0 100 100">
<circle cx="50" cy="50" r="40" fill="blue"/>
</svg>
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
Prompt API는 애플리케이션이 사용자 입력을 바탕으로 AI 언어 모델을 직접 호출할 수 있는 새로운 Web Platform API이다.
웹에서의 생성형 AI 통합 수요 증가함에 따라 기존에는 서버 측 API를 호출해야 했던 모델 호출을, 웹 표준 API로 로컬에서 처리 가능하도록 구현한다. 온디바이스 언어 모델을 제공하지만, 사용자의 데이터에 접근할 수 없으며 학습하지 않는다.
입력 유형으로는 텍스트 외에도 이미지, 오디오 등을 입력 가능하며, 생성형 AI 기반 인터페이스나 도우미 기능 구현이 가능하다.
크롬은 미리보기를 제공하며 크롬 확장 프로그램에서도 사용가능하도록 처리하였다.
크롬은 블로그에 Prompt API와 같은 Built-in AI APIs를 제공한다. 이 API는 브라우저에서 사용할 수 있는 언어 모델 기반 기능을 제공하며, 서버 전송 없이 온디바이스 모델을 활용할 수 있다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
Chrome 137은 2025년 5월 21일에 정식 배포 예정이다.
WebGL이 SwiftShader로 자동 대체되던 동작이 중단된다.
SwiftShader를 사용하려면 --enable-unsafe-swiftshader
플래그를 명시적으로 설정해야 하며, WebGL 실패 시 대체 API(Canvas2D 등)를 사용할 수 있도록 대비해야 한다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
Clear-Site-Data
헤더에 캐시를 명시적으로 초기화하기 위한 옵션 추가Clear-Site-Data
응답 헤더에 prefetchCache
및 prerenderCache
키워드를 추가해 프리페치 및 프리렌더링 캐시만 개별적으로 비우는 기능이 도입된다.
기존 cache
값은 모든 캐시를 삭제했지만, 이 기능은 세션 정보나 쿠키 등을 건드리지 않고 필요한 캐시만 정밀하게 제거할 수 있다.
이는 Speculation Rules의 도입 확산에 따른 요구 사항으로, Shopify 등에서 명시적으로 요청한 기능이다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
HTTP 트래픽은 암호화되지 않아 중간자 공격(MITM)에 취약하다.
<link rel="prerender" href="http://example.com/page.html">
<link rel="prerender" href="https://example.com/page.html">
HTTP 프로토콜 url이라도 프리렌더링이 수행되었으나, 이제 HTTP 프로토콜에서 프리렌더링이 차단된다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
<
, >
문자 이스케이프직렬화된 HTML을 다시 파싱해 DOM을 재구성하는 과정에서, mutation XSS에 대한 보안 이슈가 보고되었다.
예를 들어, <a href=">">
요소를 innerHTML
를 사용해 직렬화하면 >
가 시작 태그의 일부로 인식되어 XSS가 발생할 수 있다.
<svg></p><style><a title="</style><img src onerror=alert(1)>">
<svg></p><style><a title="</style><img src onerror=alert(1)>">
기존에는 <script>
요소 같은 위험한 태그만 제한햇으나, 이제 모든 속성 값에 대해 <
, >
문자를 이스케이프하는 방식으로 변경한다.
<a href=">">
<div data-x="<">
<a href=">">
<div data-x="<">
DOM 상의 값은 그대로 유지한다.
el.getAttribute("data-x") === "<"
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
CSS만으로 요소의 DOM 내 위치 정보를 활용하는 데는 제한이 있었다. :nth-child()
같은 선택자를 사용하는 정적인 방식만 가능하나, 이제 DOM 계층 정보를 CSS 수준에서 가져오는 동적 스타일링이 가능하다.
sibling-index()
: 요소의 순번을 표현한다.sibling-count()
: 요소의 개수를 표현한다.li {
margin-left: calc(10px * sibling-index());
}
sibling-index()
는 nth-child()
와 동일하게 1부터 시작한다.
progress()
CSS 함수는 현재 값이 시작과 끝 사이에 어느 위치에 있는지를 비율(0~1) 로 반환한다.
progress(<progress-value>, <start>, <end>)
.element {
--step: progress(10px, 0px, 100px); /* 0.1 */
margin-left: calc(100px * progress(10px, 0px, 100px));
}
크롬은 브라우저에서 사용할 수 있는 Built-in AI APIs를 제공한다.
이 중 Summarizer API는 웹 앱이 브라우저/OS 내장 언어 모델 기반 요약 기능을 활용할 수 있도록 하는 Javascript API다.
서버 전송이나 외부 API 전송 없이, 디바이스에 내장된 모델을 활용해 문서나 텍스트 요약이 가능하다.
const controller = new Summarizer();
const summary = await controller.summarize({
text: "World population is expected to reach 9 billion by 2050...",
style: "informative", // 옵션: informative, headline, etc.
});
console.log(summary.text);
// "World population to hit 9B by 2050, UN projects"
Firefox와 Safari는 표준화에 대한 논의를 하고 있으며 Firefox는 합의가 없었기 때문에 미리 배포하는 것에 대한 반대 입장을 표하고 있다.
데모에서 확인할 수 있다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
stretch
속성 추가CSS stretch
속성은 width
, height
등 크기 속성에 적용할 수 있는 새로운 값으로, 요소의 크기를 부모 요소의 크기에 맞게 자동으로 조정한다. 이 속성은 특히 레이아웃을 유연하게 구성할 때 유용하다.
기존 100%
값과 유사하게 작동하지만, stretch
는 box-sizing
기준이 아닌 margin-box
기준으로 사이즈를 계산해 더 직관적이다.
/* margin-box */
height: calc(100% - var(--my-margin));
height: stretch;
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
drawElement()
기존 <canvas>
요소에서 텍스트는 fillText()
strokeText()
등 원시적인 방법만 제공된다. 단순히 글자만 그릴 수 있고, 줄바꿈이나 복잡한 서식을 적용하려면 개발자가 직접 모든 계산을 해야 했다.
drawElement()
메서드는 HTML로 만든 요소를 그대로 캔버스에 복사-붙여넣기 할 수 있는 기능을 제공해 아래와 같은 장점을 제공한다.
<style>
canvas {
border: 1px solid blue;
}
img {
width: 40px;
height: auto;
}
</style>
<canvas id="canvas" layoutsubtree="true" width=500 height=500>
<div id=drawElement style="width: 300px; height: 300px;" id="d">
Hello world!<br>I'm multi-line, <b>formatted</b>,
rotated text with emoji (😀), RTL text
<span dir=rtl>من فارسی صحبت میکنم</span>,
vertical text,
<p style="writing-mode: vertical-rl;">
这是垂直文本
</p>
and an inline image:
<img src="https://upload.wikimedia.org/wikipedia/commons/9/9b/Gustav_chocolate.jpg">
</div>
</canvas>
<script>
onload = () => {
const ctx = document.getElementById("canvas").getContext("2d");
const el = document.getElementById("drawElement");
ctx.rotate((45 * Math.PI) / 180);
ctx.translate(200, -125);
ctx.drawElement(el, 30, 0);
}
</script>
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
Chrome 138은 2025년 6월 18일에 정식 배포 예정이다.
크롬은 운영체제 제조사의 지원 주기에 따라 브라우저 지원을 유지한다.
애플이 macOS 11 (Big Sur) 운영체제에 대한 공식 지원을 종료함에 따라 Chrome 139 버전부터 브라우저 지원을 종료한다.
종료 시점을 기준으로 Chrome 138으로 계속 사용 가능하지만 보안상 위험이 존재하며 업데이트 불가 및 경고 메시지를 노출한다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
ISO-2022-JP 문자셋의 자동 감지(charset auto-detection)에 알려진 보안 문제가 존재한다 (참고). 사용률이 매우 낮고 Safari가 이를 지원하지 않으므로, Chromium에서 해당 지원을 제거한다.
사용 통계에 따르면, ISO-2022-JP 자동 감지는 페이지 로드의 약 0.000002%에서만 발생한다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
corner-shape
도입CSS corner-shape
속성은 기존의 단순한 둥근 모서리(border-radius
)에서 보다 다양한 곡률 형태를 지정할 수 있게 해주는 기능이다. 아래와 같은 값을 지원할 예정이다:
.corner {
border-radius: 20px;
corner-shape: squircle;
}
round
- 기본값. 기존 border-radius
와 동일한 곡선squircle
- iOS 스타일의 곡률 (둥근 사각형)notch
- 안쪽으로 들어간 모서리scoop
- 움푹 팬 형태의 모서리square
- 직사각형bevel
- 대각선 모서리이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
CSS 커스텀 함수를 제공한다. 변수처럼 재사용 가능하며, 인자를 받을 수 있고 동적으로 계산 결과를 사용할 수 있다.
@function --spacing($index) {
@return calc(4px * $index);
}
.card {
margin: --spacing(3);
}
동적 계산을 위해 sass 등 CSS 전처리기가 필요했지만, 이제 런타임에 브라우저에서 동작하는 커스텀 함수를 사용할 수 있다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
<script>
요소에 async 속성 추가이제 SVG <script>
요소에서 HTML <script>
요소와 동일하게 async
속성을 지원한다. 이를 기반으로 SVG 기반의 외부 스크립트가 비동기적으로 로드 및 실행이 가능하다.
기존에는 비동기 스크립트 실행에 의해 SVG 렌더링이 중단되었으며, firefox는 async
속성을 지원하고 있어 웹 개발자 간에 혼란이 있었다.
크롬은 SVG 요소에 async
속성을 추가해 개발자 경험을 개선하고 렌더링과 병렬로 로드 및 실행하여 SVG 요소 내 복잡한 그래픽/인터랙션 처리에 유리하도록 변경한다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
Chrome 139은 2025년 7월 30일에 정식 배포 예정이다.
Intl Locale Info API는 ECMAScript의 TC39에서 개발 중인 Stage 3 단계의 제안이다. 이 API는 Intl.Locale 객체를 확장하여 지역(locale)에 대한 다양한 정보를 제공하며 사용자가 위치한 지역의 문화적 요소를 더 잘 이해하고 처리할 수 있도록 돕는 도구를 제공한다.
하지만 위원회는 일부 getter 메서드 제안을 새롭게 수정하였다. 따라서 기존에 제공되었던 getter 메서드를 지원 중단하고, 새로 제안된 함수로 다시 출시한다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
Intl.Segmenter 구현 이전에 v8 엔진 전용 자바스크립트 API이다.
이제 약 0.03%의 사용량을 보여 제거한다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
포커스된 DOM 요소 제거 시 blur
이벤트가 발생하지 않도록 변경한다. 기존 명세에는 포커스된 DOM 요소를 제거하는 경우에 대한 정의가 없어 Chromium 기반의 브라우저는 포커스된 DOM 요소 제거 시 해당 요소에 blur
이벤트를 발생시켰다. HTML spec이 DOM 요소를 제거하는 경우, 포커스 제거 단계(blur
, change
이벤트 발생)를 수행하지 않도록 업데이트 됨에 따라 크롬도 포커스 제거 단계를 수행하지 않도록 변경할 예정이다.
다만 정식 적용 일정은 불분명하다. 크롬은 예기치 못한 버그가 있을 수 있어 관련 사이드 이펙트를 꼼꼼히 검토 후 기능을 적용한다는 입장이다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
unload
이벤트는 해당 문서를 떠나거나 하위 자원(.js
, .css
등)을 메모리에서 해제할 때 발생하는 이벤트다. 이 이벤트를 이용하면 사용자가 페이지를 종료하기 전에 특정 동작을 실행할 수 있다.
window.addEventListener('unload', (event) => {
navigator.sendBeacon('/api/log', 'unload!');
});
하지만 unload
이벤트는 beforeunload
이벤트와 달리 기본 동작을 취소(event.preventDefault()
)할 수 없어 이벤트가 아예 발생하지 않기도 한다. W3C의 통계에 따르면 unload
이벤트가 제대로 발생하는 경우가 크롬 데스크탑에서는 95%, 모바일에서는 57%~68% 정도로, 이는 모바일 환경의 특성상 브라우저가 아닌 다른 앱을 보다가 브라우저 자체를 종료하는 경우가 빈번하기 때문이다.
영향도가 큰 만큼, 크롬은 점진적으로 unload
이벤트를 제거할 계획이다. 먼저 Permissions-Policy
를 추가해 사용 여부 허용을 결정할 수 있도록 하고, 나중에는 해당 권한의 기본값을 deny
로 바꿀 예정이다. 참고로, Chrome 117에서 unload
이벤트의 허용 여부를 결정하는 Permissions-Policy
의 미리 보기를 추가했다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
Protected Audience API는 크로스 사이트 서드 파티 추적 없이 리마케팅 및 광고 타겟팅을 지원하는 API다.
API 신호의 진위성과 무결성을 보장하는 방식으로 서브리소스 웹 번들을 사용한 이전 버전과 페이지 시작 fetch()
요청에 특수 HTTP 응답 헤더를 사용한 새로운 버전이 존재한다.
서브리소스를 사용하는 이전 버전이 5억분의 1 정도로 낮은 페이지 사용량을 보이고 있어 제거하고자 한다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
크롬 공식 브랜드 빌드에서 보안과 안정성을 강화하기 위해, M137부터 --load-extension
명령줄 플래그를 통한 확장 프로그램 로드가 폐지된다.
이 변경은 악성 또는 원치 않는 확장 프로그램과 관련된 위험을 줄이기 위한 조치이다. 대신, 개발자 모드를 활성화한 상태에서 확장 관리 페이지의 "Load Unpacked" 버튼을 통해 압축 해제된 확장을 로드할 수 있다.
개발자는 Chromium이나 Chrome For Testing 같은 환경에서 --load-extension
스위치를 계속 사용할 수 있다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.
_current
네비게이션 제거HTML에서 target
속성은 표준값을 사용해 링크나 폼의 대상 브라우징 컨텍스트를 지정한다. 하지만 Blink 기반 브라우저들은 _current
비표준 동작을 지원했다.
<a href="/next" target="_current">Link</a>
이 _current
값은 현재 브라우징 컨텍스트를 명시적으로 지정하는 용도였으나, 이는 "_self"
와 의미적으로 동일하고, 무엇보다도 어떤 HTML 스펙에도 정의되지 않았다. Firefox, Safari 등 주요 브라우저들도 이를 지원하지 않는다.
또한 크롬 내부 사용 통계에 따르면 이 기능의 사용률은 0.00009% 미만으로, 사실상 사용되지 않고 있다. 이에 따라 해당 기능을 제거하여 렌더링 엔진의 복잡도를 줄이고 표준 정합성을 맞춘다.
이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.