[swift] Alamofire를 이용한 인터셉터(Interceptor) 구현

Alamofire는 Swift로 작성된 강력한 네트워킹 라이브러리로, HTTP 요청과 응답을 쉽게 처리할 수 있습니다. 이 라이브러리는 인터셉터(Interceptor) 를 통해 요청과 응답을 가로채고 수정할 수 있는 기능을 제공합니다. 이번 블로그 포스트에서는 Alamofire를 사용하여 인터셉터를 구현하는 방법을 살펴보겠습니다.

인터셉터란?

인터셉터는 네트워크 요청이나 응답을 가로채어 수정할 수 있는 기능을 말합니다. 이를 통해 각종 인증, 로깅, 에러 처리 등을 효율적으로 처리할 수 있습니다.

Alamofire 인터셉터 구현

Alamofire를 사용하여 인터셉터를 구현하려면 RequestInterceptor 프로토콜을 채택한 클래스를 작성해야 합니다. 아래는 간단한 예제 코드입니다.

import Alamofire

class CustomInterceptor: RequestInterceptor {
    
    func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) {
        // 요청을 수정하는 로직을 구현합니다.
        var modifiedRequest = urlRequest
        modifiedRequest.setValue("Bearer <your-auth-token>", forHTTPHeaderField: "Authorization")
        completion(.success(modifiedRequest))
    }
    
    func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
        // 요청 재시도 로직을 구현합니다.
        // 예를 들어 401 Unauthorized 오류가 발생했을 때 새로운 토큰을 얻어 재시도할 수 있습니다.
    }
}

위 코드에서 CustomInterceptor 클래스는 RequestInterceptor 프로토콜을 채택하고 adapt 메서드와 retry 메서드를 구현하고 있습니다. adapt 메서드는 요청을 수정하고 retry 메서드는 요청 재시도 로직을 처리합니다.

사용 예시

이제 작성한 인터셉터를 Alamofire 세션에 적용하여 사용할 수 있습니다.

let interceptor = CustomInterceptor()
let session = Session(interceptor: interceptor)

위와 같이 인터셉터를 생성한 뒤, Session 객체를 생성할 때 해당 인터셉터를 전달해주면 인터셉터가 적용됩니다.

마무리

이번 포스트에서는 Alamofire를 사용하여 인터셉터를 구현하고 사용하는 방법에 대해 살펴보았습니다. 인터셉터는 네트워크 요청과 응답에 대한 다양한 처리를 효율적으로 할 수 있도록 도와줍니다. 앱의 요구에 맞게 인터셉터를 구현하여 네트워크 요청과 응답을 보다 효율적으로 처리할 수 있습니다.

참고문헌: