From f3fce2b116f72a87ec31b97ad8fe0f2d12745b5c Mon Sep 17 00:00:00 2001 From: taipaise Date: Sun, 3 Aug 2025 23:09:07 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EB=84=A4=ED=8A=B8=EC=9B=8C?= =?UTF-8?q?=ED=82=B9=20=EB=A1=9C=EA=B9=85=20=ED=94=8C=EB=9F=AC=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NetworkService/NetworkService.swift | 16 ++--- .../Plugin/BitnagilLoggingPlugin.swift | 70 +++++++++++++++++++ 2 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 Projects/DataSource/Sources/NetworkService/Plugin/BitnagilLoggingPlugin.swift diff --git a/Projects/DataSource/Sources/NetworkService/NetworkService.swift b/Projects/DataSource/Sources/NetworkService/NetworkService.swift index bbb11144..fdc1a2c1 100644 --- a/Projects/DataSource/Sources/NetworkService/NetworkService.swift +++ b/Projects/DataSource/Sources/NetworkService/NetworkService.swift @@ -18,7 +18,8 @@ final class NetworkService { plugins = [ TokenInjectionPlugin(), RefreshTokenPlugin(), - RetryPlugin()] + RetryPlugin(), + BitnagilLoggingPlugin()] } func request( @@ -61,11 +62,6 @@ final class NetworkService { let (data, response) = try await URLSession.shared.data(for: request) - // TODO: - 로깅 로직 수정 - if let httpResponse = response as? HTTPURLResponse { - BitnagilLogger.log(logType: .info, message: "응답 코드: \(httpResponse.statusCode)") - } - if withPlugins { for plugin in plugins { try await plugin.didReceive( @@ -79,19 +75,15 @@ final class NetworkService { else { throw NetworkError.invalidResponse } guard 200..<300 ~= httpResponse.statusCode else { - BitnagilLogger.log(logType: .error, message: "응답 코드: \(httpResponse.statusCode)") throw NetworkError.invalidStatusCode(statusCode: httpResponse.statusCode) } - guard !data.isEmpty - else { throw NetworkError.emptyData } + guard !data.isEmpty else { throw NetworkError.emptyData } do { let baseResponse = try decoder.decode(BaseResponse.self, from: data) - BitnagilLogger.log(logType: .info, message: "Server Message: \(baseResponse.message)") - guard let responseDTO = baseResponse.data - else { return nil } + guard let responseDTO = baseResponse.data else { return nil } return responseDTO } catch { diff --git a/Projects/DataSource/Sources/NetworkService/Plugin/BitnagilLoggingPlugin.swift b/Projects/DataSource/Sources/NetworkService/Plugin/BitnagilLoggingPlugin.swift new file mode 100644 index 00000000..7cd99a38 --- /dev/null +++ b/Projects/DataSource/Sources/NetworkService/Plugin/BitnagilLoggingPlugin.swift @@ -0,0 +1,70 @@ +// +// BitnagilLoggingPlugin.swift +// DataSource +// +// Created by 이동현 on 8/3/25. +// + +import Foundation +import Shared + + +struct BitnagilLoggingPlugin: NetworkPlugin { + func willSend(request: URLRequest, endpoint: Endpoint) async throws -> URLRequest { + let urlString = request.url?.absoluteString ?? "" + let method = request.httpMethod ?? "" + let headers = request.allHTTPHeaderFields ?? [:] + let body: String + if let bodyData = request.httpBody { + body = String(data: bodyData, encoding: .utf8) ?? "디코딩 실패" + } else { + body = "내용 없음" + } + + BitnagilLogger.log( + logType: .debug, + message: """ + REQUEST➡️ + - URL: \(urlString) + - Method: \(method) + - Headers: \(headers) + - Body: \(body) + """ + ) + return request + } + + func didReceive(response: URLResponse, data: Data?, endpoint: Endpoint) async throws { + let urlString = response.url?.absoluteString ?? "" + + guard let httpResponse = response as? HTTPURLResponse else { + BitnagilLogger.log(logType: .error, message: "🚨\(urlString)에 대한 response는 HTTPResponse가 아닙니다.🚨") + return + } + + let statusCode = httpResponse.statusCode + let headers = httpResponse.allHeaderFields + + // code/message 추출 + var code: String = "" + var message: String = "" + if + let data = data, + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] + { + code = json["code"] as? String ?? "" + message = json["message"] as? String ?? "" + } + + BitnagilLogger.log( + logType: .debug, + message: """ + RESPONSE⬅️ + - 요청URL: \(urlString) + - Status: \(statusCode) + - Code: \(code) + - Message: \(message) + """ + ) + } +} From a68a8b0feda8dc96336be4c2303e1c7192579844 Mon Sep 17 00:00:00 2001 From: taipaise Date: Sun, 3 Aug 2025 23:14:14 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EA=B3=B5=EB=B0=B1,=20=EC=83=81=EC=88=98=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/NetworkService/Plugin/BitnagilLoggingPlugin.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/Projects/DataSource/Sources/NetworkService/Plugin/BitnagilLoggingPlugin.swift b/Projects/DataSource/Sources/NetworkService/Plugin/BitnagilLoggingPlugin.swift index 7cd99a38..0536117b 100644 --- a/Projects/DataSource/Sources/NetworkService/Plugin/BitnagilLoggingPlugin.swift +++ b/Projects/DataSource/Sources/NetworkService/Plugin/BitnagilLoggingPlugin.swift @@ -8,7 +8,6 @@ import Foundation import Shared - struct BitnagilLoggingPlugin: NetworkPlugin { func willSend(request: URLRequest, endpoint: Endpoint) async throws -> URLRequest { let urlString = request.url?.absoluteString ?? "" @@ -43,7 +42,6 @@ struct BitnagilLoggingPlugin: NetworkPlugin { } let statusCode = httpResponse.statusCode - let headers = httpResponse.allHeaderFields // code/message 추출 var code: String = ""