[swift] URLSession

2024. 4. 12. 22:25·swift

URLSession

URLSession은 애플에서 HTTP 통신을 위해 만든 것으로 특정 URL을 이용해서 데이터를 다운로드하고 업로드하기 위해 사용하는 API이다.

 

URLSession의 종료

  • 기본 세션 : URLSession(configuration: .default)
    • 기본 세션은 일반적인 네트워크 요청을 수행하는 데 사용된다.
    • 기본적으로 디스크 기반의 캐시 및 쿠키를 지원한다.
    • 쿠키, 인증 정보 등을 자동으로 관리하고 유지한다.
    • 앱의 메모리에 캐시된 데이터는 자동으로 디스크에 기록된다.
    • 기본적으로 세션이 지속되지 않는데, 세션을 종료하면 쿠키와 캐시가 삭제된다.
  • 임시 세션 : URLSession(configuration: .ephemeral)
    • 임시 세션은 일회성 네트워크 요청에 사용된다.
    • 캐시, 쿠키, 자격 증명 등을 유지하지 않는다.
    • 모든 데이터는 메모리에만 캐시되며, 세션 종료 시에 자동으로 삭제된다.
    • 개인 정보 보호를 위해 쿠키와 기타 사용자 정보를 보존하지 않아야 할 떄 유용하다.
  • 백그라운드 세션 : URLSession(configuration: .background)
    • 백그라운드 세션은 앱이 백그라운드에서 실행 중일 때 네트워크 작업을 수행하는 데 사용된다.
    • 백그라운드에서 실행 중인 작업이 있을 때도 네트워크 요청을 지속할 수 있다.
    • 앱이 종료된 후에도 네트워크 요청을 계속할 수 있다.
    • 다운로드 및 업로드 작업을 지원하며, 파일 다운로드가 완료되면 알림을 받을 수 있다.

 

URLSessionTask의 종류

  • URLSessionDataTask
    • HTTP GET 요청을 수행하는 데 사용된다.
    • 서버에서 데이터를 가져오는 데 사용되며, 다운로드된 데이터는 메모리에 저장된다.
    • 주로 JSON, 이미지 등의 작은 데이터를 가져오는 데 사용된다.
    • completionHandler를 사용하여 작업이 완료될 때 데이터를 처리한다.
  • URLSessionUploadTask
    • HTTP POST 요청을 수행하여 데이터를 서버로 업로드하는 데 사용된다.
    • 파일 업로드나 멀티파트 폼 데이터를 보낼 때 주로 사용된다.
    • 데이터를 서버로 보낸 후에는 서버의 응답을 받는다.
  • URLSessionDownloadTask
    • 파일 또는 리소스를 다운로드하는 데 사용된다.
    • 다운로드된 파일은 디스크에 저장된다.
    • 주로 큰 파일을 다운로드하거나 백그라운에서 파일을 다운로드하는 데 사용된다.
    • completionHandler를 사용하여 다운로드가 완료된 후 파일의 위치를 처리한다.
  • URLSessionStreamTask
    • 스트림 기반의 데이터를 주고 받을 때 사용된다.
    • TCP/IP 기반의 네트워크 연결을 설정하고 데이터를 스트림으로 전송하는 데 사용된다.
    • 주로 서버와 실시간으로 데이터를 주고 받아야 하는 경우나 스트리밍 미디어를 다루는 경우에 사용된다.
  • URLSessionWebSocketTask
    • WebSocket을 사용하여 양방향 통신을 위한 연결을 설정한다.
    • 실시간 채팅 앱이나 실시간 데이터 전송 앱에서 사용될 수 있다.
    • WebSocket 프로토콜을 통해 데이터를 보내고 받을 수 있다.

URLSession Life Cycle

  • 생성 (Creation)
    • URLSession 객체는 URLSessionConfiguration을 사용하여 생성한다.
    • URLSessionConfiguration은 세션의 동작을 구성하는 데 사용되며, 캐시, 타임아웃, 쿠키 등의 설정을 지정할 수 있다.
    • URLSession을 생성할 때는 URLSession.shared를 사용하여 기본 세션을 공유하거나, 직접 URLSession 객체를 생성할 수 있다.
  • 구성 (Configuration)
    • URLSession은 생성된 후에도 구성을 변경할 수 있다.
    • URLSessionConfiguration을 통해 구성된 세션을 만들 때 지정된 설정을 유지한다.
    • 세션을 구성하는 것은 필요에 따라 캐시 정책, 타임아웃 값 등을 조정하는 데 사용된다.
  • 작업 생성 (Task Creation)
    • URLSession을 사용하여 네트워크 작업을 생성한다.
    • URLSessionDataTask, URLSessionUploadTask, URLSessionDownloadTask 등 다양한 종류의 장버을 생성할 수 있다.
    • 작업을 생성할 때는 요청 정보를 포함하여 작업의 동작을 구성한다.
  • 작업 수행 (Task Execution)
    • 생성된 작업은 URLSession 객체를 통해 실행된다.
    • 실행된 작업은 비동기적으로 백그라운드에서 실행되며, 네트워크 작업이 완료될 때까지 기다린다.
    • 작업의 실행 도중에는 네트워크 요청 및 응답을 처리하고, 데이터를 주고 받는다.
  • 작업 완료 및 처리 (Task Completion and Handling)
    • 네트워크 작업이 완료되면 URLSession 객체는 작업 완료 핸들러를 호출하여 결과를 처리한다.
    • 완료 핸들러를 사용하여 데이터를 처리하거나 오류를 처리한다.
    • 작업이 완료된 후에는 필요한 정리 작업을 수행하고, 세션에서 제거할 수 있다.
  • 세션 해제 (Deallocation)
    • URLSession 객체는 더 이상 필요하지 않을 때 해제된다.
    • 세션은 사용이 완료되면 invalidate() 메서드를 사용하여 해제할 수 있다.
    • 세션이 해제되면 해당 세션과 관련된 리소스가 해제되고 메모리에서 제거된다.

 

URLSession 사용 예제

import Foundation

let url = URL(string: "https://api.github.com/users/Gwan-Son")
let session = URLSession.shared

let task = session.dataTask(with: url!) { data, response, error in
    // 에러 처리
    if let error = error {
        print("Error: \(error)")
        return
    }
    
    // HTTP 응답 처리
    guard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {
        print("Invalid response")
        return
    }
    
    if let data = data {
        if let dataString = String(data: data, encoding: .utf8) {
            print("Received data: \(dataString)")
        }
    }
}

task.resume()

 

'swift' 카테고리의 다른 글
  • [swift] RxSwift란?
  • [swift] ARC
  • [swift] Combine
  • [swift] File Manager
GwanSon
GwanSon
버그는 도전, 코드는 해결. 열정있는 개발을 하자.
  • GwanSon
    관슨의 개발일지
    GwanSon
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • iOS (3)
      • swift (15)
      • UIKit (0)
      • swiftUI (2)
      • 알고리즘 (8)
      • CS (8)
      • 면접 (11)
      • Flutter (4)
      • 회고 (2)
      • 잡담 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    부스트캠프
    2025 토스 Next
    챌린지
    tuist
    boj
    ios
    후기
    토스
    백준
    네이버 부스트캠프 후기
    모듈화
    네이버 부스트캠프
    부스트캠프 10기
    Swift
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
GwanSon
[swift] URLSession
상단으로

티스토리툴바