월간 크롬 이슈 리포트 2023년 6월호


들어가며

프런트엔드 개발에 가장 많은 영향을 주는 크롬 브라우저의 버전별 변경 예정 항목을 정리 및 공유한다.

💡 각 항목은 Chrome Platform Status의 Roadmap과 한 달간의 blink-dev 활동 요약을 바탕으로 정리했다.

💡 각 항목의 🚫는 지원 중단 및 제거(Removed), ⚠️는 지원 중단(Deprecated), ✅는 새로운 기능(Enabled by default), 🧪는 개발자 미리 보기(Trial)를 의미한다.

💡 각 항목 중 기존 서비스에 미치는 영향이 크다고 판단한 항목은 소제목 뒤에 📌 표시를 했다.

💡 지원 중단 및 제거(🚫), 지원 중단(⚠️) 외의 항목은 공유 가치가 있다고 판단한 경우에만 포함했다.

💡 개발자 미리 보기(🧪)는 chrome://flags에서 Experimental Web Platform features 항목을 활성화해 사용할 수 있다.

💡 각 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 Chrome Platform Status를 그대로 인용했다.

목차

  1. Chrome 115

    • ⚠️ document.domain 설정자(Setter) 지원 중단 📌
    • ⚠️ Mutation 이벤트 지원 중단 📌
    • ✅ CSS 다중 display 속성
    • ✅ CSS 스크롤 애니메이션
    • 🧪 HTTPS 연결 업그레이드 미리 보기
    • 🧪 SHA-1 서버 전자 서명 지원 중단 미리 보기
    • 🗓️ 배포 예정일
  2. Chrome 116

    • ✅ CSS Motion Path
    • display, content-visibility의 애니메이션 사용 지원
    • ✅ CSS 불연속 속성의 Transition 지원
    • 🧪 SVGUseElementdata: URL 지원 중단 미리 보기
    • 🗓️ 배포 예정일
  3. Chrome 117

    • ⚠️ CSS zoom 속성 지원 중단 📌
    • ⚠️ RTCPeerConnection.getStats() 콜백 방식 지원 중단
    • ✅ CSS Anchor 배치
    • @scope 규칙
    • 🗓️ 배포 예정일
  4. Chrome NEXT

    • ⚠️ [Chrome 119] 비표준 shadowroot 속성 지원 중단
    • ⚠️ [Chrome 119] WebSQL 지원 중단
    • ⚠️ [Chrome LATER] unload 이벤트 지원 중단
    • ✅ [Chrome LATER] 내부망에 대한 하위 리소스 요청 규칙 적용

1. Chrome 115

⚠️ document.domain 설정자(Setter) 지원 중단 📌

SOP(Same-Origin Policy)는 브라우저 보안 정책으로, 두 페이지가 서로 다른 출처(origin)일 때 이 두 페이지 사이의 통신을 막는다. 예를 들어 parent.example.com 페이지에 <iframe>으로 child.example.com 페이지를 불러오면 기본적으로 child.example.comwindow.parent로 부모창에 접근할 수 없고, 이 반대도 마찬가지다. 기존에는 상위 도메인이 같은 경우, document.domain 설정자를 사용하여 상위 도메인(example.com)으로 출처를 변경해 SOP를 완화할 수 있었다. 보다 강력한 보안을 위해 이 설정자를 지원 중단한다. 지원 중단 기간 동안 document.domain 설정자를 호출할 수는 있지만 출처는 변하지 않는다.

사용자가 직접 chrome://flags에서 Origin-keyed agent clusters 기능을 설정해 기존처럼 document.domain으로 출처를 변경할 수 있다. 하지만 기본 옵션이 아니기에 대안을 찾는 것이 좋다. 가장 간단한 대안은 window.postMessage를 사용하는 것이다.

// parent.example.com
window.addEventListener('message', (event) => {
  if (event.origin !== 'http://child.example.com') {
    return;
  }

  console.log(event.data); // 안녕하세요?
});

// child.example.com
window.postMessage('안녕하세요?', 'http://parent.example.com');

