TIL - 2021.05.10 (Mon)

Youngwoo Lee·2021년 6월 22일
0

TIL

목록 보기
23/29
post-thumbnail

야곰 캠프 방학 중 2학기 TIL Notion -> Velog 이전하면서 복습하기!

Today's TOPIC

  • URLSession
  • 네트워크 통신과 API
  • 금일 활동학습 (Kahoot / TCP/IP / HTTP)

URLSession

참고 자료
Apple Developer Documentation
Swift, URLSession가 무엇인지, 어떻게 사용하는지 알아봅니다.
[iOS] URLSession, URLSessionDataTask 톺아보기

관련된 네트워크 데이터 전송 task 그룹을 조정하는 개체이다

즉, URLSessionHTTP/HTTPS 기반 요청을 처리하기 위한 클래스 및 클래스의 세트 모음이다

  • Declaration
class URLSession: NSObject

Overview

URLSession 클래스관련 클래스URL로 표시된 엔트포인트에서 데이터를 다운로드하고 업로드하기 위한 API를 제공한다. 앱은 또한 이 API를 사용하여 앱이 실행되지 않거나, 중단되었을 때 백그라운드에서 다운로드를 진행한다. 관련 URLsessionDelegateURLsessionTaskDelegate를 사용하여 인증을 지원하고 redirection 및 task completion와 같은 이벤트를 수신할 수 있습니다.

Note
URLSession API는 상당히 복잡한 방식으로 함께 작동하는 많은 다양한 클래스를 포함하는데, 그러한 클래스는 참조 문서를 독자적으로 읽는 경우 분명하지 않을 수 있습니다. API를 사용하기 전에, URL Loading System 주제에 대해서 꼭 읽어봐라. Essentials, UploadingDownload 섹션의 기사에서는 URL 세션으로 일반적인 작업을 수행하는 예를 제공합니다.

앱에서 하나 이상의 URL Session 인스턴스를 만들고 각 인스턴스는 관련된 데이터 전송 작업 그룹을 조정합니다. 예를 들어 웹 브라우저를 만드는 경우 앱에서 탭 또는 창당 세션 하나 또는 interactive한 사용을 위한 세션 하나와 백그라운드를 위한 세션을 만들 수 있다. 각 세션에서 앱은 일련의 작업을 추가한다. 각 작업은 특정 URL에 대한 요청을 나타냅니다 (필요한 경우 HTTP redirect한다)

Types of URL Sessions

지정된 URL Session 내의 Task 는 단일 호스트에 대한 최대 동시 연결 수, 연결이 셀룰러 네트워크를 사용할 수 있는지 여부 등과 같은 연결 동작을 정의하는 common session configuration 를 공유합니다.

URLSession 에는 기본 요청에 대한 (configuration object를 가지지 않는) Singleton 공유 세션이 있다. 사용자가 생성하는 세션만큼 customizable 하지는 않지만, 요구사항이 매우 제한적인 경우 좋은 시작점으로 작용합니다. shared class 메서드를 호출함으로써 이 세 session에 접근한다. 다른 유형의 세션의 경우 다음 세 가지 구성 중 하나로 URL 세션을 생성한다.

  • .default : 디스크 지속 전역 캐시, 자격 증명(credential)과 쿠기 저장 객체를 사용하는 기본 구성 객체(default configuration object)를 생성합니다
    • 기본 세션은 URL 다운로드를 위한 다른 파운데이션 메서드와 유사하게 동작합니다. 디스크에 저장하는 방식입니다
  • .ephemeral : 모든 세션관련 데이터가 메모리에 저장된다는 점을 제외하고는 기본 구성(default configuration)과 다릅니다. 비공개(private) 세션이라고 생각하면 된다.
    • 기본 세션과 유사하지만, 디스크에 어떤 데이터도 저장하지 않고, 메모리에 올려 세션과 연결합니다. 따라서 애플리케이션이 세션을 만료시키면 세션과 관련한 데이터가 사라집니다.
  • .background : 세션은 업로드와 다운로드를 백그라운드에서 이행합니다. 앱 그 자체가 일시중지(suspend)되거나 시스템에 의해 종료되는(terminated by the system) 경우에도 전송이 계속됩니다

또한 URLSessionConfiguration 은 시간 초과(timeout) 값, 캐싱 정책, HTTP 헤더와 같은 세션 속성을 구성할 수 있습니다.

Types of Session Tasks

session 내에서, 우리는 선택적으로 데이터를 서버에 업로드 하거나 데이터를 회수하는 task를 만들 수 있다. 총 4가지가 있는데,

  • Data 업무는 NSData 객체들을 사용하여 데이터를 보내고 회수한다. Data task들은 서버에 짧고, 가끔 보내는 interactive한 요청을 위한 것이다
  • 업로드 Task는 데이터 Task와 유사하지만, 데이터(종종 파일 형식)을 전송하고 앱이 실행되지 않는 동안 백그라운드 업로드를 지원한다
  • 다운로드 Task는 파일 형식으로 데이터를 검색하고 앱이 실행되지 않는 동안 백그라운드 다운로드 및 업로드를 지원한다.
  • WebSocket Task는 RFC 6455에 정의된 WebSocket 프로토콜을 사용하여 TCP와 TLS를 통해 메시지를 교환한다

URLSessionTask 는 작업 객체(task object)를 나타내는 추상 클래스입니다. 세션은 데이터를 가져오거나 파일을 업로드, 다운로드 하는 실제 작업을 수행하는 하나 이상의 테스크를 생성합니다.

세 가지 유형의 구체적인 session tasks이 있다

  • URLSessionDataTask: 서버에서 메모리로 데이터를 검색하는 HTTP GET요청에 이 테스크를 사용합니다.
  • URLSessionUploadTask: 전형적으로 HTTP POST, PUT 매소드를 통해서 디스크에서 웹서버로 파일을 전송할때 이 테스크를 사용하세요.
  • URLSessionDownloadTask: 임시의 파일 위치로 원격 서버에서 파일을 다운로드할때 이 테스크를 사용하세요

Using a Session Delegate

session내의 Task들은 또한 common delegate object 를 공유한다. 우리는 이 delegate를 아래와 같은 다양한 이벤트가 발생하였을 때 정보를 얻고 제공하는데 사용한다.

  • 인증 실패
  • 데이터가 서버로부터 도착
  • 데이터를 캐싱에 사용할 수 있게 되었다

만약 delegate에 의해서 제공되어지는 기능이 필요하지 않은 경우에는, 세션을 생성할 때 0을 전달하여 이 API를 제공하지 않고도 사용할 수 있다.

  • Important

    session 객체는 강한 참조를 앱이 종료하거나 명시적으로 invalidate할 때까지 delegate에 대한 강력한 참조를 유지합니다. 세션을 invalidate하지 않으면 앱이 종료될 때까지 메모리 누수가 발생합니다.

Protocol Support

URLSession 클래스는 기본적으로 데이터, 파일, ftp, http 및 https URL 스키마를 지원하며 사용자의 시스템 기본 설정에서 구성한 프록시 서버와 SOCKS 게이트웨이를 투명하게 지원합니다. URLSession은 HTTP/1.1 및 HTTP/2 프로토콜을 지원합니다.


네트워크 통신과 API

앱과 서버 간의 네트워크 통신이 이루어지는 방식은 크게 두 가지 이다

  1. TCP/UDP를 사용하는 소켓 방식의 연결성 통신
  2. HTTP/HTTPS/SMTP 등의 프로토콜을 이용한 비연결성 통신

소켓 방식의 연결 지향 통신

전구가 결합하는 소켓의 개념을 따온 소켓 방식의 연결은 일단 앱과 서버가 연결되면 한쪽에서 명시적으로 끊을 때까지 지속해서 연결을 유지하는 방식이다

