Archive/패캠(올인원)

📡 ch14 Networking

lgvv 2021. 6. 28. 09:38

✅ 이번 시간에는 네트워킹에 대해서 알아볼 것이다.

컴퓨터 입장에서 보았을 때, 네트워킹 작업은 상당히 느린 작업이다.

App + Concurrency 라고 동시성을 만들어주는 것이 상당히 중요하다.

우리는 이것을 GCD & Operations을 통해서 만들어 줄 수 있다. (이번에 RxSwift 공부하는데 나오던 내용이던데 꼼꼼하게 봐야지✊)

 

✅ HTTP 개념

학교 컴퓨터 네트워크 수업에서 네트워크를 배우긴 했지만, 뭔가 조금 아쉽게? 느껴지는 부분이 있어서 네트워크에 대해서 한번 개념을 싹 정리하고 지나가자.

Networking in iOS : 서버와 iOS 사이에 데이터를 주고 받을 때, HTTP,REST,JSON을 사용하여 주고 받는다.

HTTP 같은 경우는 전세계가 약속한 프로토콜 통신 규약이다.

HTTP : HyperText Transfer Protocol 

서버와 클라이언트에는 message를 주고 받는 형식으로 소통을 한다.

클라이언트는 Requset를 하고 서버는 Response하는 방식으로 작동한다. 

HTTP Requset Method에는 4가지 방법이 있다.

1️⃣ POST : Create -> 새로운 데이터를 해당 URL에 생성을 요구할때

2️⃣ GET : Read -> 해당 URL에 있는 데이터를 보고 싶을때

3️⃣ UPDATE : Update -> 해당 URL에 있는 데이터를 수정하고 싶을때

4️⃣ DELETE : Delete -> 해당 URL에 있는 데이터를 삭제하고 싶을떄

 

서버에서 응답이 내려오는데 헤더(Status Code)와 바디(Contents)가 함께 내려온다.

Content-Type은 어떤 데이터 타입이 전달될 것인가를 알려주는 것.

데이터 타입으로는 아래의 사진을 보자

Content-Type의 예시

 

HLS(HTTP Live Streaming) : 예전에는 텍스트를 보내주기도 버거웠는데 이제는 망 환경이 좋아져서 스트리밍 영상도 보내기도 한다.

-> 영상, 음원 등 대부분의 서비스에서 사용하고 있음.

 

네트워크를 확인할 수 있는 툴이 있는데 : https://www.postman.com/downloads/ 

 

Download Postman | Try Postman for Free

Try Postman for free! Join 13 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.

www.postman.com

여기서 다운 받으면 돼.

이걸 사용하면 Requset시 어떤 Response가 오는지 확인할 수 있어

www.google.com에 Request했을때의 응답

 

그럼 postman에 대해서 간략히 실습해볼까?

iTunes API document :

https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/

 

API

https://itunes.apple.com/search?media=music&entity=musicVideo&term=Gd

post맨에서 get방식으로 검색

이렇게 사용하면 동영상의 preview까지 볼 수 있다. 

-> Request 후 어떤 Response가 오는지 확인할 때 사용하면 유용하다.

 

 

✅ 다음은 Concurrency에 대한 내용이다. (동시성)

GCD에 대한 설명

개발에서는 GCD를 이용해서 쉽게 말해서 Queue를 이용하여 FIFO형식으로 처리해주는데, 시스템에서 안전하게 처리해주겠다는 의미

그러니까 GCD는 스레드 위에 만들어진 친구라고 생각하면 이해가 쉬울수도!

그리고 GCD에서 사용하는 Queue는 DispatchQueue라고 애플에서 명명해 둠!

 

DispatchQueue의 타입 3가지

1. Main Queue : 메인 스레드에서 작동하는 큐 -> UI나 사용자 인터렉션 처리 (안드로이드 개발과 비슷)

메인 큐

2. Global Queue : System에 의해 관리되는 Concurrent 큐 -> 큐에 들어가는 우선순위를 Qos 사용하여 표현

Qos 클래스의 우선순위

Qos 클래스의 우선순위 (숫자가 작을수록 우선순위 높음)

그럼 하나씩 살펴볼까?

2-1. 사용자 터치와 같이 제일 급한거

2-2. 사용자가 결과를 기다리는 작업 이것도 거의 바로 시행되어야 할 작업

2-3. 2-2보다 조금 덜 중요한 작업

2-4. 수초~수분 걸리는 나름 무거운 작업 ex) 네트워킹이나 파일 불러오기 등

2-5. 사용자에게 바로 인식될 필요 없는 작업 등에 대해서 ex) 뉴스를 미리 다운 받아놓는다는지, 용량이 큰 영상을 받는다는지, 사용자의 위치를 바꾼다는지 등

Qos를 사용한 예시

Qos클래스 미지정시 알아서 시스템이 자동으로 처리

 

3. Custom Queue : 위의 2개는 시스템에서 제공해 주는건데, 가끔 우리가 직접 큐를 생성해서 사용해주어야 한다.

커스텀 큐 생성 예시

 

앱에서는 두개이 큐 사이의 의존이 있는 경우가 있어.

예를 들면, 용량이 큰 파일을 다운받고, 다운 후에 화면에 보여주는 작업(UI 업데이트 작업)을 해야한다면?

그렇다면 각 task에 사용되어야 하는 Queue가 다를 수 있다.

여러개의 Queue를 함께 사용하는법

코드를 분석해 보자면, 글로벌 큐를 사용해 헤비한 작업 먼저 진행한다. 서버로부터 다운로드를 실시하고, 코드는 순차적으로 진행되므로 이 작업이 끝나면 백그라운드 큐가 아니라 메인 큐로 넘어와서 UI 업데이트를 수행시켜준다.

 

✅ Sync & Async 

Sync : 앞의 작업이 완료되고 뒤의 작업을 실행

Async : 앞의 작업이 끝나지 않았음에도 실행

 

 async의 예시

컴퓨터 입장에서는 악마 이모지 작업이 끝나기도 전에 실행하는 모습을 볼 수 있다.

sync의 예시

앞의 코드가 끝난 후에 뒤의 코드가 실행되는걸 볼 수 있다.

 

sync를 쓰게 되면 블락이 되서 네트워크나 큰 작업은 주로 async를 사용한다.

 

https://github.com/lgvv/fastCampus/tree/main/Sync_Async.playground

 

lgvv/fastCampus

Contribute to lgvv/fastCampus development by creating an account on GitHub.

github.com