window.postMessage의 자세한 사용법 및 다른 대안은 여기를 참고해도 좋다.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

참조


⚠️ Mutation 이벤트 지원 중단 📌

MutationEvent는 DOM 요소에 변경이 있을 때 발생하는 이벤트로, DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved 등이 있다.

element.addEventListener(
  'DOMNodeInserted',
  (event) => {
    console.log('새로운 요소를 감지했습니다.', event.srcElement);
  },
  false
);

element.append(document.createElement('span'));

// 새로운 요소를 감지했습니다. <span></span>

이 이벤트를 사용하면 DOM 변경을 추적할 수 있으나, 설계상 결함과 치명적인 성능 문제를 이유로 2011년에 표준에서 퇴출되었다.

2012년에 더 안정적인 MutationObserver가 등장하여 현재 대부분의 브라우저에서 이 이벤트 사용 시 콘솔에 경고를 노출한다. 아직 MutationEvent를 사용한다면 MutationObserver로 전환할 것을 적극 권장한다.

const observer = new MutationObserver((mutations) => {
  for (const mutation of mutations) {
    if (mutation.type === 'childList') {
      console.log('새로운 요소를 감지했습니다.', ...mutation.addedNodes);
    }
  }
});

observer.observe(element, { childList: true });
element.append(document.createElement('span'));

// 새로운 요소를 감지했습니다. <span></span>

Chrome 115부터는 Mutation 이벤트 사용 시 좀 더 강력한 경고를 노출하며, 내년 7월 말 배포 예정인 Chrome 127부터는 아예 해당 API를 제거할 예정이다.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

참조


✅ CSS 다중 display 속성

display 속성에 최대 3개의 값을 같이 할당할 수 있도록 변경한다. 새로운 display 동작이 추가되는 것이 아닌, 기존에 하나의 값으로만 사용하던 display 속성을 좀 더 명시적으로 표현하도록 구문을 변경한 것이다.

먼저 자기 자신의 정렬을 결정하는 <display-outside>와 자식 요소의 정렬을 결정하는 <display-inside>를 따로 지정할 수 있다.

기존(축약 문법) 다중 속성
block block flow
inline-block inline flow-root
table block table
inline-table inline table
flex block flex
inline-flex inline flex
grid block grid
inline-grid inline grid
list-item block flow list-item

특히 inline- 접두사를 가진 값은 레거시 값(<display-legacy>)으로 취급한다. 매번 새로운 속성을 추가할 때마다 inline-{속성명}을 같이 추가해야 하는 번거로움을 줄인 것이다. 기존 속성은 대부분 다중 속성 표기의 축약 문법으로 취급한다.

새로 추가될 flow, flow-rootflow layout을 결정하는 속성으로, flow<display-outside>의 값에 따라 내부에 block-container를 생성할지, inline-box를 생성할지를 결정하며, flow-root는 항상 새로운 block-container를 생성한다.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

  • Firefox: 배포 완료
  • Safari: 배포 완료
  • 웹 개발자: 긍정적

참조


✅ CSS 스크롤 애니메이션

현재 CSS 애니메이션은 모두 document.timeline으로 접근 가능한 DocumentTimeline을 애니메이션 시간값으로 사용한다. DocumentTimeline은 문서를 연 후 지난 밀리초 단위의 시간값으로, 현재 CSS 애니메이션이 모두 경과 시간을 기반으로 동작한다는 의미이기도 하다.

Chrome 115에서 정식 반영 예정인 ScrollTimeline, ViewTimeline은 요소의 스크롤 위치값을 애니메이션의 시간값으로 사용한다.

스크롤 애니메이션 예시

기존에는 위와 같은 예제를 구현하기 위해 스크립트가 필수였으나, 새롭게 추가되는 animation-timeline 속성과 scroll() 함수를 사용하면 CSS만으로도 위와 같은 기능을 구현할 수 있다.

@keyframes animate-progress {
  from {
    transform: scaleX(0);
  }
  to {
    transform: scaleX(1);
  }
}

