[swift] URLSession

Jeff·2024년 12월 4일
2

이번에는 URLSession에 대해서 알아보았다.

# URLSession

An object that coordinates a group of related, network data transfer tasks.
네트워크 데이터 전달 작업에 연관된 일련의 일을 처리하는 객체이다.
즉, swift에서 네트워크 통신 방법 중 한가지이다. URLSession은 앱과 서버간에 데이터를 주고받기 위해 HTTP를 사용하며, 네트워크 요청을 처리하는 API라고 할 수 있다.

  • iOS와 서버 간의 http 프로토콜을 지원하며 Request와 Response 구조를 가진다.
  • URLSession은 여러 개의 URLSessionTask를 생성하여 이를 통해 서버와 통신을 하고, Delegate로 네트워크의 과정을 확인하는 형태이다.
  • URLSession을 통해 iOS 앱이 실행중이지 않을 때에도 백그라운드에서 데이터를 다운로드할 수 있다.
  • URLSessionDelegate나 URLSessionTaskDelegate를 사용하면 권한이나 리다이렉션, 작업 완료에 대한 이벤트도 받을 수 있다.

URLSession을 사용하기 위해서 크게 두 가지에 대해서 더 알아보아야한다.
1. URLSessionConfiguration
2. URLSessionTask

# URLSessionConfiguration

Configuration은 환경 설정을 의미
URLSession 으로 네트워크 통신을 하되, 여러가지 커스텀한 설정들을 할 때 URLSessionConfiguration 을 이용한다.

  • .default : 기본 통신을 할때 사용한다. (쿠키와 같은 저장 객체 사용)
let defaultSession = URLSession(configuration: .defualt)
  • .ephemeral : 쿠키나 캐시를 저장하지 않는 정책을 가져갈 때 사용한다. (ex. 사파리의 개인정보보호 모드)
let ephemeralSession = URLSession(configuration: .ephemeral)
  • .background : 앱이 백그라운드에 있는 상황에서 콘텐츠 다운로드, 업로드를 할 때 사용한다.
let backgroundSession = URLSession(configuration: .background)

# URLSessionTask

URLSessionTask 으로 네트워크 통신을 할 때 어떤 태스크를 수행할 것 인지 결정 가능하다.

  • URLSessionDataTask: 서버로부터 데이터를 가져오거나 서버에 데이터를 전송할 때 사용한다. (GET요청)
  • URLSessionUploadTask: 파일 업로드를 처리할 때 사용되며 백그라운드 업로드 지원된다.
  • URLSessionDownloadTask: 파일 다운로드를 처리할 때 사용되며, 백그라운드 다운로드 지원된다.

# 사용해보기

  • 사용에 앞서 https://reqres.in/api/users/1라는 주소를 이용해 테스트 데이터를 네트워크 통신을 하려고 한다.

    https://reqres.in/api/users/1에 접속해보면 위와 같이 json형태의 데이터를 볼 수 있다. 우리는 이 데이터를 받아오는 동작을 해볼거다.

  • json형태에 맞게 데이터를 받기위해 아래의 사진과 같이 미리 구조체롤 Codable이라는 프로토콜을 채택해 구성하면 된다. 그리고 실제 json 데이터와 구조체의 이름이 매칭이 되지 않는다면 enum타입으로 매칭해서 바꿔서 데이터를 받아올 수 있게 해준다.

  • 이제는 네트워크를 통신할 url을 설정해주고, 설정한 url에서 데이터를 어떤식으로 받아올지 아래와 같이 설정을 해주면 된다.

  • 설정을 마친 후 데이터를 요청하는 일을 시킬 dataTask메서드를 구현해주면 된다. dataTask를 통해 얻어오는 (data, response, error) 3가지의 타입이 클로저로 받아온다.
    데이터의 성공하는 범위는 200번대 숫자들이기에 아래의 범위를 설정해 주었고, 성공을 했다면 json형식으로 받은 데이터를 디코딩해서 사용할 수 있게 해준다. 그리고 가장 마지막에 보이는 resume 키워드를 마지막에 써줘야 dataTask 메서드가 실행이 되기에 적어줘야한다.

profile
기본에 충실한 개발자가 목표!

0개의 댓글