[swift] Swift로 HTTP 요청 시간 초과 설정하기

HTTP 요청을 보낼 때 때로는 서버의 응답이 오랫동안 지연되거나 응답이 오지 않는 경우가 발생할 수 있습니다. 이러한 경우 애플리케이션은 이러한 지연에 따라 사용자 경험에 영향을 받을 수 있습니다. 이를 해결하기 위해 Swift로 HTTP 요청 시간 초과를 설정하는 방법에 대해 알아보겠습니다.

URL 요청 객체 생성

먼저 URLSession 객체를 사용하여 URL 요청을 만들어야 합니다. 다음은 GET 요청을 보내는 예제 코드입니다.

import Foundation

let url = URL(string: "https://example.com")!
let request = URLRequest(url: url)

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
    // 요청 완료 후 처리할 코드
}

task.resume()

시간 초과 설정

다음으로, HTTP 요청의 시간 초과를 설정해야 합니다. 이를 위해 URLRequest 객체의 timeoutInterval 속성을 설정할 수 있습니다. timeoutInterval은 초 단위로 지정되며, 응답을 받을 최대 대기 시간을 나타냅니다. 기본값은 60초입니다.

request.timeoutInterval = 10 // 10초로 시간 초과 설정

위의 코드에서는 timeoutInterval을 10으로 설정하여 10초 동안 응답을 기다립니다. 이 기간 이후에도 응답이 없으면 타임아웃이 발생합니다.

타임아웃 처리

위의 예제에서는 URLSession.shared.dataTask 메서드를 사용하여 요청을 보냈습니다. 이 메서드는 타임아웃이 발생했을 때 알림을 받을 수 있는 다른 두 개의 클로저 매개변수를 제공합니다.

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
    // 요청 완료 후 처리할 코드
} 

task.resume()

// 타임아웃 처리
task.priority = URLSessionTask.lowPriority
task.timeoutInterval = 10 // 10초로 시간 초과 설정

DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
    if task.state == .running {
        task.cancel()
        // 타임아웃 처리 코드
    }
}

위의 예제에서는 task.priority에 낮은 우선순위를 지정하여 타임아웃 처리에 대비합니다. 그리고 DispatchQueue.main.asyncAfter를 사용하여 10초 후에 요청이 아직 실행 중인 경우에 타임아웃 처리를 수행합니다. task.cancel()을 호출하여 요청을 취소하고, 타임아웃 처리 코드를 추가로 작성할 수 있습니다.

이렇게 Swift로 HTTP 요청 시간 초과를 설정할 수 있습니다. 애플리케이션에서는 타임아웃 처리를 고려하여 서버 응답 지연에 유연하게 대응할 수 있습니다.


참고 자료: