[swift] Alamofire와 함께 사용하는 앱 로깅 구현하기

소개

앱 로깅은 개발자에게 디버깅과 앱 동작 추적에 매우 중요한 정보를 제공합니다. Alamofire는 매우 인기있는 Swift 기반 HTTP 클라이언트 라이브러리로, 웹 요청과 응답을 다루는 데 사용됩니다. 이 글에서는 Alamofire와 함께 사용하여 앱 로깅을 구현하는 방법을 살펴보겠습니다.

Alamofire 로깅 기능 활성화

Alamofire는 기본적으로 로그를 출력하지 않습니다. 그러나 Debug 모드에서 HTTP 요청과 응답을 로깅하려면 SessionConfiguration을 사용하여 Alamofire에 로그 기능을 활성화해야 합니다.

import Alamofire

let sessionConfiguration = URLSessionConfiguration.default
sessionConfiguration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders
sessionConfiguration.timeoutIntervalForRequest = 30

let sessionManager = SessionManager(configuration: sessionConfiguration)

#if DEBUG
sessionManager.adapter = Alamofire.RequestLogger()
#endif

// 이후 Alamofire를 사용해 웹 요청을 보낼 때 로그가 출력됩니다.

RequestLogger 클래스 구현

앱 로깅을 위해 별도의 RequestLogger 클래스를 만들어야 합니다. 이 클래스에서는 Alamofire의 RequestAdapterRequestRetrier 프로토콜을 준수하여 로깅 기능을 구현합니다. 다음은 간단한 예시입니다.

import Alamofire

class RequestLogger: RequestAdapter, RequestRetrier {
    
    private let logger: AppLogger = AppLogger()
    
    // 로그 출력을 위한 RequestAdapter 메서드
    func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
        logger.log(request: urlRequest)
        return urlRequest
    }
    
    // 요청 실패 시 로그 출력을 위한 RequestRetrier 메서드
    func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: RequestRetryCompletion) {
        logger.log(error: error)
        completion(true, 1.0) // 실패한 요청을 재시도합니다.
    }
}

로그 출력을 위한 AppLogger 클래스 구현

실제로 로그를 출력하기 위해 AppLogger 클래스를 구현해야 합니다. 이 클래스에는 로그를 파일로 저장하거나 서버로 전송하는 등의 로그 관리 기능을 추가할 수 있습니다. 여기서는 간단히 로그를 콘솔에 출력하는 로그 기능만을 구현하도록 하겠습니다.

class AppLogger {
    
    func log(request: URLRequest) {
        guard let url = request.url,
            let httpMethod = request.httpMethod else {
                return
        }
        
        print("HTTP Request: \(httpMethod) \(url.absoluteString)")
    }
    
    func log(error: Error) {
        print("Error occurred: \(error.localizedDescription)")
    }
}

결론

이제 Alamofire와 함께 앱 로깅을 구현하기 위한 기본적인 단계들을 알아보았습니다. 이를 통해 앱의 네트워킹 동작을 추적하고 디버깅할 수 있습니다. 프로덕션 환경에서는 로그를 파일로 저장하거나 서버로 전송하는 등의 추가 기능을 구현할 수도 있습니다.

더 많은 정보를 알고 싶다면 Alamofire 공식 문서를 참고하세요.