#progress {
  position: fixed;
  transform-origin: left center;
  width: 100%;
  height: 48px;
  background-color: coral;
  animation: animate-progress auto linear;
  animation-timeline: scroll(root vertical);
}

scroll() 함수에는 스크롤 요소를 지정하는 <scroller>와 방향을 지정하는 <axis> 두 가지 속성을 넘길 수 있다. 인자를 생략하면 <scroller>는 가장 가까운 스크롤 요소를 찾는 nearest를, <axis>block을 기본값으로 지정한다.

또 다른 ViewTimelineanimation-timelineview() 함수를 사용해 지정해 사용할 수 있다. ScrollTimeline이 스크롤 진행도를 시간값으로 사용한다면, ViewTimeline은 해당 요소가 스크롤에 따라 화면에 보이는 정도를 시간값으로 사용한다.

view-timeline 예시

(출처: Animate elements on scroll with Scroll-driven animations)

위 예시에서 요소가 화면 아래에 있다면 애니메이션의 진행도는 0%, 요소가 완전히 화면 위에 있다면 100%가 된다. view()에는 scroll()과 마찬가지로 방향을 지정하는 <axis>와, 진행도 계산에 사용할 요소의 경계를 설정하는 <view-timeline-inset>을 넘길 수 있다.

.foo {
  animation-timeline: view(block 12px);
}

이 기능은 아직 초안으로 사용법이나 이름 등이 바뀔 수 있음에 주의하자.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

참조


🧪 HTTPS 연결 업그레이드 미리 보기

해당 사이트가 HTTPS 연결을 지원하는 경우, 자동으로 HTTPS 연결을 사용하도록 변경하는 기능의 미리 보기를 추가한다. 기존에도 Strict-Trasport-Security 헤더를 사용해 브라우저가 HTTPS 연결을 사용하도록 유도하거나, Chrome 설정의 Always use secure connections 옵션을 통해 브라우저가 HTTPS를 사용하도록 강제할 수 있었다. 하지만 아래와 같은 경우 사용자가 HTTP 연결을 사용해 정보를 전달할 수 있었다.

  • HSTS를 사용하나 브라우저에 해당 사이트를 방문한 기록이 없는 경우
  • 사이트에서 HTTP를 HTTPS로 리디렉션하나 HSTS를 사용하지 않는 경우
  • 사이트에서 HTTP와 HTTPS를 모두 지원하나 HTTP를 HTTPS로 리디렉션하지 않는 경우

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

참조


🧪 SHA-1 서버 전자 서명 지원 중단 미리 보기

SHA(Secure Hash Algorithm)는 해시 함수의 집합이다. 그 중에서도 SHA-1은 과거 인증서와 전자 서명에 가장 많이 사용하던 해싱 알고리즘으로,1995년에 처음 등장해 2000년대부터 2010년대 초반까지 표준으로 널리 사용했다. 하지만 취약점이 제기되어 2011년에 SHA-2가 새로운 표준 해싱 알고리즘이 되었고, 현재 대부분의 최신 OS, 브라우저에서 SHA-1 알고리즘을 지원하지 않는다.

Chrome도 이미 과거에 SHA-1을 사용한 서버 인증서를 지원 중단했다. Chrome 117에서는 SHA-1을 사용한 서버 전자 서명을 지원 중단할 예정이다. SHA-1을 사용하는 클라이언트의 인증서나 전자 서명은 아직 지원 중단 일정이 없어, 보안을 강화하고자 한다면 서버에서 직접 SHA-1을 사용한 인증서를 거부 처리해야 한다.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

참조


🗓️ 배포 예정일

Chrome 1152023년 7월 12일에 정식 배포 예정이다.


2. Chrome 116

✅ CSS Motion Path

CSS에 offset-path 속성에 사용할 수 있는 함수를 추가한다. offset-pathoffset의 하위 속성으로, 해당 요소가 움직일 경로를 지정하는 속성이다.

motion 예제

(출처: Motion Path Module Level 1)

기존에는 path()로 사용하는 경우가 대부분이었으나, 업데이트 이후에는 각도로 경로를 지정하는 ray(), 원을 그리는 circle(), polygon() 등 다양한 함수를 지원할 예정이다.

circle 예제

(출처: Motion Path Module Level 1)

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

  • Firefox: 개발 중
  • Safari: 개발 중
  • 웹 개발자: 의견 없음

참조


display, content-visibility의 애니메이션 사용 지원

display 속성 및 content-visibility 속성을 CSS 애니메이션에서 사용할 수 있도록 변경한다.

@keyframes slideOut {
  from {
    display: block;
  }
  to {
    transform: translateX(40px);
    opacity: 0;
  }
}

.hide {
  animation: slideOut 0.2s;
  display: none;
}

위 예시에서 hide 클래스를 지정한 요소는 애니메이션 없이 바로 화면에서 사라진다. display 속성은 opacity 등의 속성과 달리 중간값을 연산할 수 없는 불연속(discrete) 속성이다. 애니메이션에서 display 속성 자체를 지원하지 않아 display: block; 구문을 무시한 것이다.

업데이트 이후에는 displaycontent-visibility 속성의 중간값을 none | hidden이 아닌 특정 값으로 연산해 해당 속성의 애니메이션 사용을 지원할 예정이다.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

  • Firefox: 의견 없음
  • Safari: 의견 없음
  • 웹 개발자: 긍정적

참조


✅ CSS 불연속 속성의 Transition 지원

CSS 불연속(discrete) 속성이란 중간값을 연산할 수 없는 display, visibility 등을 말한다. 이들은 중간값을 연산할 수 없어 transition 속성과 함께 사용할 수 없었다.

기존에는 특정 애니메이션이 끝난 후 display: none; 속성을 적용하려면 자바스크립트로 직접 스타일을 변경해야 했다.

.hide {
  transition: opacity 0.3s;
  opacity: 0;
  /* display: none; */
}
const target = document.querySelector('#target');

target.addEventListener('transitionend', () => {
  target.style.setProperty('display', 'none');
});

target.classList.add('hide');

Chrome 115부터는 transition-property 속성에 불연속 속성을 명시해 transition의 대상으로 지정할 수 있다.

.hide {
  transition: opacity 0.3s, display 0.3s;
  opacity: 0;
  display: none;
}
const target = document.querySelector('#target');

target.classList.add('hide');

주의해야 할 점은 all은 여전히 불연속 속성을 포함하지 않는다는 점이다. 불연속 속성을 transition의 대상으로 지정하려면 해당 속성을 명시적으로 transition-property에 작성해야 한다.

/* 애니메이션 없이 바로 사라진다. */
.hide {
  transition: all 0.3s;
  opacity: 0;
  display: none;
}

/* 0.3초 후 사라진다. */
.hide {
  transition: display 0.3s, opacity 0.3s;
  opacity: 0;
  display: none;
}

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

  • Firefox: 의견 없음
  • Safari: 의견 없음
  • 웹 개발자: 의견 없음

참조


🧪 SVGUseElementdata: URL 지원 중단 미리 보기

SVG의 <use>를 사용하면 외부 SVG 이미지를 불러와 현재 문서에 붙여넣을 수 있다. 강력한 기능이나 보안 문제가 있는 만큼 <use>에는 동일 출처 정책(same-origin policy)이 적용된다. 하지만 data: URL을 사용하는 경우는 항상 동일 출처로 취급하며, 일부 보안 모듈을 거치지 않는다.

기존에 data: URL을 사용했다면 해당 이미지를 동일 출처의 .svg 이미지로 변환하거나, 인라인에서 직접 이미지를 관리하는 방법으로 전환하기를 권장한다.

<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
  <circle id="circle" cx="5" cy="5" r="4" stroke="blue" />
  <use href="#circle" />
</svg>

const url = URL.createObjectURL(blob);
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
const use = document.createElementNS('http://www.w3.org/2000/svg', 'use');
use.setAttribute('href', `${url}#circle`);
svg.appendChild(use);
document.body.appendChild(svg);

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

참조


🗓️ 배포 예정일

Chrome 1162023년 8월 9일에 정식 배포 예정이다. 7월 19일부터 7월 27일 사이에 Chrome 베타 버전에서 해당 기능을 미리 확인해 볼 수 있다.


3. Chrome 117

⚠️ CSS zoom 속성 지원 중단 📌

비표준 CSS 속성인 zoom을 지원 중단한다.

zoom은 요소 크기 배율을 지정하는 CSS 속성이다. transform: scale()과 유사하나, zoom은 실제 레이아웃에 영향을 미치며, 애니메이션을 지원하지 않는다는 점이 다르다.

아직 zoom을 사용하는 페이지가 있다면 표준 속성인 transform: scale()으로의 전환을 고려해야 한다. 현재 이 속성을 사용하는 페이지는 전체 페이지의 약 0.5% 정도라고 한다.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

  • Firefox: 배포 완료
  • Safari: 의견 없음
  • 웹 개발자: 의견 없음

참고


⚠️ RTCPeerConnection.getStats() 콜백 방식 지원 중단

RTCPeerConnection.getStats()는 해당 오디오나 비디오 연결에 대한 통계 자료를 반환하는 API다. 현재 Chrome에서 이 API는 프로미스를 반환하는 최신 버전과, 콜백을 사용하는 구버전 두 가지로 나뉜다.

myPeerConnection.getStats(); // 최신 버전
myPeerConnection.getStats(null, onSuccess, onFailure); // 구버전, Promise 반환 X

콜백 방식은 모던 자바스크립트와 어울리지 않고, 표준 스펙 문서도 없어 장기적으로 지원을 중단할 예정이다. Chrome 113 이상에서는 콜백 방식 사용 시 콘솔에 경고를 노출하며, chrome://flags에서 지원 중단 환경을 미리 체험할 수 있다.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

  • Firefox: 배포 완료
  • Safari: 배포 완료
  • 웹 개발자: 의견 없음

참조


✅ CSS Anchor 배치

특정 요소에 기반해 현재 요소를 배치할 수 있는 Anchor 배치 기능을 추가한다. 특히 툴팁 등을 구현할 때 유용한데, absolute 배치와 비슷하나 DOM 구조에 구애 받지 않고 툴팁을 구현할 수 있다는 점이 다르다.

.anchor {
  anchor-name: --tooltip;
}

.tooltip {
  position: fixed;
  anchor-default: --tooltip;
  bottom: anchor(auto);
  left: anchor(right);
  min-width: anchor-size(width);
}

예제처럼 코드를 작성하면 .tooltip.anchor 요소의 오른쪽 위에 나타난다. 만약 .tooltip이 브라우저 화면을 벗어난다면 bottom: anchor(auto)에 의해 .anchor 요소의 아래에 배치된다.

anchor-name에는 해당 Anchor의 이름을 선언하며, 해당 Anchor에 배치할 요소에서 이 이름으로 해당 요소의 위치나 크기 등에 접근할 수 있다. anchor() 함수는 해당 Anchor의 위치값을, anchor-size()는 해당 Anchor의 크기값을 반환하는 함수로, 기본적으로 아래처럼 Anchor의 이름을 인자로 받는다.

.tooltip {
  bottom: anchor(--tooltip auto);
  max-width: anchor-size(--tooltip width);
}

만약 해당 요소에 anchor-default를 설정했다면 첫 번째 인자를 생략할 수 있다.

.tooltip {
  anchor-default: --tooltip;
  bottom: anchor(auto);
  max-width: anchor-size(width);
}

@position-fallback 규칙을 선언하면 해당 요소가 브라우저 화면을 벗어날 경우에 대한 스타일을 정의할 수 있다.