장점 : 연결을 종료하기 전까지는 한번 연결된 통신을 계속 유지하므로 재연결할 필요 없이 원하는 만큼 빠르게 메시지를 주고받을 수 있는 장점이 있다.

단점 : 연결 정보를 유지하기 위해 네트워크 대역을 많이 소모하고, 서버 부하도 크다는 단점 때문에 네트워크 환경이 고르지 않은 모바일 서비스에서는 메신저나 화상 통화, RPG 게임 등에서만 제한적으로 사용되기도 합니다.


TCP : 데이터 유실을 방지하고 완전한 전송을 보장하지만 상대적으로 덜 빠른 TCP 연결
UDP : 데이터의 완전한 전송을 보장하지는 않지만 상대적으로 더 빠른 UDP

비연결 지향 통신

HTTP 등의 프로토콜을 사용하여 메시지를 주고받는 방식을 가리킨다. 대표적으로 HTTP / HTTPS 프로토콜이 있는데, 웹 서비스에 주로 사용된다. 비연결성 프로토콜은 요청이 들어오면 이에 맞는 응답을 보낸 후 바로 연결을 종료한다. 다시 요청을 하기 위해서는 새롭게 연결을 맺어야 한다. 비연결 방식이라 하여 아예 연결을 하지 않는다는 것이 아니다. 단지 연결을 유지하지 않는다는 것이다

장점 : 필요할 때만 연결하여 요청을 처리한 후 연결을 종료하므로 필요 없는 네트워크 대역 소모를 줄일 수 있고, 서버 부하도 낮출 수 있어서 범용적인 모바일 서비스에 많이 사용된다

단점 : 매번 요청할 때마다 연결해야 하므로 소켓 방식에 비해 상대적으로 데이터를 주고받는 속도에 제약이 있다

동일한 HTTP/HTTPS 프로토콜을 사용하지만 일반 HTML을 제공하는 웹 페이지와 달리, 데이터만을 주고받을 수 있도록 설계된 모듈을 웹 서비스(Web Service)라고 부른다.


웹 서비스는 다시 아키텍처 구조에 따라 SOAP / RESTful로 나눌 수 있다. 그리고 데이터 타입에 따라서는 XML과 JSON 방식으로 나눌 수 있다.

SOAP 방식

SOAP(Simple Object Access Protocol)은 일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등의 프로토콜을 통해 양쪽에서 XML 형태의 메시지를 주고받도록 구현된 프로토콜입니다. 이때 통신 구조는 Envelop / Header / Body의 세 가지 영역으로 구분할 수 있다.

장점

  1. SOAP를 사용한 HTTP는 기존 원격 기술과는 달리 프락시나 방화벽과 관계없이 쉽게 통신할 수 있다.
  2. SOAP가 사용하는 표준 전송 프로토콜은 HTTP이지만 이외에도 사용할 수 있는 프로토콜이 다양하다
  3. 플랫폼 독립적인 통신이므로 시스템이 바뀌거나 이기종 플랫폼 간의 데이터 통신이 편리하다
  4. 프로그래밍 언어에 종속되지 않는다
  5. 매우 간단하고 확장이 용이하다

단점

상대적으로 느리다!

RESTful 방식

RESTful의 근간이 되는 REST(Representational State Transfer)는 월드 와이드 웹 (World Wide Web, WWW)과 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 아키텍츠의 한 형식입니다. 엄격한 기준에서 봤을 때 REST는 실질적인 네트워크 프로토콜은 아니다. 단순히 네트워크 자원을 정의하고 자원에 대한 주소를 관리하는 방법이다. 쉽게 말해 REST란 웹 형식을 빌어 데이터를 전송하되, SOAP나 쿠키 등 별도의 전송 프로토콜 없이 전송하기 위해 만들어진 간단한 형식의 인터페이스를 말한다.

REST의 데이터 구조는 굉장히 간단해서, 다른 방식의 데이터 전송 형식과 많이 비교됩니다. REST는 HTTP 프로토콜을 바탕으로 필요한 데이터를 별도의 규약없이 주고받기만 하면 됩니다.

