iOS 앱에서 서버와 데이터를 주고받기 위해서는 네트워크 통신이 필수입니다. 대표적으로 다음과 같은 방법들이 있습니다.
URLSession (Apple 공식 제공)URLSessionDataTask, URLSessionDownloadTask, URLSessionUploadTask 등 다양한 작업 지원.URLSession 기본 사용 방법import Foundation
guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts/1") else { return }
let task = URLSession.shared.dataTask(with: url) { data, response, error in
// 에러 처리
if let error = error {
print("❌ 에러 발생: \(error.localizedDescription)")
return
}
// HTTP 응답 상태 코드 확인
if let httpResponse = response as? HTTPURLResponse {
print("📡 상태 코드: \(httpResponse.statusCode)")
}
// 데이터 처리
if let data = data {
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print("📥 받은 데이터: \(json)")
} catch {
print("⚠️ JSON 파싱 오류: \(error.localizedDescription)")
}
}
}
task.resume() // 작업 시작
var request = URLRequest(url: URL(string: "https://example.com/api")!)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let parameters = ["title": "foo", "body": "bar"]
request.httpBody = try? JSONSerialization.data(withJSONObject: parameters)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
// ...
}
task.resume()
네트워크 요청에서는 다음과 같은 종류의 에러를 고려해야 합니다.
if let error = error {
print("❌ 네트워크 오류: \(error.localizedDescription)")
return
}
guard let httpResponse = response as? HTTPURLResponse else { return }
guard (200...299).contains(httpResponse.statusCode) else {
print("🚨 서버 오류: \(httpResponse.statusCode)")
return
}
guard let data = data else {
print("📭 데이터 없음")
return
}
import Alamofire
AF.request("https://jsonplaceholder.typicode.com/posts/1")
.validate()
.responseJSON { response in
switch response.result {
case .success(let value):
print("🎉 성공: \(value)")
case .failure(let error):
print("❌ 실패: \(error.localizedDescription)")
}
}
URLSession은 iOS의 기본 네트워크 API이며, 실무에서도 자주 사용됨