[swift] Swift로 HTTP 요청 다시 시도하기

Swift를 사용하여 HTTP 요청을 보낼 때, 때로는 요청이 실패하거나 응답이 도착하지 않을 수 있습니다. 이런 경우에는 요청을 다시 시도하는 기능이 필요할 수 있습니다. Swift에서는 이를 위해 간단한 코드를 구현할 수 있습니다.

예시 코드

아래의 예시 코드는 HTTP 요청을 보내는 함수를 구현하고, 요청이 실패하는 경우 일정 횟수만큼 재시도합니다.

import Foundation

func sendRequest() {
    let url = URL(string: "https://example.com")!
    let request = URLRequest(url: url)
    
    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if let error = error {
            print("요청 실패:", error.localizedDescription)
            retryRequest(3) // 실패한 경우 3번 재시도
        }
        // 응답 처리 로직
    }
    
    task.resume()
}

func retryRequest(_ remainingAttempts: Int) {
    guard remainingAttempts > 0 else {
        print("재시도 횟수 초과")
        return
    }
    
    print("재시도 중... (\(remainingAttempts)번 남음)")
    // 일정 시간 지연 후에 재시도
    DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
        sendRequest()
    }
}

sendRequest()

위의 코드에서는 sendRequest() 함수에서 HTTP 요청을 보내고, 요청이 실패한 경우 retryRequest() 함수를 호출하여 재시도를 시도합니다. retryRequest() 함수는 재시도 횟수를 매개변수로 받아 남은 재시도 횟수를 출력한 뒤, 3초 후에 sendRequest() 함수를 다시 호출합니다. 이를 통해 일정 횟수만큼 요청을 다시 시도할 수 있습니다.

참고 자료