[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
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • iOS (4)
      • swift (16)
      • UIKit (0)
      • swiftUI (2)
      • 알고리즘 (9)
      • CS (8)
      • 면접 (11)
      • Flutter (6)
      • 회고 (2)
      • 잡담 (3)
  • 블로그 메뉴

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

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    모듈화
    fatal error
    후기
    boj
    Firebase
    백준
    2025 토스 Next
    토스
    Swift
    네이버 부스트캠프
    Flutter
    ios
    네이버 부스트캠프 후기
    android
    tuist
    부스트캠프 10기
    부스트캠프
    SDK
    챌린지
    알고리즘
    구슬 탈출2
    FirebaseAuth
    Provider
  • 최근 댓글

  • 최근 글

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

티스토리툴바