URLSession
Swift에서 URLSession은 네트워킹 작업을 처리하는 데 사용되는 강력한 API입니다. 이를 통해 HTTP 요청을 보내고, 데이터를 다운로드하거나 업로드하며, 백그라운드 작업을 수행할 수 있습니다. URLSession은 단순한 데이터 작업에서부터 복잡한 파일 전송 작업까지 다양한 네트워킹 작업을 처리할 수 있는 기능을 제공합니다.
URLSession의 주요 구성 요소
- URLSessionConfiguration
- URLSessionConfiguration은 URLSession의 설정을 정의합니다. 세 가지 기본 설정이 있습니다:
- default: 표준 구성으로, 캐시, 쿠키 등을 기본적으로 처리합니다.
- ephemeral: 캐시, 쿠키, 인증 정보를 디스크에 저장하지 않는 구성입니다.
- background: 앱이 백그라운드에 있을 때도 네트워크 작업을 계속 수행할 수 있는 구성입니다.
- URLSessionConfiguration은 URLSession의 설정을 정의합니다. 세 가지 기본 설정이 있습니다:
- URLSession
- URLSession 객체는 네트워크 요청을 관리합니다. URLSessionConfiguration을 사용하여 구성할 수 있습니다.
- URLSessionTask
- URLSessionTask는 실제 네트워크 작업을 수행하는 객체입니다. 세 가지 주요 작업이 있습니다:
- URLSessionDataTask: 데이터를 주고받는 작업에 사용됩니다.
- URLSessionDownloadTask: 파일을 다운로드하는 작업에 사용됩니다.
- URLSessionUploadTask: 파일을 업로드하는 작업에 사용됩니다.
- URLSessionTask는 실제 네트워크 작업을 수행하는 객체입니다. 세 가지 주요 작업이 있습니다:
URLSession 사용 방법
- 기본 데이터 작업
- URLSessionDataTask를 사용하여 간단한 데이터 요청을 보낼 수 있습니다. 예를 들어, JSON 데이터를 가져오는 작업이 이에 해당합니다.
- 다운로드 작업
- URLSessionDownloadTask를 사용하여 파일을 다운로드할 수 있습니다. 다운로드 완료 후 파일이 저장된 위치를 콜백으로 받을 수 있습니다.
- 업로드 작업
- URLSessionUploadTask를 사용하여 파일을 업로드할 수 있습니다. 업로드할 데이터를 Data, File URL 또는 Stream으로 제공할 수 있습니다.
코드 예제
1. 기본 데이터 작업
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 {
print("No data")
return
}
// JSON 데이터 처리
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print("JSON: \(json)")
} catch {
print("JSON parsing error: \(error)")
}
}
task.resume()
2. 다운로드 작업
let url = URL(string: "https://example.com/file.zip")!
let task = URLSession.shared.downloadTask(with: url) { location, response, error in
if let error = error {
print("Error: \(error)")
return
}
guard let location = location else {
print("No file location")
return
}
do {
let documentsURL = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let savedURL = documentsURL.appendingPathComponent(response?.suggestedFilename ?? "file.zip")
try FileManager.default.moveItem(at: location, to: savedURL)
print("File saved to: \(savedURL)")
} catch {
print("File saving error: \(error)")
}
}
task.resume()
3. 업로드 작업
let url = URL(string: "https://api.example.com/upload")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let fileURL = Bundle.main.url(forResource: "file", withExtension: "txt")!
let task = URLSession.shared.uploadTask(with: request, fromFile: fileURL) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
guard let data = data else {
print("No data")
return
}
// 응답 데이터 처리
if let responseString = String(data: data, encoding: .utf8) {
print("Response: \(responseString)")
}
}
task.resume()
추가 기능
- 백그라운드 작업: URLSessionConfiguration.background를 사용하여 앱이 백그라운드에 있을 때도 네트워크 작업을 계속 수행할 수 있습니다.
- Delegate 사용: URLSession의 delegate를 사용하여 더 세밀한 제어와 이벤트 처리가 가능합니다.
- 캐싱: URLSession은 HTTP 캐싱을 지원하여 네트워크 효율성을 높일 수 있습니다.
이와 같이 URLSession은 다양한 네트워킹 작업을 간단하고 효율적으로 처리할 수 있는 강력한 도구입니다. 이를 통해 데이터 통신, 파일 전송, 백그라운드 다운로드 등 다양한 작업을 수행할 수 있습니다.
반응형
'TIL (Today I Learned)' 카테고리의 다른 글
[TIL] 2024. 07. 12 (0) | 2024.07.12 |
---|---|
[TIL] 2024. 07. 11 (0) | 2024.07.12 |
[TIL] 2024. 07. 09 (0) | 2024.07.09 |
[TIL] 2024. 07. 08 (0) | 2024.07.08 |
[TIL] 2024. 07. 05 (0) | 2024.07.06 |