[swift] Alamofire를 사용하여 REST API 응답 캐싱하기

쉽고 간편한 방법으로 Alamofire를 사용하여 REST API 응답을 캐싱해보자.

앱에서 REST API를 사용하면서 성능을 향상시키기 위해 응답을 캐싱하는 것은 중요한 부분입니다. 야외 여행 앱에서 날씨 정보를 가져오는 API를 사용한다고 가정해봅시다. 매번 API 호출 시에 네트워크로부터 데이터를 가져오는 것은 비효율적입니다. 대신에, 가져온 데이터를 임시 저장소에 저장하여 이후 요청에서 재사용할 수 있습니다.

이제, Alamofire를 사용하여 REST API 응답을 캐싱하는 방법을 알아보겠습니다.

1. Alamofire 설치

먼저, Alamofire를 프로젝트에 추가해야 합니다. Cocoapods를 사용하고 있다면 Podfile에 다음 코드를 추가하고 pod install 명령어를 실행하세요.

pod 'Alamofire'

2. 캐시 매니저 설정

Alamofire에는 캐시를 관리하는 기능이 내장되어 있습니다. 이 기능을 사용하기 위해서는 URLCache를 커스텀하여 URLCache.shared에 할당해야 합니다. 이렇게 하면 Alamofire가 기본 캐시 매니저 대신에 커스텀 캐시 매니저를 사용할 수 있습니다.

// AppDelegate.swift

import Alamofire

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // 캐시 용량 설정 (메모리 및 디스크)
    let cacheSizeMemory = 50 * 1024 * 1024 // 50 MB
    let cacheSizeDisk = 100 * 1024 * 1024 // 100 MB
    let sharedCache = URLCache(memoryCapacity: cacheSizeMemory, diskCapacity: cacheSizeDisk, diskPath: "myCachePath")
    
    // Alamofire에 커스텀 캐시 매니저 할당
    let configuration = URLSessionConfiguration.default
    configuration.urlCache = sharedCache
    Alamofire.SessionManager.default = Alamofire.SessionManager(configuration: configuration)
    
    return true
}

3. API 요청하기

이제 캐싱된 응답을 사용하여 API 요청을 보내는 방법을 알아봅시다. Alamofire의 request 메서드를 사용하여 요청을 보낼 수 있습니다. 이 메서드를 호출할 때 cacheResponse 패러미터를 true로 설정하면 캐시된 응답이 사용됩니다.

Alamofire.request("https://api.weather.com/forecast").responseJSON { response in
    if response.result.isSuccess {
        // 응답 성공
        if let json = response.result.value {
            // JSON 데이터 처리
        }
    } else if response.result.isFailure {
        // 응답 실패
    }
}

위의 코드에서, 첫 번째 요청 시에는 네트워크로부터 데이터를 가져옵니다. 그러나 이후 동일한 요청을 보낼 때는 캐시된 응답을 사용하여 네트워크 비용을 줄일 수 있습니다.

4. 캐시 지우기

앱이나 사용자가 캐시를 지우고 싶을 때를 대비하여 캐시를 제거하는 방법을 알아봅시다. Alamofire의 URLCache.shared.removeAllCachedResponses() 메서드를 호출하여 모든 캐시된 응답을 제거할 수 있습니다.

URLCache.shared.removeAllCachedResponses()

결론

이제 Alamofire를 사용하여 REST API 응답을 캐싱하는 방법을 알게 되었습니다. API 요청에 따라서 응답이 자주 변하지 않는 경우에는 응답을 캐싱하여 네트워크 비용을 줄일 수 있습니다.