iOS에서 네트워크 요청을 처리하기 위한 프레임워크이다. 서버와 데이터를 주고받을 수 있게 도와주는 API로, HTTP 요청, 파일 다운로드 및 업로드, 백그라운드 작업 등을 처리할 수 있다. URL Session을 사용하면 REST API와 같은 서버와의 통신, JSON 데이터를 주고받는 일, 이미지 다운로드 등을 손쉽게 구현 가능하다
네트워크 요청을 관리한다. URLSession.shared라는 기본 인스턴스도 제공하며, 이는 간단한 네트워크 작업에 적합하다. 더 복잡한 요구 사항이 있는 경우 커스텀 설정이 가능한 URLSessionConfiguration을 사용해 URLSession을 구성할 수도 있습니다.
요청의 세부 사항을 설정하는 객체이다. 요청할 URL과 HTTP메소드(GET,POST,PUT 등)헤더, 바디 등을 설정할 수 있다.
데이터를 주고받는 작업을 수행하는 구체적인 작업입니다. URLSession에서 제공하는 dataTask(with:), downloadTask(with:)등을 통해 서버와 데이터를 주고받는다
import Foundation
let url = URL(string: "https://api.example.com/data")! // 요청할 URL을 생성합니다. 유효한 URL을 문자열로 입력하고, URL 객체로 만듭니다.
// 여기서 강제 언래핑(!)을 사용했으므로, URL이 nil이 아닌지 확실히 해야 합니다.
let task = URLSession.shared.dataTask(with: url) { data, response, error in
// dataTask(with:) 메소드를 사용해 네트워크 요청을 설정하고, 완료 시 실행할 클로저(콜백)를 정의합니다.
// data는 서버로부터 응답받은 데이터이고, response는 HTTP 응답 정보, error는 오류 정보입니다.
if let error = error { // error가 nil이 아니라면, 요청이 실패했음을 의미합니다.
print("Error: \(error)") // 오류 메시지를 출력하고, return으로 함수 실행을 종료합니다.
return
}
guard let data = data else { // data가 nil인 경우를 확인합니다. data가 nil이라면 서버로부터 데이터가 도착하지 않은 것입니다.
print("No data received.") // 데이터가 없음을 출력하고, return으로 함수 실행을 종료합니다.
return
}
// 받은 데이터를 JSON 형태로 변환할 수 있는지 확인하고, 디코딩합니다.
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
// JSONSerialization.jsonObject 메소드를 통해 데이터를 JSON 객체로 변환합니다.
// 이 메소드가 JSON 변환에 실패할 경우 오류를 발생시키므로, do-catch 구문을 사용하여 오류를 처리합니다.
print("Response JSON: \(json)") // 변환된 JSON 데이터를 출력합니다.
} catch {
print("JSON decoding error: \(error)") // JSON 변환 중 오류가 발생하면 해당 오류를 출력합니다.
}
}
task.resume() // 데이터 작업이 준비되었으므로, 실제로 네트워크 요청을 시작합니다.