[TIL] 2024. 07. 10

2024. 7. 10. 11:35·TIL (Today I Learned)

URLSession

Swift에서 URLSession은 네트워킹 작업을 처리하는 데 사용되는 강력한 API입니다. 이를 통해 HTTP 요청을 보내고, 데이터를 다운로드하거나 업로드하며, 백그라운드 작업을 수행할 수 있습니다. URLSession은 단순한 데이터 작업에서부터 복잡한 파일 전송 작업까지 다양한 네트워킹 작업을 처리할 수 있는 기능을 제공합니다.

URLSession의 주요 구성 요소

  1. URLSessionConfiguration
    • URLSessionConfiguration은 URLSession의 설정을 정의합니다. 세 가지 기본 설정이 있습니다:
      • default: 표준 구성으로, 캐시, 쿠키 등을 기본적으로 처리합니다.
      • ephemeral: 캐시, 쿠키, 인증 정보를 디스크에 저장하지 않는 구성입니다.
      • background: 앱이 백그라운드에 있을 때도 네트워크 작업을 계속 수행할 수 있는 구성입니다.
  2. URLSession
    • URLSession 객체는 네트워크 요청을 관리합니다. URLSessionConfiguration을 사용하여 구성할 수 있습니다.
  3. URLSessionTask
    • URLSessionTask는 실제 네트워크 작업을 수행하는 객체입니다. 세 가지 주요 작업이 있습니다:
      • URLSessionDataTask: 데이터를 주고받는 작업에 사용됩니다.
      • URLSessionDownloadTask: 파일을 다운로드하는 작업에 사용됩니다.
      • URLSessionUploadTask: 파일을 업로드하는 작업에 사용됩니다.

URLSession 사용 방법

  1. 기본 데이터 작업
    • URLSessionDataTask를 사용하여 간단한 데이터 요청을 보낼 수 있습니다. 예를 들어, JSON 데이터를 가져오는 작업이 이에 해당합니다.
  2. 다운로드 작업
    • URLSessionDownloadTask를 사용하여 파일을 다운로드할 수 있습니다. 다운로드 완료 후 파일이 저장된 위치를 콜백으로 받을 수 있습니다.
  3. 업로드 작업
    • 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
'TIL (Today I Learned)' 카테고리의 다른 글
  • [TIL] 2024. 07. 12
  • [TIL] 2024. 07. 11
  • [TIL] 2024. 07. 09
  • [TIL] 2024. 07. 08
DongDong_
DongDong_
  • DongDong_
    how-dev
    DongDong_
  • 전체
    오늘
    어제
    • 분류 전체보기 (102)
      • TIL (Today I Learned) (96)
      • DEV (0)
        • 알고리즘 (0)
        • SWIFT (0)
      • 사전캠프 데일리 미션 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글작성
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
DongDong_
[TIL] 2024. 07. 10
상단으로

티스토리툴바