내일배움캠프 7기 Day50 TIL

Daisy Kim·2023년 9월 19일
0

HTTP/HTTPS 통신

오늘의 iOS의 네트워크 통신 중 에 대해 알아보고자 한다.
네트워크 통신에는 일반적으로 2가지 방법이 있다.

  • HTTP 통신: URL 기반으로 클라이언트에서 요청을 보내고, 서버로부터 응답을 받는 형태의 통신
  • 웹소켓 통신: 클라이언트와 서버가 특정 Port를 통해 연결되어있는 양방향 형태의 통신. 실시간 통신에 주로 사용

URLSession

기본 Foudation에 포함되어 따로 라이브러리 설치가 필요 없이
HTTP/HTTPS 기반의 URL로부터 데이터를 다운로드하거나 업로드하는 API를 제공하는 클래스

자체적으로 비동기적으로 작동하게 구현되어있으므로, 따로 비동기 처리할 필요가 없다.
다만 completionHandler를 작성할 때, UI 관련 작업을 수행한다면 반드시 Main 스레드에서 작업해주어야 한다.

URLSession의 종류(Configuration 객체에 의해 결정됨)

  1. URLSession.shared() : 공유세션(싱글톤)
    기본 요청을 위한 세션으로 configuration이 필요하지 않다. 사용자 정의가 불가함

  2. URLSession(configuration: .default) : 기본세션
    디스크에 기록(O) : 캐시, 쿠키, 자격증명 등
    순차적으로 처리하며 delegate 지정이 가능함

  3. URLSession(configuration: .ephemeral) : 임시세션
    디스크에 기록(X)
    메모리에 올려서 세션을 연결하고 만료시 사라짐 ⇒ 비공개 세션

  4. URLSession(configuration: .background) : 백그라운드 세션
    별도의 프로세스를 사용해 모든 데이터 전송을 처리하므로 백그라운드에서 업/다운로드가 가능함
    (앱이 종료되거나 중지되어도 계속 처리 가능)

URLSessionTask

각 세션 안에서 작업(Task)를 추가해 특정 URL에 대한 요청을 할 수 있다.

url 주소만으로 요청할때는 URL 객체를 이용하고, 주소와 HTTP 메소드, Body까지 설정해야 할 때는 URLRequest 객체를 이용하면 된다.

URL객체

let url = URL(String: "https://velog.io/@doyeonyyy"

URLRequest객체

URLRequest는 캐싱 정책, HTTP 메소드, HTTP Body 등을 설정할 수 있다.

let request: URLRequest = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Accept")

URLSessionTask의 종류

URLSessionDataTask(HTTP GET) : 응답 데이터를 받아서 Data형태(JSON,XML,HTML)의 객체를 받아오는 작업
URLSessionUploadTask(HTTP POST/PUT) :
Data 객체 또는 파일 형태의 데이터를 서버로 업로드하는 작업 (백그라운드 O)
URLSessionDownloadTask : 파일 형태의 데이터를 다운로드하는 작업 (백그라운드 O), 일시정지, 재개가 가능하다.

공식문서
참고블로그

profile
Technology proderit homini

0개의 댓글