Alamofire는 iOS 개발에서 널리 사용되는 HTTP 네트워킹 라이브러리입니다. Session, Interceptor, 그리고 Request Flow는 Alamofire의 주요 구성 요소입니다. 이들을 활용하면 네트워킹 작업을 더욱 효율적이고 유연하게 처리할 수 있습니다.
AF.request("https://api.example.com/data")
.validate()
.responseJSON { response in
print(response)
}
위 코드에서 AF는 Alamofire의 기본 Session입니다. 기본적으로 Session.default를 사용합니다.
특정 설정이 필요한 경우, 커스텀 Session을 만들 수 있습니다.
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 30 // 타임아웃 설정
configuration.httpAdditionalHeaders = ["Authorization": "Bearer YOUR_TOKEN"]
let session = Session(configuration: configuration)
session.request("https://api.example.com/data")
.validate()
.responseJSON { response in
print(response)
}
여기서는 URLSessionConfiguration을 통해 세션 설정(예: 타임아웃, 헤더)을 커스터마이징했습니다.
Alamofire의 RequestInterceptor 프로토콜을 구현하면 커스텀 인터셉터를 만들 수 있습니다.
토큰 갱신 및 재시도 로직
class AuthInterceptor: RequestInterceptor {
// 요청 전 처리
func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) {
var adaptedRequest = urlRequest
// 헤더에 인증 토큰 추가
adaptedRequest.setValue("Bearer YOUR_ACCESS_TOKEN", forHTTPHeaderField: "Authorization")
completion(.success(adaptedRequest))
}
// 재시도 로직
func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
// 네트워크 오류나 인증 실패 시 재시도 로직 작성
if let response = request.response, response.statusCode == 401 {
// 토큰 갱신 로직 수행 후 재시도
refreshAccessToken { success in
if success {
completion(.retry)
} else {
completion(.doNotRetry)
}
}
} else {
completion(.doNotRetry)
}
}
// 토큰 갱신 메서드
private func refreshAccessToken(completion: @escaping (Bool) -> Void) {
// 토큰 갱신 로직 (예: API 요청)
print("Refreshing Access Token...")
completion(true) // 성공으로 가정
}
}
Interceptor 적용
let session = Session(interceptor: AuthInterceptor())
session.request("https://api.example.com/protected/data")
.validate()
.responseJSON { response in
print(response)
}
일단 이정도로 정리하고 다시 공부하자...