Cross Origin Storage API: 파일 중복 다운로드 방지
Cross-Origin Storage API를 사용하면 브라우저가 두 사이트 간에 33GB 규모의 AI 모델을 공유할 수 있어, 다운로드 데이터 양을 66GB에서 33GB로 줄일 수 있습니다.
과거의 브라우저는 다른 사이트가 이미 가져온 파일을 어떤 사이트든 재사용할 수 있도록 허용했습니다. 예를 들어, 두 페이지에서 CDN을 통해 동일한 React 번들을 로드하면 브라우저는 두 번째 요청 시 캐시된 복사본을 제공합니다. 하지만 일련의 개인정보 보호 중심의 변화로 인해 이러한 편의성이 사라졌습니다. 이제 브라우저는 사이트별로 캐시를 분할(partition)하므로, 동일한 URL이라도 각 오리진(origin)별로 별도로 저장됩니다. 그 결과, 하나 이상의 사이트에 나타나는 모든 대용량 에셋에 대해 중복 트래픽이 발생하게 됩니다.
중복 다운로드 문제가 지금 중요한 이유
이러한 낭비는 웹 폰트나 몇 메가바이트 정도의 JavaScript와 같은 작은 파일에서도 나타나지만, 에셋이 수 기가바이트 규모의 AI 모델이나 WebAssembly 모듈일 경우 그 문제는 걷잡을 수 없이 커집니다.
Cross-Origin Storage (COS) API의 작동 방식
이 제안은 URL 기반 조회를 콘텐츠 주소 지정(content-addressed) 방식으로 전환합니다. 사이트는 원하는 파일의 SHA-256 해시값을 제공합니다. 브라우저는 해당 해시가 원래 어떤 오리진에서 가져온 것인지와 관계없이 로컬 저장소에서 정확히 일치하는 해시가 있는지 확인합니다. 파일이 있으면 브라우저가 이를 제공하고, 없으면 네트워크에서 파일을 가져와 향후 교차 오리진(cross-origin) 재사용을 위해 해당 해시로 저장합니다.
- 해시를 통한 식별. 해시는 파일의 위치가 아닌 파일의 바이트를 고유하게 나타냅니다.
- 교차 오리진 액세스. 해시를 알고 있는 사이트라면 파일의 출처가 어디든 상관없이 파일을 요청할 수 있습니다.
- 로컬 캐시 공유. 동일한 물리적 복사본이 여러 요청을 충족합니다.
이 API는 의도적으로 범위를 좁게 설정했습니다. 기존의 Cache API나 IndexedDB를 대체하는 것이 아닙니다. 이들은 범용 저장 도구로 남고, COS는 대용량의 동일한 블롭(blob)을 위한 단일 목적의 지름길 역할을 합니다.
설계에 내장된 개인정보 보호 안전장치
사이트가 사용자의 캐시를 탐색할 수 있게 허용하면, 캐시 분할(partitioning)이 막으려 했던 추적 벡터가 다시 도입될 수 있습니다. COS는 다음 세 가지 규칙을 통해 이러한 위험을 차단합니다.
- 열거 불가. 스크립트는 "어떤 해시를 가지고 있나요?"라고 물을 수 없습니다. 저장소는 불투명하게 유지됩니다.
- 알려진 해시 요구. 사이트는 정확한 해시를 이미 알고 있는 경우에만 파일을 요청할 수 있습니다. 사전 지식 없이는 무작위 탐색이 불가능합니다.
- 글로벌 액세스를 위한 인기 임계값. 다른 오리진에서 파일을 가져오려면 해당 파일이 충분히 흔한(즉, "익명인") 상태여야 합니다. 희귀한 파일은 처음 다운로드한 오리진에만 격리되어 유지됩니다.
이러한 제한 사항은 API가 핑거프린팅(fingerprinting)을 위한 사이드 채널로 변질되는 것을 방지하면서, 진정으로 공유되는 에셋에 대해서는 API를 유용하게 유지합니다.
향후 주목할 점
Cross-Origin Storage API는 브라우저 내 대용량 에셋의 증가와 함께 커진 문제에 대해 명쾌한 해결책을 제시합니다. 웹 커뮤니티가 대역폭 효율성과 캐시 분할을 유도했던 개인정보 보호 보장 사이에서 균형을 맞출 수 있느냐에 따라 이 아이디어가 초안 단계를 넘어 발전할 수 있을지가 결정될 것입니다. 만약 실현된다면, 미래의 브라우저는 30GB가 넘는 AI 모델을 한 번만 다운로드하고 어디서든 재사용할 수 있게 하여 시간, 데이터, 에너지를 절약해 줄 것입니다.
