[swift] - 네트워크 활동 로그를 통해 Alamofire의 동작 흐름을 시각적으로 파악하는 방법

Alamofire는 Swift에서 많이 사용되는 네트워킹 라이브러리입니다. 네트워크 요청과 응답을 처리하기 위해 사용되는 Alamofire는 기본적으로 네트워크 활동 로그를 출력하지 않습니다. 그러나 우리는 이 로그를 켜서 Alamofire의 동작 흐름을 시각적으로 파악할 수 있습니다.

아래는 네트워크 활동 로그를 활성화하는 방법입니다.

  1. 프로젝트 내에 AlamofireDebug.swift 파일을 생성합니다.

  2. AlamofireDebug.swift 파일에 아래의 코드를 추가합니다.

import Alamofire

extension URLSessionTaskMetrics {
    open override var description: String {
        var descriptionArray: [String] = [
            "Task Interval: \(taskInterval.debugDescription)",
        ]
        for transaction in transactionMetrics {
            descriptionArray.append("\nTransaction Metrics:\n\(transaction.description)\n")
        }
        return descriptionArray.joined(separator: "\n")
    }
}

extension URLSessionTaskTransactionMetrics {
    open override var description: String {
        var descriptionArray: [String] = []
        descriptionArray.append("Request URL: \(request?.url?.absoluteString ?? "")")
        descriptionArray.append("Response URL: \(response?.url?.absoluteString ?? "")")
        descriptionArray.append("Response Status: \(response?.statusCode ?? 0)")
        descriptionArray.append("Start Time: \(startTime.debugDescription)")
        descriptionArray.append("End Time: \(endTime.debugDescription)")
        descriptionArray.append("Duration: \(duration) seconds")
        return descriptionArray.joined(separator: "\n")
    }
}

extension Logger {
    public func requestDidFinish(transactionMetrics: URLSessionTaskMetrics) {
        let description = transactionMetrics.description
        logRequest(description)
    }
}

extension DataRequest {
    @objc open func alamofireMetrics() -> URLSessionTaskMetrics? {
        if let delegate = delegate as? Alamofire.TaskDelegate {
            return delegate[.metrics]
        }
        return nil
    }
}

func logRequest(_ string: String) {
    print("Alamofire Log: \(string)")
}

  1. AppDelegate.swift 파일에 Alamofire 로그를 켜는 코드를 추가합니다.
import Alamofire

func applicationDidFinishLaunching(_ aNotification: Notification) {
    // 이전에 작성한 AlamofireDebug.swift 파일의 내용을 붙여넣습니다.
    Logger.shared.addLogHandler(AlamofireLogHandler())
}

네트워크 요청을 하게 되면, Xcode의 콘솔에서 네트워크 활동 로그가 출력됩니다. 이 로그를 통해 Alamofire가 어떻게 동작하는지 시각적으로 파악할 수 있습니다.

이렇게 네트워크 활동 로그를 활성화하여 Alamofire의 동작 흐름을 시각적으로 파악하는 방법을 알아보았습니다. 알라모파이어를 조금 더 깊이있게 이해하고자 할 때 이 기능을 활용해 보세요.

참고 자료: