티스토리 뷰

* URLSession은 Http/Https를 통해 데이터를 주고받기 위해 API를 제공하는 클래스이다.

* URLSessionTask는 세션 작업을 하나로 나타내는 클래스이다. 

 

URLSession이 뭔지 알아보자!!

 

지금 저는 프로젝트에서 Alamofire이라는 라이브러리를 써서 작업중인데요!

Alamofire은 swift기반 HTTP 네트워킹 라이브러리입니다. 이거 쓰려면 URLSession같은 애플의 네트워킹 클래스를 사용한 경험이 있었어야 된다고 하던데, 저는 바로 Alamofire부터 썼습니다..ㅎ.ㅎㅎ

 

 

이번 기회에 URLSession에 대해 배우게 되어서 내심 다행이네요!

 

URLSession은

1. 인증 지원을 위한 많은 델리게이트 메서드를 제공하며,

2. 애플리케이션이 실행 중이지 않거나 일시 중단된 동안 백그라운드 작업을 통해 콘텐츠를 다운로드하는 것을 수행하기도 합니다. 

URLSession API를 사용하기 위해 애플리케이션은 세션을 생성합니다.

3. 해당 세션은 관련된 데이터 전송작업 그룹을 조정합니다.

예를 들면 웹 브라우저를 사용 중인 경우 탭 당 하나의 세션을 만들 수 있습니다. 각 세션 내에서 애플리케이션은 작업을 추가하고, 각 작업은 특정 URL에 대한 요청을 나타냅니다.

 

 

아...? 중단된 동안에도 백그라운드 작업으로 다운이 된다고...?

iOS는 백그라운드 작업이 안됐던것 아닌가..? -> iOS 4부터 지원했다고 한다 ㅋㅋㅋㅋ왜 몰랐지..

 

 

대충 읽어보니 학교에서 어렴풋이 들었던 네트워크?쓰레드?랑 비슷한 것 같다. 세션이랑 쓰레드랑 비슷한 것 같은디...

 

Request와 Response라는 단어를 다들 들어봤을거라고 생각해엽

Request를 날리면 Response가 돌아 오는데,

 

Request에서는 서버로 요청을 보낼 때어떤 (HTTP)메서드를 사용할 것인지, 캐싱 정책은 어떻게 할 것인지 등의 설정을 할 수 있습니다.

 

Response에서는 URL 요청의 응답을 받아올 수 있겠져?!

 

세션의 유형에는 3가지가 있는데, 

 

1. 기본 세션 (Default Session)

2. 임시 세션 (Ephermeral Session)

3. 백그라운드 세션 (Background Session)

이다. 

 

위에 글에 이렇게 나와있었는데, 

 

" URLSession API를 사용하기 위해 애플리케이션은 세션을 생성합니다. 

해당 세션은 관련된 데이터 전송작업 그룹을 조정합니다. 

예를 들면 웹 브라우저를 사용 중인 경우 탭 당 하나의 세션을 만들 수 있습니다.

각 세션 내에서 애플리케이션은 작업을 추가하고, 각 작업은 특정 URL에 대한 요청을 나타냅니다. "

 

진짜 세션이 약간 쓰레드 같은건가보다.

  1. 기본 세션 (Default Session) : 기본 세션은 URL 다운로드를 위한 다른 파운데이션 메서드와 유사하게 동작합니다. 디스크에 저장하는 방식입니다.

    ㅇㅎ 걍 무난한애~

    2. 임시 세션 (Ephemeral Session) : 기본 세션과 유사하지만, 디스크에 어떤 데이터도 저장하지 않고, 메모리에 올려 세션과 연결합니다. 따라서 애플리케이션이 세션을 만료시키면 세션과 관련한 데이터가 사라집니다.


    아 임시로 쓰니까 메모리에만 올리는구나!

  2. 3. 백그라운드 세션 (Background Session) : 백그라운드 세션은 별도의 프로세스가 모든 데이터 전송을 처리한다는 점을 제외하고는 기본 세션과 유사합니다.

 

이건 기본이랑 똑같은데 백그라운드에서 해야되니까, 별도의 프로세서를 쓰는구나 오키오키!

세션 만들기

 

 * init(configuration:)  - 지정된 세션 구성으로 세션을 만듭니다.

 

 

 

* shared - 싱글턴 세션 객체를 반환합니다.

 

세션 구성

  • configuration : 이 세션에 대한 구성 객체입니다.

  • delegate : 이 세션의 델리게이트 입니다.

 

Task

 

" URLSessionTask는 세션 작업 하나를 나타내는 추상 클래스입니다.

하나의 세션 내에서 URLSession 클래스는 세 가지 작업 유형,

즉 데이터 작업(Data Task),

업로드 작업(Upload Task),

다운로드 작업(Download Task) 을 지원합니다."

 

  1. URLSessionDataTask

    • HTTP의 각종 메서드를 이용해 서버로부터 응답 데이터를 받아서 Data 객체를 가져오는 작업을 수행합니다.

      아, 데이터 작업은 응답을 받아서 데이터를 가져오는거구낭

  2. URLSessionUploadTask

    • 애플리케이션에서 웹 서버로 Data 객체 또는 파일 데이터를 업로드하는 작업을 수행합니다. 주로 HTTP의 POST 혹은 PUT 메서드를 이용합니다.

      아, 업로드는 그냥 업로드 하는거네 ㅎㅅㅎ

  1. URLSessionDownloadTask

    • 서버로부터 데이터를 다운로드 받아서 파일의 형태로 저장하는 작업을 수행합니다. 애플리케이션의 상태가 대기 중이거나 실행 중이 아니라면 백그라운드 상태에서도 다운로드가 가능합니다.

      아 다운로드는 파일의 형태로 저장하는거구나!~!

 

데이터 작업은 JSON, XML, HTML처럼 용량이 작고 단순할 때 쓰고

업로드/다운로드는 백그라운드에서도 가능하니까, 용량이 클 때 쓴다고 한다.

 

세션에 Data Task 추가하기

  • dataTask(with:) : URL에 데이터를 요청하는 데이터 작업 객체를 만듭니다.
  • dataTask(with:) : URLRequest 객체를 기반으로 URL에 데이터를 요청하는 데이터 작업 객체를 만듭니다.
  • dataTask(with:completionHandler:) : URL에 데이터를 요청하고 요청에 대한 응답을 처리할 완료 핸들러(Completion Handler)를 갖는 데이터 작업 객체를 만듭니다.
  • dataTask(with:completionHandler:) : URLRequest 객체를 기반으로 URL에 데이터를 요청하고 요청에 대한 응답을 처리할 완료 핸들러(Completion Handler)를 갖는 데이터 작업 객체를 만듭니다.

세션에  Download Task 추가하기

  • downloadTask(with:) : URL에 요청한 데이터를 다운로드 받아서 파일에 저장하는 다운로드 작업을 만듭니다.
  • downloadTask(with:completionHandler:) : URL에 요청한 데이터를 다운로드 받아서 파일에 저장하고 저장 완료 후 완료 핸들러를 호출하는 다운로드 작업을 만듭니다.
  • downloadTask(with:) : URLRequest 객체를 기반으로 URL에 요청한 데이터를 다운로드 받아서 파일로 저장하는 다운로드 작업을 만듭니다.
  • downloadTask(with:completionHandler:) : URLRequest 객체를 기반으로 URL에 요청한 데이터를 다운로드 받아서 파일로 저장하고 완료 후 완료 핸들러를 호출하는 다운로드 작업을 만듭니다.

 

세션에 Upload Task 추가하기

  • uploadTask(with:from:) : URLRequest 객체를 기반으로 URL에 데이터를 업로드하는 작업을 만듭니다.
  • uploadTask(with:from:completionHandler:) : URLRequest 객체를 기반으로 URL에 데이터를 업로드하고 업로드 완료 후 완료 핸들러를 호출하는 작업을 만듭니다.
  • uploadTask(with:fromFile:) : URLRequest 객체를 기반으로 URL에 파일을 업로드하는 업로드 작업을 만듭니다.
  • uploadTask(with:fromFile:completionHandler:) : URLRequest 객체를 기반으로 URL에 파일을 업로드하고 업로드 완료 후 완료 핸들러를 호출하는 업로드 작업을 만듭니다.

작업(태스크) 상태 제어

  • cancel() :  작업을 취소합니다.
  • resume() : 일시중단된 경우 작업을 다시 시작합니다.
  • suspend() : 작업을 일시적으로 중단합니다.
  • state : 작업의 상태를 나타냅니다.
  • priority : 작업처리 우선순위입니다. 0.0부터 1.0 사이입니다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함