네트워크 알아보기

슆공부·2022년 6월 23일
0
post-thumbnail

Concurrency 동시성이란?

여러개의 작업이 동시에 일어나는 것처럼 보이게 하는 것.
작업들이 순서에 상관없이 동시에 수행될 수 있음을 의미함
ex) 밥을 먹으면서 공부도 할 경우.. 완전히 동시는 아니지만 일을 잘게 쪼개서 번갈아가며 수행함.

스레드란?

컴퓨터가 요청된 작업들을 수행할 때, 작업들이 실행되는 공간이다. (각 작업이 수행되는 방)

  • 메인 스레드 : 화면에 표시하거나 사용자 인터렉션을 받는 작업을 수행한다. 화면에 그려주는 일.
    데이터를 화면에 보여주거나, 버튼 클릭 이벤트 감지하고 처리..

  • 백그라운드 스레드 : 메인스레드에서 하는 작업 외에 것들.
    네트워크에서 데이터를 다운받거나 디비에서 데이터 읽어오는 것...

  • 커스텀 스레드: 지정된 스레드를 통해 작업할 때 사용한다.
    카메라 통해 들어온 영상데이터 가공, 오디오 데이터 변조...

동기 Sync Task & 비동기 Async Task

  • 동기는 한 작업의 요청, 리턴이 동시이고 비동기는 요청과 리턴이 동시가 아니다.
  • 동기는 한 작업이 끝날 때까지 기다렸다가 다음 작업이 실행된다.
  • 비동기는 한 작업이 끝나지 않아도 언제든지 다음 작업을 실행 시작할 수 있다.

실제 네트워크에서는 메인 스레드에서 HTTP 요청을 보내서 네트워크의 HTTP 응답을 받아서 화면에 표시해준다.

HTTP란?

서버와 대화하는 방식, 통신 규약이다. 데이터 요청하고 응답받는 것.
URL을 통해 데이터를 요청하는데, URL은 서버에 데이터를 요청하기 위해 입력하는 영문 주소이다.
URL구조 => http protocol + www...이런 도메인 + port + resource path + query

요청 메서드 - get post put delete
데이터 응답 - status code 결과를 코드로 간략하게 나타낸 값, body 요청한 데이터들.. JSON, Image

=> 요청 시에 URL과 Request Method가 필요하다.
응답 시에는 status code와 response body(JSON)으로 처리한다.

IOS에서 네트워킹 하기

http 방식으로 네트워크하는데, URLSession이 네트워크 작업을 도와준다.

URLSession

  • URLSession이 IOS에서의 네트워크 관리하는 주체이다.
    1. 생성되려면 configuration 환경변수들이 필요하고
  1. 그렇게 생성된 urlSession이 실제 네트워크 작업들을 생성할 수 있다.

  2. URLSessionTask는 urlsession이 만들어 낸 네트워크 작업이다.

  3. URLSession은 생성할때 configuration(= 설정값) =>
    .default - 단순한 네트워크 작업, 브라우저 띄울 때, 데이터 요청할 때 등 대부분의 작업 ,
    .ephemeral - 몇가지 정보들을 저장하지 않음(쿠키나 인증서),브라우저 시크릿모드라고 생각. 개인정보 보호
    .background - 파일 다운로드 받을 때, 앱이 백그라운드에 있을 때도 돌아야하기 때문에.

  4. URLSession - configuration 보고 세션을 생성함

  5. URLSessionTask -
    dataTask- 데이터 받아오는 작업, 데이터 요청한 것 받아서 스위프트 객체만들어서 앱내에서 가공해서 쓰게 된다. (모델)
    uploadTask- 가지고 있는 데이터를 서버에 올리는 작업,
    downloadTask- 받아온 것 다운로드
    task는 urlsession이 만든 작업
    업로드중..

  • 데이터를 받아서 모델에 맞게 가공해야한다. 인코딩 디코딩하게 도와주는 것
    => Codable
    swift 객체를 외부 데이터 형태,json으로 인코딩, 디코딩 가능하게 해줌
    네트워크 응답형태로 json이 거의 표준으로 사용됨. json과 스위프트 객체 간 전환이 쉬워진다.

URLSession + Combine

urlsessionDataTask에 대해 publisher를 제공한다. => 비동기 응답에 대한 작업이 수월해짐

참고

0개의 댓글