[swift] 네트워크 통신

Swift는 iOS 및 macOS 애플리케이션 개발을 위한 강력한 프로그래밍 언어입니다. 이 언어를 사용하여 네트워크 통신을 쉽게 구현할 수 있습니다. 이번 블로그에서는 Swift를 사용하여 네트워크 통신을 하는 방법에 대해 알아보겠습니다.

URLSession을 사용한 HTTP 요청

Swift에서 네트워크 통신을 구현하기 위해 가장 일반적으로 사용되는 클래스는 URLSession입니다. URLSession은 HTTP 요청을 보낼 수 있으며, 응답을 처리하고 데이터를 가져오는 기능을 제공합니다.

import Foundation

// URLSession 생성
let session = URLSession.shared

// URL 생성
if let url = URL(string: "http://example.com") {
    
    // URLSessionDataTask 생성
    let task = session.dataTask(with: url) {(data, response, error) in

        // 응답 처리
        if let error = error {
            print("Error: \(error)")
        } else if let data = data {
            // 데이터 사용
            let responseData = String(data: data, encoding: .utf8)
            print("Response Data: \(responseData)")
        }
    }
    
    // HTTP 요청 전송
    task.resume()
}

위의 예제 코드는 URLSession을 사용하여 “http://example.com”으로 GET 요청을 보내고, 응답을 처리하여 결과를 출력합니다. URLSessionDataTask는 비동기로 동작하며, 응답이 도착하면 클로저 내부의 코드가 실행됩니다.

REST API 통신

Swift를 사용하여 REST API와 통신하는 방법은 간단합니다. HTTP 메소드와 JSON 데이터를 사용하여 요청을 보내고, 서버에서 반환되는 JSON 데이터를 Swift 객체로 변환하여 사용할 수 있습니다.

import Foundation

// REST API URL
let apiUrl = "https://api.example.com/users"

// URLRequest 생성
if let url = URL(string: apiUrl) {
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    
    // 요청 헤더 설정
    request.addValue("Bearer <access_token>", forHTTPHeaderField: "Authorization")
    
    // URLSession 생성
    let session = URLSession.shared
    
    // URLSessionDataTask 생성
    let task = session.dataTask(with: request) { (data, response, error) in
        
        if let error = error {
            print("Error: \(error)")
        } else if let data = data {
            // JSON 데이터 처리
            let decoder = JSONDecoder()
            do {
                let users = try decoder.decode([User].self, from: data)
                print("Users: \(users)")
            } catch {
                print("Error decoding JSON: \(error)")
            }
        }
    }
    
    // HTTP 요청 전송
    task.resume()
}

struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

위의 예제 코드에서는 “https://api.example.com/users”로 GET 요청을 보내고, 응답으로 반환되는 JSON 데이터를 User 구조체로 변환하여 출력합니다. User 구조체는 Codable을 준수하며, JSON 데이터와 자동으로 매핑됩니다.

결론

Swift에서 네트워크 통신을 구현하는 방법에 대해 간단히 살펴보았습니다. URLSession을 사용하여 HTTP 요청을 보내고, 응답을 처리하는 방법을 알아보았습니다. REST API와의 통신을 위해 URLRequest를 사용하고, JSON 데이터를 Swift 객체로 변환하여 사용할 수 있습니다. Swift의 네트워크 통신 기능을 잘 활용하여 다양한 서비스를 개발해보세요!

참고: Apple Developer Documentation