[swift] Swift로 동기 HTTP 요청 보내기

Swift는 강력한 언어로서 내장된 URLSession 클래스를 사용하여 HTTP 요청을 보낼 수 있습니다. 이번 글에서는 Swift를 사용하여 동기적으로 HTTP 요청을 보내는 방법에 대해 알아보겠습니다.

URLSession을 사용한 동기 HTTP 요청

Swift의 URLSession 클래스는 HTTP 요청을 보내기 위한 핵심 클래스입니다. 동기적으로 요청을 보내기 위해서는 URLSession의 dataTask 메서드를 호출하고, 클로저를 사용하여 요청과 응답을 처리해야 합니다.

다음은 Swift를 사용하여 동기적으로 HTTP GET 요청을 보내는 예제 코드입니다.

import Foundation

func sendHTTPRequest() {
    // 요청 URL 생성
    guard let url = URL(string: "https://api.example.com/data") else {
        print("Invalid URL")
        return
    }

    // URLRequest 생성
    let request = URLRequest(url: url)

    // 동기적으로 데이터 요청
    let semaphore = DispatchSemaphore(value: 0)
    let session = URLSession.shared
    let task = session.dataTask(with: request) { (data, response, error) in
        // 응답 처리
        if let error = error {
            print("Error: \(error.localizedDescription)")
        } else if let data = data {
            if let stringData = String(data: data, encoding: .utf8) {
                print("Response: \(stringData)")
            }
        } else {
            print("No data received")
        }
        semaphore.signal() // 세마포어 시그널
    }
    task.resume()

    semaphore.wait() // 세마포어 대기
}

// HTTP 요청 보내기
sendHTTPRequest()

위의 코드는 URLSession의 dataTask 메서드를 사용하여 HTTP GET 요청을 보냅니다. 응답을 받은 후에는 클로저 내부에서 데이터를 처리하게 됩니다. 위의 예제에서는 응답 데이터를 문자열로 변환하여 출력하고 있습니다.

동기적으로 요청을 보내기 위해 DispatchSemaphore를 사용하여 요청이 완료될 때까지 대기하도록 하고, 클로저 내부에서 세마포어를 시그널하여 대기 상태를 해제합니다.

결론

Swift를 사용하여 동기적으로 HTTP 요청을 보내기 위해서는 URLSession의 dataTask 메서드와 DispatchSemaphore를 조합하여 요청과 응답을 처리해야 합니다. 이를 통해 원하는 응답 데이터를 동기적으로 받아올 수 있습니다.