@position-fallback --tooltip-position {
  @try {
    top: anchor(--tooltip bottom);
    left: anchor(--tooltip left);
  }

  @try {
    bottom: anchor(--tooltip top);
    left: anchor(--tooltip left);
  }

  @try {
    top: anchor(--tooltip bottom);
    right: anchor(--tooltip right);
  }
}

#tooltip {
  position: fixed;
  position-fallback: --tooltip-position;
}

위 코드는 먼저 Anchor의 왼쪽 아래에 배치를 시도하며, 만약 화면을 벗어나면 Anchor의 왼쪽 위, 마지막으로 Anchor에 오른쪽 아래에 #tooltip을 배치하라는 의미이다.

이 기능은 아직 초안으로 세세한 스펙이나 동작이 바뀔 수 있음에 주의하자.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

참조


@scope 규칙

CSS 초안으로 제안 중인 @scope 규칙을 적용한다. @scope는 CSS 규칙을 특정 구간에만 적용할 수 있는 문법으로, CSS에 스코프라는 새로운 개념이 생기는 셈이다.

@scope 규칙을 단순하게 사용하면 다음과 같다.

@scope (.red-theme) {
  span {
    color: red;
  }
}

@scope (.blue-theme) {
  span {
    color: blue;
  }
}

위 문법은 아래처럼 일반 선택자로 구현할 수도 있으나, 꽤 큰 차이가 있다.

.red-theme span {
  color: red;
}

.blue-theme span {
  color: blue;
}

예를 들어 아래와 같은 페이지가 있다고 해 보자.

<div class="blue-theme">
  <span>this is blue-theme</span>

  <div class="red-theme">
    <span>this is red-theme</span>
  </div>
</div>

일반 선택자로 구현한 스타일을 적용하면 두 <span> 텍스트는 모두 파란색으로 나타난다. .blue-theme span.red-theme span의 CSS 우선 순위가 같아 나중에 선언한 .blue-theme span의 스타일이 .red-theme span의 스타일을 덮어씌우기 때문이다.

@scope 규칙으로 작성한 스타일을 적용하면 의도대로 첫 번째 <span>은 파란색, 두 번째 <span>은 빨간색으로 나타난다. @scope@scope에 선언한 상위 스코프에 해당 요소가 가까울 수록 우선 순위가 높다. 때문에 두 번째 <span>에 스타일을 적용할 때 @scope (.blue-theme)에서 선언한 규칙보다 @scope (.red-theme)에서 선언한 규칙이 우선 순위가 더 높아 color: red; 스타일이 color: blue; 스타일을 덮어 씌운다.

또한 @scope A to B 규칙을 사용하면 아래처럼 스타일의 적용 범위를 설정할 수 있고,

@scope (.article) to (.comment) {
  p {
    margin: 12px 0;
  }
}

& 선택자 또는 :scope 가상 선택자를 이용하면 현재 상위 스코프 요소를 선택할 수 있다.

@scope (.light-theme) {
  & {
    background-color: white;
  }
}

@scope (.dark-theme) {
  :scope {
    background-color: black;
  }
}

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

참조


🗓️ 배포 예정일

Chrome 1172023년 9월 6일에 정식 배포 예정이다. 8월 16일부터 8월 24일 사이에 Chrome 베타 버전에서 해당 기능을 미리 확인해 볼 수 있다.


4. Chrome NEXT

⚠️ [Chrome 119] 비표준 shadowroot 속성 지원 중단

선언적 Shadow DOM<template> 요소에 shadowroot 속성을 지정해 템플릿에서 직접 Shadow DOM을 활성화할 수 있는 기능이다. 표준에서 이 속성에 대한 이름을 shadowrootmode로 변경함에 따라 기존 shadowroot 속성을 지원 중단한다. shadowroot는 Chrome에서 그대로 동작하나, Chrome 111에서 추가된 스트리밍 기능을 사용할 수 없다. shadowrootmode는 Chrome 111 이상에서 사용할 수 있으며, 다른 브라우저에서도 지원 예정이므로 shadowrootmode 속성을 사용하는 것이 좋다.

