Skip to content

URLSession #4

@happykwon

Description

@happykwon

URLSession

URLSession이란 서버와 데이터를 주고받기 위한 작업을 관리하는 클래스
URLSession은 세 가지 구성 옵션을 제공

.default

기본 통신 방식으로, 디스크 기반 캐싱을 지원
디스크 기반 캐싱을 사용하는 기본 URLSession 인스턴스 생성
let defaultSession = URLSession(configuration: .default)

디스크 기반 캐싱(Disk-based Caching)
디스크 기반 캐싱은 URLSession의 기본 동작 방식으로, 네트워크 요청을 통해 받은 데이터를 디스크에 캐시(cache)로 저장한다.
이렇게 저장된 캐시 데이터는 동일한 요청이 있을 때 네트워크를 통하지 않고 디스크에서 바로 가져와 사용할 수 있고
이를 통해 데이터 전송량을 줄이고 성능을 향상시킬 수 있다.

.ephemeral

쿠키나 캐시를 저장하지 않는 정책가진다.
개인 정보 보호 모드와 같은 용도로 사용

.background

앱이 백그라운드에 있을 때 콘텐츠 다운로드 및 업로드를 할 수 있게 한다

기본 구성 URLSession 인스턴스 생성
let defaultSession = URLSession(configuration: .default)

캐시나 쿠키를 저장하지 않는 URLSession 인스턴스 생성
let ephemeralSession = URLSession(configuration: .ephemeral)

백그라운드 작업을 지원하는 URLSession 인스턴스 생성
let backgroundSession = URLSession(configuration: .background)

URLSessionTask

URLSessionTaskURLSession에서 수행되는 작업을 나타내는 추상 클래스입니다.
네트워크 요청, 업로드, 다운로드 등의 작업이 이에 해당합니다.

URLSessionTask의 작업 유형

URLSessionTask는 네 가지 작업 유형을 제공

  • URLSessionDataTask: 서버에서 메모리로 데이터를 받아오는 작업을 수행. 백그라운드에서는 지원 X
  • URLSessionUploadTask: 서버로 파일 형태의 데이터를 업로드할 때 사용. 백그라운드에서 업로드를 지원
  • URLSessionDownloadTask: 서버에서 파일 형태의 데이터를 다운로드할 때 사용. 백그라운드에서 다운로드를 지원.
  • URLSessionStreamTask: TCP/IP 연결을 통해 양방향으로 메시지를 교환할 때 사용합니다.
// URLSessionDataTask 예시
let url = URL(string: "https://example.com/data")!
let dataTask = defaultSession.dataTask(with: url) { data, response, error in
    if let error = error {
        print("Error: \(error)")
    } else if let data = data {
        print("Received data: \(data)")
    }
}
dataTask.resume()

// URLSessionUploadTask 예시
let uploadURL = URL(string: "https://example.com/upload")!
var uploadRequest = URLRequest(url: uploadURL)
uploadRequest.httpMethod = "POST"

let fileURL = Bundle.main.url(forResource: "file", withExtension: "txt")!
let uploadTask = defaultSession.uploadTask(with: uploadRequest, fromFile: fileURL) { data, response, error in
    if let error = error {
        print("Error: \(error)")
    } else {
        print("Upload completed successfully")
    }
}
uploadTask.resume()

// URLSessionDownloadTask 예시
let downloadURL = URL(string: "https://example.com/file.zip")!
let downloadTask = backgroundSession.downloadTask(with: downloadURL) { url, response, error in
    if let error = error {
        print("Error: \(error)")
    } else if let url = url {
        print("Downloaded file at: \(url)")
    }
} 
downloadTask.resume()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions