URL Cache는 네트워크 요청에 대한 응답 데이터를 캐시하여, 동일한 요청에 대해 더 빠르고 효율적으로 응답을 제공하는 메커니즘입니다. URL Cache를 통해 네트워크 트래픽을 줄이고, 응답 시간을 단축하며, 앱의 성능을 향상시킬 수 있습니다.
URL Cache의 주요 기능
1. 캐싱 정책:
• URL Cache는 HTTP 응답 헤더에서 제공하는 캐싱 지침을 따릅니다. 이러한 지침은 서버가 클라이언트에게 응답을 캐시할지 여부와 캐시 기간을 알리는 방법입니다.
• 대표적인 헤더:
• Cache-Control: 캐시 동작을 제어하는 가장 일반적인 헤더. 예: no-cache, max-age, public, private.
• Expires: 응답이 만료되는 날짜와 시간을 지정합니다.
• ETag: 응답의 고유 식별자. 변경 여부를 확인하는 데 사용됩니다.
• Last-Modified: 마지막으로 수정된 날짜와 시간을 나타냅니다.
2. 캐싱 전략:
• 메모리 캐시: 메모리에 데이터를 저장하여 빠르게 접근할 수 있게 합니다. 앱이 종료되면 캐시가 사라집니다.
• 디스크 캐시: 디스크에 데이터를 저장하여 앱이 종료된 후에도 캐시를 유지합니다.
3. 캐시 조회:
• 동일한 URL 요청 시, 캐시된 데이터가 유효하면 네트워크 요청을 생략하고 캐시된 데이터를 반환합니다.
• 캐시된 데이터가 유효하지 않거나 만료된 경우, 네트워크 요청을 수행하여 데이터를 갱신하고 캐시를 업데이트합니다.
URL Cache 설정
URLSession에서 캐시를 설정할 때 URLCache 객체를 사용합니다.
import Foundation
// URLCache 설정 (메모리: 4MB, 디스크: 20MB)
let memoryCapacity = 4 * 1024 * 1024 // 4MB
let diskCapacity = 20 * 1024 * 1024 // 20MB
let urlCache = URLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: "myCache")
// URLSessionConfiguration 설정
let configuration = URLSessionConfiguration.default
configuration.urlCache = urlCache
configuration.requestCachePolicy = .useProtocolCachePolicy
// URLSession 생성
let session = URLSession(configuration: configuration)
// URL 요청
if let url = URL(string: "https://www.example.com") {
let request = URLRequest(url: url)
// 데이터 태스크 생성 및 시작
let task = session.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error.localizedDescription)")
return
}
if let httpResponse = response as? HTTPURLResponse {
if httpResponse.statusCode == 200 {
// 캐시된 응답 처리
print("Data received and cached")
} else {
print("HTTP Error: \(httpResponse.statusCode)")
}
}
}
task.resume()
}
캐시 정책 설정
URL 요청 시 캐시 정책을 지정하여 캐시 동작을 제어할 수 있습니다.
• .useProtocolCachePolicy: 서버의 캐시 관련 헤더를 따릅니다.
• .reloadIgnoringLocalCacheData: 캐시를 무시하고 항상 네트워크에서 데이터를 가져옵니다.
• .returnCacheDataElseLoad: 캐시된 데이터가 있으면 이를 사용하고, 없으면 네트워크 요청을 수행합니다.
• .returnCacheDataDontLoad: 캐시된 데이터가 있으면 이를 사용하고, 없으면 실패합니다.
let request = URLRequest(url: url, cachePolicy: .returnCacheDataElseLoad, timeoutInterval: 60.0)
캐시 무효화 및 제거
캐시를 수동으로 무효화하거나 제거할 수 있습니다.
// 특정 URL 요청의 캐시 무효화
if let cachedResponse = urlCache.cachedResponse(for: request) {
urlCache.removeCachedResponse(for: request)
}
// 모든 캐시 데이터 제거
urlCache.removeAllCachedResponses()
URL Cache의 장점
1. 성능 향상: 캐시된 데이터를 사용하여 네트워크 요청 수와 대기 시간을 줄여 성능을 향상시킵니다.
2. 네트워크 트래픽 감소: 동일한 데이터를 여러 번 요청하지 않아 네트워크 트래픽을 줄입니다.
3. 오프라인 지원: 캐시된 데이터를 사용하여 네트워크 연결이 없을 때도 일정 부분의 기능을 제공할 수 있습니다.
'Apple > Apple_Foundation' 카테고리의 다른 글
Swift에서의 네트워킹: URLSession 개념, 장점, 그리고 실전 활용법 (0) | 2024.08.16 |
---|---|
iOS에서 HTTP 쿠키 관리하기: 개념부터 실습까지 (0) | 2024.08.12 |
FileManager (0) | 2024.07.29 |