하이브리드 앱 제작 시, 웹페이지에서 저장한 데이터(쿠키, 캐시 등)를 삭제해야 하는 경우가 있다.
모든 저장 데이터를 삭제하면, 다른 웹페이지에 저장된 데이터까지 모두 삭제되어 예외사항이 발생할 수도 있다.
나는 서버 쪽에서 웹사이트 변경사항을 반영하면, 앱에서도 바로 반영될 수 있도록 캐시 데이터를 삭제할 것이다.
WKWebsiteDataStore.default().fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes(), completionHandler: {
(records) -> Void in
for record in records {
WKWebsiteDataStore.default().removeData(ofTypes: record.dataTypes, for: [record], completionHandler: {})
// remove callback
}
})
let webseiteDateTypes = NSSet(array: [WKWebsiteDateTypeDiskCache, WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeCookies])
let date = NSDate(timeIntervalSince1970: 0)
WKWebsiteDataStore.Default().remoeData(ofTypes: websiteDataTypes as! Set, modifiedSince: date as Date, completionHandler: {
// remove callback
})
WKWebsiteDataTypeCookies,
WKWebsiteDataTypeMemoryCache,
WKWebsiteDataTypeDiskCache,
WKWebsiteDataTypeOfflineWebApplicationCache,
WKWebsiteDataTypeLocalStorage,
WKWebsiteDataTypeSessionStorage,
WKWebsiteDataTypeWebSQLDatabases,
WKWebsiteDataTypeIndexedDBDatabases
쿠키 : 웹사이트 접속시 접속자의 개인 장치에 다운로드 되고 브라우저에 저장되는 작은 텍스트 파일.
- 웹 사이트는 쿠키를 통해 접속자의 장치를 인시갛고 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 저장한다.
In-memory 캐시
WKWebsiteDataTypeMemoryCache
On-disk 캐시
WKWebsiteDataTypeDiskCache
HTML 오프라인 웹 앱 캐시
WKWebsiteDataTypeOfflineWebApplicationCache
캐시란 복잡한 연산이나 시간이 오래 걸리는 연산을 미리 수행/저장 후 빠르게 가져와서 쓸 수 있게 하는 것이다.
- On-disk 캐시 : 하드디스크에 접근하는 시간을 개선하기 위해 RAM에 저장하는 기법
- In-memory 캐시 : RAM에 접근하지 않고 더 빠른 시간으로 접근할 수 있는 CPU 칩 내에 있는 작지만 빠른 메모리에 저장하는 기법
HTML 로컬 스토리지
WKWebsiteDataTypeLocalStorage
HTML 세션 스토리지
WKWebsiteDataTypeSessionStorage
웹 스토리지(Web Storage)에는 로컬 스토리지(Local Storage)와 세션 스토리지(Session Storage)가 있다.
차이점은 데이터가 어떤 범위 내에서 얼마나 오래 보존되느냐에 있다.
- 로컬 스토리지 Local Storage : 웹 페이지의 세션이 끝나더라도 데이터가 지워지지 않는다.
- 세션 스토리지 Session Storage : 웹 페이지의 세션이 끝날 때 저장된 데이터가 지워진다.
WebSQL 데이터베이스
WKWebsiteDataTypeWebSQLDatabases
IndexedDB 데이터베이스
WKWebsiteDataTypeIndexedDBDatabases
WebSQL Database는 구조적이고 체계화된 관계형 데이터를 대량으로 저장하기에 적합하다.
- 서버급 대용량 DBMS만큼은 아니지만, 안정적이고 경량의 관계형 자료구조를 지원하고 표준 SQL 질의를 통해 데이터를 보다 유연하게 다룰 수 있다.
- 도메인 단위로 DB가 분리되므로 특정 도메인에서 생성한 DB는 다른 도메인에서 접근이 불가능하다.
- 사파리, 크롬, 오페라 브라우저만 WebSQL Database를 지원한다.
IndexedDB Database는 웹 인터페이스 중 하나로 로컬 데이터베이스 역할을 한다. 즉, 브라우저에서 제공하는 데이터베이스라고 이해하면 편하다.
- 로컬 스토리지나 세션 스토리지보다 많은 양의 데이터를 저장할 수 있다.