[swift] - 네트워크 요청 및 응답에 대한 상세한 로그를 출력하는 Swift 코드 예제 제시하기
import Foundation

class NetworkLogger: NSObject, URLSessionDelegate, URLSessionTaskDelegate {
    static var shared = NetworkLogger()

    private override init() {}

    func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
        print("Redirecting to:", request.url?.absoluteString ?? "")
        completionHandler(request)
    }

    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
        if let error = error {
            print("Error:", error.localizedDescription)
        }
    }

    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
        if let responseString = String(data: data, encoding: .utf8) {
            print("Response:", responseString)
        }
    }

    func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
        print("Sent", totalBytesSent, "bytes")
    }
}

// 네트워크 요청할 때 로그를 출력하기 위해 URLSessionConfiguration을 설정합니다.
let configuration = URLSessionConfiguration.default
configuration.protocolClasses?.insert(NetworkLogger.self, at: 0)

let session = URLSession(configuration: configuration)

// 실제 네트워크 요청을 보냅니다.
let urlString = "https://www.example.com"
if let url = URL(string: urlString) {
    let request = URLRequest(url: url)
    let task = session.dataTask(with: request) { (data, response, error) in
        if let error = error {
            print("Error:", error.localizedDescription)
        } else if let data = data {
            if let responseString = String(data: data, encoding: .utf8) {
                print("Response:", responseString)
            }
        }
    }
    task.resume()
}

위의 예제 코드는 Swift로 네트워크 요청과 응답 내용을 로그로 출력하는 방법을 보여줍니다. NetworkLogger라는 클래스를 만들어 URLSessionDelegateURLSessionTaskDelegate를 구현하고, 원하는 로그를 출력하는 메서드들을 오버라이드합니다.

먼저, urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:) 메서드는 리다이렉션 요청이 들어왔을 때 호출됩니다. 이 메서드를 통해 리다이렉션 요청의 URL을 출력할 수 있습니다.

다음으로, urlSession(_:task:didCompleteWithError:) 메서드는 요청이 완료되었을 때 호출됩니다. 에러가 있을 경우 해당 에러를 출력합니다.

또한, urlSession(_:dataTask:didReceive:) 메서드는 데이터를 받았을 때 호출됩니다. 받은 데이터를 문자열로 변환하여 출력합니다.

마지막으로, urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:) 메서드는 요청할 때 보낸 데이터의 크기를 출력합니다.

위의 예제에서는 URLSessionConfiguration을 사용하여 NetworkLogger를 프로토콜 클래스로 등록하고, 이를 설정한 URLSession을 사용하여 실제 네트워크 요청을 보내는 방법을 보여줍니다. 요청할 URL을 설정한 후 dataTask(with:completionHandler:) 메서드를 호출하여 요청을 보낼 수 있습니다.

참고 자료: