
URLSession은 iOS에서 HTTP/HTTPS를 통한 데이터 송수신을 담당하는 핵심 클래스입니다. API 통신, 파일 다운로드, 데이터 업로드 등 네트워크 작업에 사용됩니다.
Session 종류
shared: 기본 세션, 간단한 요청에 사용default: 커스텀 설정 가능한 기본 세션ephemeral: 캐시/쿠키를 저장하지 않는 임시 세션background: 앱이 백그라운드일 때도 작동하는 세션Task 종류
dataTask: 데이터를 받아오는 작업 (JSON, 텍스트 등)downloadTask: 파일 다운로드 작업uploadTask: 파일 업로드 작업webSocketTask: 웹소켓 통신 작업// 1. 기본적인 GET 요청
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
}
guard let data = data else { return }
// 데이터 처리
}
task.resume()
// 2. POST 요청 예시
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONEncoder().encode(someData)
let task = URLSession.shared.dataTask(with: request) { ... }
task.resume()
URLSessionConfiguration
URLSessionTask
URLSessionDelegate
task.resume()를 호출해야 실제 작업이 시작됨DispatchQueue.main.async 사용class NetworkManager {
static let shared = NetworkManager()
private let session = URLSession.shared
func fetchData<T: Decodable>(from url: URL, completion: @escaping (Result<T, Error>) -> Void) {
let task = session.dataTask(with: url) { (data, response, error) in
if let error = error {
completion(.failure(error))
return
}
guard let data = data else {
completion(.failure(NSError(domain: "", code: -1)))
return
}
do {
let decoder = JSONDecoder()
let result = try decoder.decode(T.self, from: data)
completion(.success(result))
} catch {
completion(.failure(error))
}
}
task.resume()
}
}