<host-element>
- <template shadowroot="open">
+ <template shadowrootmode="open">
    <slot></slot>
  </template>
  <h2>Light content</h2>
</host-element>

Chrome 112에서 shadowroot 속성에 대한 지원 중단 미리 보기를 추가했다. Chrome 112 이상에서 chrome://flags에서 해당 기능을 활성화해 속성 지원 중단을 미리 체험할 수 있다.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

  • Firefox: 의견 없음
  • Safari: 의견 없음
  • 웹 개발자: 의견 없음

참조


⚠️ [Chrome 119] WebSQL 지원 중단

WebSQL은 과거 브라우저에 데이터를 저장하기 위해 제안된 API로, Webkit 기반의 일부 브라우저에서만 사용이 가능했다. 하지만 이 프로젝트는 보안 구현 등의 어려움으로 1년 만에 폐기되었고, Webkit도 2019년에 이 API를 지원 중단했다.

이미 대부분의 브라우저에서 Web Storage API, IndexedDB API 같은 최신 저장소 API를 사용할 수 있어 이 API를 지원 중단한다. 이미 Chrome 97에서 제3자 컨텍스트에서 WebSQL을 제거했으며, Chrome 105에서는 보안 연결을 사용하지 않는 페이지에서의 사용을 지원 중단했다.

웹에서 SQL을 계속 사용하려면 웹 어셈블리를 이용한 SQLite가 공식 대안이므로 참고하자.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

  • Firefox: 해당 없음
  • Safari: 배포 완료
  • 웹 개발자: 의견 없음

참조


⚠️ [Chrome LATER] unload 이벤트 지원 중단

unload 이벤트는 해당 문서 또는 자식 문서를 해제할 때 발생하는 이벤트이다. 이 이벤트를 이용하면 사용자가 페이지를 종료하기 전에 특정 동작을 실행할 수 있다.

window.addEventListener('unload', (event) => {
  navigator.sendBeacon('/api/log', 'unload!');
});

하지만 unload 이벤트는 beforeunload 이벤트와 달리 기본 동작을 취소(event.preventDefault())할 수 없어 이벤트가 아예 발생하지 않기도 한다. W3C의 통계에 따르면 unload 이벤트가 제대로 발생하는 경우가 Chrome 데스크탑에서는 95%, 모바일에서는 57% ~ 68% 정도로, 이는 모바일 환경의 특성상 브라우저가 아닌 다른 앱을 보다가 브라우저 자체를 종료하는 경우가 빈번하기 때문이다.

이 항목은 제안 중으로 적용 여부는 확실하지 않으나, 기존에 unload 이벤트에 의존하는 코드가 있다면 관심을 가지고 지켜볼 필요가 있다.

이 항목에 대한 주요 브라우저 및 웹 개발자의 의견은 다음과 같다.

참조


✅ [Chrome LATER] 내부망에 대한 하위 리소스 요청 규칙 적용

내부망 접근 규칙(Local Network Access) 적용의 일부로 하위 리소스(.js, .css 등)를 요청할 때 내부망(사설 IP, localhost)에 대한 접근 제한을 검토 중이다. 정식 적용 일정은 불투명하나, 미리 보기로 일부 기능을 체험할 수 있다.

공개 웹 사이트의 내부망 하위 리소스 접근 제한

공개 웹 사이트(공개 IP로 접근 가능한 사이트)에서 내부망에 하위 리소스(.js, .css 등) 요청 시 반드시 보안 컨텍스트(HTTPS)를 사용하도록 제한한다. 내부망의 하위 리소스에 접근하려면 보안 컨텍스트를 사용하도록 변경해야 한다.

Chrome 86 이상의 chrome://flags에서 해당 기능을 활성화해 접근 제한을 미리 체험할 수 있다.

내부망에 하위 리소스 요청 시 사전 요청 발송

내부망에 하위 리소스 요청 시 사전 요청을 보내 연결 허용 여부를 먼저 묻는다. 현재는 사전 요청 실패 시 개발자 콘솔에 경고만 노출한다.

참조


이원표2023.06.21
Back to list