[swift] Swift Moya에서 네트워크 로그 필터링하기

Swift Moya는 iOS 앱에서 네트워크 작업을 처리하기 위한 강력한 라이브러리입니다. 이 라이브러리를 사용하면 API 요청을 쉽게 만들고 응답 데이터를 처리할 수 있습니다. 하지만 때로는 보안상의 이유로 네트워크 로그를 필터링해야 할 수도 있습니다. 이번 글에서는 Swift Moya에서 네트워크 로그를 필터링하는 방법에 대해 알아보겠습니다.

MoyaProvider 설정

MoyaProvider는 실제로 API 호출을 처리하기 위해 사용되는 클래스입니다. 네트워크 로그를 필터링하기 위해서는 MoyaProvider의 로깅 옵션을 조정해야 합니다. 다음은 MoyaProvider에 로깅 옵션을 설정하는 예제 코드입니다.

let provider = MoyaProvider<MyAPI>(plugins: [
    NetworkLoggerPlugin(configuration: .init(formatter: .init(responseData: JSONResponseDataFormatter),
                                            logOptions: .verbose))
])

위의 예제 코드에서는 NetworkLoggerPlugin의 logOptions 속성을 .verbose로 설정하여 모든 네트워크 로그를 출력하도록 설정했습니다. 필터링을 적용하기 위해서는 이 코드를 수정해야 합니다.

필터링 적용

네트워크 로그를 실시간으로 필터링하려면 NetworkLoggerPlugin의 configuration 속성을 변경해야 합니다. 다음은 로깅 포맷터를 확장하여 로그를 필터링하는 예제 코드입니다.

struct MyNetworkLoggerPlugin: PluginType {
    var filterHeaders: Set<String> = []
    
    func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {
        // 필터링하고 싶은 헤더의 이름을 추가합니다.
        let filteredHeaders = request.allHTTPHeaderFields?.filter { !self.filterHeaders.contains($0.key) }
        
        var modifiedRequest = request
        modifiedRequest.allHTTPHeaderFields = filteredHeaders
        
        return modifiedRequest
    }
}

let filterPlugin = MyNetworkLoggerPlugin(filterHeaders: ["Authorization"])
let provider = MoyaProvider<MyAPI>(plugins: [filterPlugin, NetworkLoggerPlugin(verbose: true)])

위의 코드에서는 MyNetworkLoggerPlugin이라는 새로운 플러그인을 생성하고, 필터링하고 싶은 헤더의 이름을 filterHeaders로 전달합니다. prepare 메서드는 필터링된 헤더를 제거한 수정된 URLRequest를 반환합니다.

결론

이제 Swift Moya에서 네트워크 로그를 필터링하는 방법에 대해 알아보았습니다. 이를 통해 보안상의 이유로 로그를 제한하거나 필요한 정보만 볼 수 있게 할 수 있습니다. 필요에 따라 필터링 옵션을 추가하고, 로깅 포맷터를 수정하여 원하는 결과를 얻을 수 있습니다.

참고 자료