쉽게 말해서, 웹 브라우저에 URL을 입력을 하는 것처럼, 데이터를 요청하는 URI를 네트워크를 통해 서버에 전달하면 서버에서는 그에 맞는 응답 데이터가 전송된다는 뜻이다

RESTful API와 HTTP 전송 방식

일반적으로 서버에 요청하는 정보의 타입은 Create, Read, Update, Delete(CRUD)이다. 하지만, 이와 같은 정보를 어떻게 다룰 것인가 하는 동작에 관한 명세는 포함되지 않는 것이 좋다. 다시 말해, URI에는 어떤 계층의 어떤 데이터라는 정보만을 기재하라는 것이다

HTTP METHOD

  • GET : 특정 리소스의 대표적인 정보를 요청할 때
  • POST : ID 없이 리소스를 생성하거나 수정할 때


Kahoot 카훗!!!

Q1 ARC를 통한 인스턴스의 생명주기는 런타임에 결정된다 (False)
→ Class의 인스턴스가 생성되고 소멸될때 init과 deinit이 호출되는데 그것은 코드이기 때문에 런타임이 아니고 컴파일 타임때 결정된다고 할 수 있다.

→ 실제로 해제되고 할당되는 것은 런타임때 되지만, 생명주기가 결정되는 것은 컴파일 타임때 결정된다!!

Q2 iOS13부터 UI를 Scene으로만 다뤄야 한다!

Scene을 다루지 않아도 된다! 그 대신 멀티윈도우 환경을 사용하지 못한다

Q3 백그라운드 사용 앱은 백그라운드 실행 중 시스템이 앱을 언제 종료할지 알 수 없다

백그라운드 실행 중에는 시스템이 앱을 종료할 수 없다



HTTP/HTTPS

HTTP 메서드

GET : URL가 가진 정보를 검색하기 위해 서버측에 요청하는 형태

POST : 내용 전송 (파일 전송 가능) 클라이언트에서 서버로 어떤 정보를 제출함

HEAD : 메세지 헤더 (문서 정보) 취득, GET과 비슷하나 문서를 요청하는 것이 아닌 문서 정보를 요청한다

  • 이에 따라 응답에서는 Body 없이 HTTP 헤더 정보만을 보낸다

PUT : 내용 갱신 위주(파일 전송 가능), POST처럼 정보를 서버로 제출하는 것으로 형식은 동일하나 갱신 위주이다

  • 이에 의해 갱신된 리소스에 대한 주소 정보를, POST와 달리 서버측 응답메세지의 HTTP헤더 항목 중 Location에 대한 내용은 보내지 않아도 된다

Patch Patch는 일부를 교체하는 의미.

DELETE : 파일 삭제, 웹 리소스를 제거

OPTIONS : OPTIONS 메서드는 목적 리소스의 통신을 설정하는 데 쓰임

TRACE : 요청 리소스가 수신되는 경로를 보여줌

CONNECT : CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺습니다

멱등? 연산을 여러 번 적용하더라도 결괏값이 달라지지 않는 일.

GET 요청은 멱등이다.

POST 요청은 멱등이 아님. = 비 멱등

  • 1 : 게시판 글 작성

    POST 클라이언트에서 서버로 어떤 정보를 제출 함.

  • 2 : 게시판 글 내용 요청

    GET URI(URL)가 가진 정보를 검색하기 위해 서버 측에 요청

  • 3 : 게시판 글 수정

    PUT

  • 4 : 게시판 글 삭제

    DELETE 서버에게 데이터 삭제를 요청.

  • 5 : 이미지 요청

    GET URI(URL)가 가진 정보를 검색하기 위해 서버 측에 요청

  • 6 : 이미지의 크기 알아보기

    HEAD

  • 7 : 오늘의 미세먼지 수치를 요청

    GET

  • 8 : 회원정보 수정

    PUT 요청된 자원을 수정(UPDATE)한다.

profile
iOS Developer Student

0개의 댓글