Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

URLSession #4

Open
happykwon opened this issue Mar 27, 2024 · 0 comments
Open

URLSession #4

happykwon opened this issue Mar 27, 2024 · 0 comments

Comments

@happykwon
Copy link
Owner

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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant