[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의 RequestAdapter
와 RequestRetrier
프로토콜을 준수하여 로깅 기능을 구현합니다. 다음은 간단한 예시입니다.
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 공식 문서를 참고하세요.