MDN 근거 3건 수집 후 결정 7개를 근거 기반으로 확정하고 §구현 가이드 4개 sub-section 을 채웠다. 조사에서 기존 계약 2건의 사실 오류가 나왔다. - EVICTION_SCOPE_DRIFT: 브라우저 eviction 은 origin 전량 삭제이므로 FE-REG-STORAGE.evictionOrder 는 애플리케이션 주도 정리에만 유효 - CACHE_STORAGE_CONSTRAINT_DRIFT: Cache Storage 는 SW 전용이 아니다 (Window.caches 접근 가능). FE-D027 의 제한은 정책이지 플랫폼 제약이 아님 - NO_GROUND_TRUTH: ca-tmpl 은 backend 전용이라 이 branch 에 미적용 - CAPABILITY_NAME_COLLISION: ca-tmpl capabilities.yaml 과 다른 개념 신규 raw: mdn-storage-quotas-eviction-persistence, mdn-file-system-access-opfs, mdn-object-url-cache-storage 6개 신규 branch-note 전부에 governing_docs 추가.
85 lines
6.3 KiB
Markdown
85 lines
6.3 KiB
Markdown
---
|
|
title: MDN — URL.createObjectURL() / CacheStorage
|
|
source_type: official-doc
|
|
url: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL_static
|
|
archive_url:
|
|
related_branches: [feature-frontend-binary-file-io-store-contract, feature-frontend-background-execution-worker-contract]
|
|
related_projects: [ca-skeleton-frontend]
|
|
tags: [frontend, blob, object-url, cache-storage, service-worker, browser]
|
|
created: 2026-07-28
|
|
---
|
|
|
|
# MDN — URL.createObjectURL() / CacheStorage
|
|
|
|
> Layer: `raw/` — 외부 자료의 **원문 발췌·출처 기록**.
|
|
|
|
## 활용 branch (필수, 최소 1개+)
|
|
|
|
| Branch | 이 자료가 정당화하는 결정 |
|
|
|---|---|
|
|
| `[[raw/branch-notes/feature-frontend-binary-file-io-store-contract]]` | object URL 수명 소유 결정(`D1`), Cache Storage backend 의 실행 컨텍스트 전제 |
|
|
| `[[raw/branch-notes/feature-frontend-background-execution-worker-contract]]` | service worker 안에서 object URL 을 만들 수 없다는 제약, Cache Storage 버전 파티션 |
|
|
|
|
## 출처
|
|
|
|
- 원본 URL: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL_static
|
|
- 보조 URL: https://developer.mozilla.org/en-US/docs/Web/API/CacheStorage
|
|
- 아카이브 URL:
|
|
- 저자 / 조직: MDN Web Docs (Mozilla)
|
|
- 발행일: (문서 지속 갱신)
|
|
- 마지막 확인일: 2026-07-28
|
|
|
|
## 왜 저장했는지
|
|
|
|
(a) object URL 을 adapter 가 쌍으로 소유해야 한다는 결정에 외부 근거가 있는지, (b) Cache Storage 가 service worker 전용인지를 확인하기 위해. (b) 는 `FE-D027` 의 "Cache Storage 는 service worker 호스팅 response cache 전용" 서술이 **기술 제약인지 정책인지** 가르는 지점이었다.
|
|
|
|
## 핵심 인용
|
|
|
|
> [§URL.createObjectURL] "To release an object URL, call `revokeObjectURL()`."
|
|
|
|
> [§URL.createObjectURL — Availability] "This feature is _not_ available in Service Workers due to its potential to create memory leaks."
|
|
|
|
> [§CacheStorage] "The `CacheStorage` interface represents the storage for `Cache` objects."
|
|
|
|
> [§CacheStorage] "Provides a master directory of all the named caches that can be accessed by a `ServiceWorker` or other type of worker or `window` scope (you're not limited to only using it with service workers)."
|
|
|
|
> [§CacheStorage] "You can access `CacheStorage` through the `Window.caches` property in windows or through the `WorkerGlobalScope.caches` property in workers."
|
|
|
|
> [§CacheStorage — Examples] "Delete any old caches to respect user's disk space."
|
|
|
|
> [§CacheStorage.delete] "Finds the `Cache` object matching the `cacheName`, and if found, deletes the `Cache` object and returns a `Promise` that resolves to `true`. If no `Cache` object is found, it resolves to `false`."
|
|
|
|
> [§CacheStorage.keys] "Returns a `Promise` that will resolve with an array containing strings corresponding to all of the named `Cache` objects tracked by the `CacheStorage`. Use this method to iterate over a list of all the `Cache` objects."
|
|
|
|
## 추출된 주장
|
|
|
|
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|
|
|---|---|---|---|---|---|
|
|
| C1 | object URL 은 명시적으로 `revokeObjectURL()` 을 호출해야 해제된다 | [§createObjectURL] "To release an object URL, call `revokeObjectURL()`." | `official-reference` | 모든 object URL | 해제하지 않으면 반드시 누수가 된다는 정량적 근거 |
|
|
| C2 | `createObjectURL` 은 **메모리 누수 가능성 때문에** Service Worker 에서 제공되지 않는다 | [§Availability] "not available in Service Workers due to its potential to create memory leaks" | `official-reference` | Service Worker 컨텍스트 | window/worker 에서 누수가 발생하지 않는다는 뜻은 아님 — 오히려 같은 위험의 존재를 시사 |
|
|
| C3 | `CacheStorage` 는 service worker 전용이 아니며 window scope 에서도 접근 가능하다 | [§CacheStorage] "you're not limited to only using it with service workers" | `official-reference` | `Window.caches`·`WorkerGlobalScope.caches` | service worker 없이 오프라인 응답 가로채기가 가능하다는 뜻은 아님 |
|
|
| C4 | MDN 예제는 캐시 이름에 버전을 넣고 오래된 캐시를 삭제하는 패턴을 제시한다 | [§Examples] "Delete any old caches to respect user's disk space." (예제: `` `myapp-${cacheVersion}` ``) | `official-reference` | Cache Storage 운영 | 특정 버전 문자열 형식이 표준이라는 뜻은 아님 |
|
|
| C5 | `CacheStorage.keys()` 로 캐시 목록을 열거하고 `delete(cacheName)` 로 개별 캐시를 지울 수 있다 | [§CacheStorage.keys] "Use this method to iterate over a list of all the `Cache` objects." | `official-reference` | Cache Storage | 개별 응답 단위 eviction 순서를 브라우저가 보장한다는 뜻은 아님 |
|
|
|
|
## 적용 경계
|
|
|
|
- 이 자료가 직접 증명하는 것:
|
|
- `C1`·`C2`: object URL 의 해제 책임과 Service Worker 미제공 사실
|
|
- `C3`~`C5`: Cache Storage 의 접근 범위와 버전 파티션 운영 수단
|
|
- 이 자료가 증명하지 않는 것:
|
|
- object URL 을 **adapter 가** 소유해야 한다는 것 — MDN 은 해제 필요성만 말하고 소유 주체는 말하지 않는다. 소유 주체는 project decision 이다
|
|
- Cache Storage 를 service worker 로 제한하는 것이 필요하다는 것 — 오히려 `C3` 은 그 반대를 말한다
|
|
- 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
|
|
- `FE-D027` 의 "Cache Storage = SW 호스팅 전용" 이 기술 제약이 아니라 **정책**임을 문서에 명시할 것
|
|
|
|
## 메모
|
|
|
|
- 인용 1 해석 후보 (미검증): `C2` 는 "Service Worker 에서 못 쓴다" 는 가용성 사실이지만, 그 **사유**가 memory leak 이라는 점에서 window 컨텍스트에서도 해제 규율이 필요하다는 방증으로 읽을 수 있다. 다만 이는 해석이며 MDN 이 직접 말한 것은 아니다.
|
|
- 인용 2 해석 후보 (미검증): `C3` 때문에 `FE-D027` 의 Cache Storage 서술은 `CATEGORY_DRIFT` 성격의 정정이 필요하다 — 기술적으로 불가능한 것이 아니라 우리가 그렇게 **정한** 것이다.
|
|
- 추가로 봐야 할 동일 출처 페이지: `URL.revokeObjectURL()`, `Cache.put()` 의 quota 동작
|
|
|
|
## 관련
|
|
|
|
- 같은 주제 다른 official-doc: `[[raw/official-docs/mdn-storage-quotas-eviction-persistence]]`, `[[raw/official-docs/mdn-file-system-access-opfs]]`
|
|
- 이 자료를 인용한 wiki 요약: 생성 전
|