[swift] Swift로 HTTP 요청 응답 받기

Swift는 iOS 애플리케이션 개발을 위한 강력한 프로그래밍 언어입니다. Swift를 사용하여 HTTP 요청을 보내고 응답을 받는 방법에 대해 알아보겠습니다.

URLSession을 이용한 HTTP 요청

Swift에서는 URL 요청을 보내기 위해 URLSession을 사용합니다. URLSession은 앱이 비동기적으로 네트워크 작업을 수행할 수 있도록 해줍니다.

let url = URL(string: "https://api.example.com/data")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
    if let error = error {
        print("Error: \(error)")
        return
    }
    
    if let data = data {
        let responseString = String(data: data, encoding: .utf8)
        print("Response: \(responseString)")
    }
}

task.resume()

위의 코드에서는 URLSession.shared.dataTask(with:completionHandler:) 메서드를 사용하여 데이터를 얻기 위한 GET 요청을 보냅니다. 응답 데이터를 처리하기 위한 completionHandler 클로저를 사용합니다.

JSON 파싱

이제 HTTP 응답에서 JSON 데이터를 추출하는 방법을 알아보겠습니다. Swift에서는 Codable 프로토콜을 사용하여 JSON 데이터를 쉽게 파싱할 수 있습니다.

struct ResponseData: Codable {
    let id: Int
    let name: String
    let age: Int
}

...

if let data = data {
    do {
        let decoder = JSONDecoder()
        let responseData = try decoder.decode(ResponseData.self, from: data)
        print("Name: \(responseData.name)")

    } catch {
        print("Error: \(error)")
    }
}

위의 코드에서는 ResponseData라는 구조체를 정의하고 Codable 프로토콜을 준수하도록 만듭니다. JSONDecoder를 사용하여 응답 데이터를 ResponseData 객체로 디코딩합니다.

오류 처리

HTTP 요청에서 오류를 처리하는 방법도 중요합니다. Swift에서는 Error 프로토콜에 준수하는 오류 타입을 정의하여 오류를 처리할 수 있습니다.

enum APIError: Error {
    case requestFailed
    case invalidData
    case jsonParsingFailure
}

...

if let error = error {
    print("Error: \(error)")
    // 오류 처리
    return
}

if let data = data {
    do {
        let decoder = JSONDecoder()
        let responseData = try decoder.decode(ResponseData.self, from: data)
        print("Name: \(responseData.name)")

    } catch {
        print("Error: \(error)")
        // 오류 처리
    }
}

위의 코드에서는 APIError라는 열거형을 정의하고 Error 프로토콜을 준수하도록 만듭니다. 오류가 발생할 경우 해당 오류 타입을 사용하여 상황에 맞게 처리할 수 있습니다.

결론

Swift를 사용하여 HTTP 요청을 보내고, 응답을 받는 방법에 대해 알아보았습니다. URLSession을 사용하여 요청을 보낼 수 있으며, Codable 프로토콜을 이용하여 JSON 데이터를 쉽게 파싱할 수 있습니다. 오류 처리도 중요하므로 적절한 오류 타입을 정의하고 처리하는 것이 좋습니다.