[swift] Swift Moya에서 캐싱 시간 설정하기

Moya는 Swift에서 네트워크 호출을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. Moya에서는 서버로부터 받은 응답을 캐싱할 수 있는 기능도 제공합니다. 이번 글에서는 Moya에서 캐싱 시간을 설정하는 방법에 대해 알아보겠습니다.

Moya에서 캐싱 설정하기

Moya에서는 EndpointClosure를 사용하여 네트워크 호출을 구성합니다. EndpointClosure에서는 요청을 보내기 전에 요청 객체에 대한 변경 및 구성을 할 수 있습니다. 이를 통해 캐싱 시간을 설정할 수 있습니다.

let provider = MoyaProvider<MyAPIService>(endpointClosure: { (target: MyAPIService) -> Endpoint in
    let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
    let cachingEndpoint = defaultEndpoint.replacing(task: .requestParameters(parameters: ["cache": "true"], encoding: JSONEncoding.default))
    
    return cachingEndpoint
}, ........ )

위의 코드에서 알 수 있듯이 endpointClosure를 사용하여 기본 Endpoint에 caching 매개변수를 추가하여 캐싱 설정을 할 수 있습니다. 이 캐싱 매개변수는 서버에서 사용되는 매개변수에 따라 다를 수 있습니다.

추가로 requestClosure를 사용하여 원하는 캐싱 시간을 설정할 수도 있습니다. requestClosure에서는 URLRequest 객체를 수정할 수 있습니다.

let provider = MoyaProvider<MyAPIService>(requestClosure: { (endpoint: Endpoint, closure: MoyaProvider.RequestResultClosure) in
    do {
        var request = try endpoint.urlRequest()
        request.cachePolicy = .returnCacheDataElseLoad
      
        closure(.success(request))
    } catch {
        closure(.failure(MoyaError.requestMapping(endpoint.url)))
    }
}, ........ )

위의 코드에서는 cachePolicy.returnCacheDataElseLoad로 설정하여 요청이 캐시에서 사용 가능한 경우 캐시된 응답을 사용하고, 그렇지 않은 경우 네트워크 호출을 수행합니다.

정리

이렇게 Moya에서 캐싱 시간을 설정하는 방법을 알아보았습니다. endpointClosurerequestClosure를 이용하여 원하는 캐시 설정을 적용할 수 있습니다. Moya를 사용하면 네트워크 호출을 더욱 효과적이고 간편하게 구현할 수 있으므로, 캐싱 설정 역시 유용한 기능 중 하나라고 할 수 있습니다.

참고 자료