TIL

[Sesac IOS] 22일차 TIL

22일차 수업 내용을 정리한 글입니다.


Learned

HTTP vs Socket

1) 소켓의 특징

  • 클라이언트의 요청 없이도 데이터를 주고 받을 수 있는 양방향 통신
  • 연결을 계속 유지하기 때문에 상대적으로 리소스를 많이 사용함.
  • 대표적으로 채팅 앱에서 서버가 클라이언트에게 메시지를 전달하는데 사용

2) HTTP 통신

  • 클라이언트의 요청이 있어야 데이터를 주고받을 수 있는 단방향 통신
  • 데이터를 받기 위해서는 반드시 서버에 요청을 보내야함.
  • 요청과 응답을 보낼 때만 연결되기 때문에 상대적으로 리소스를 덜 사용함.
    (HTTP 통신의 특징 중 비연결성)

3) HTTPS

  • TCP와 HTTP 사이에서 작용하며 데이터 패킷을 암호화하는 역할
  • URL은 노출되지만 쿼리스트링과 파라미터는 암호화되어 전송
  • HTTP는 통신 과정에서 데이터가 노출되거나 위변조 될 가능성 존재
  • 웹 서버가 인증서를 갖고 있어야 HTTPS 사용 가능
전송계층응용계층

전송계층은 포트 번호(프로세스의 주소)를 사용해 통신하는 프로토콜을 제공하는 계층으로
대표적으로 TCP(Transmission Control Protocol)UDP가 있다.

운용계층은 서로 다른 프로세스끼리 통신하는 프로토콜을 제공하는 계층으로
대표적으로 HTTP(웹)과 FTP(파일 전송)이 있다.

 

RestAPI

1) 개요

  • HTTP를 사용해서 쉽고 간편하게 데이터를 주고 받기 위해 고안된 아키텍쳐를
    Rest라고 하며, Restful하게 설계한 API를 RestAPI라고 함.
  • Rest는 Representational State Transfer의 약자
  • URI(Uniform Resource Identifier)로 자원을 표현(식별)하고
    HTTP 메서드로 자원에 대한 행위를 나타냄.
  • 모든 자원은 고유의 URI를 갖고 있으며 이미지나 문서같은 자원 그 자체를 의미함.
  • 데이터 전송 포맷으로 XML과 JSON을 사용함.

2) 특징

  • Uniform Interface (유니폼 인터페이스)
    • 한정된 인터페이스를 통해서 URI로 표현된 자원에 대해 동작을 수행함.
    • HTTP 메서드를 사용해서 자원을 조작함.
    • PUT으로 데이터 수정, DELETE로 데이터 삭제 등
  • Stateless (무상태성)
    • HTTP와 동일하게 서버가 클라이언트에 대한 정보를 저장하지 않음.
    • 서버는 어떤 클라이언트던지 요청에 대해 응답만을 전송함.
    • 클라이언트를 기억하지 못하기 때문에 로그인이 필요한 서비스일 경우
      요청마다 매번 로그인을 해야하지만 세션, 쿠키, 토큰으로 사용자를 유지
  • Cachable (캐시 가능)
    • HTTP를 사용하기 때문에 캐싱 기능을 사용할 수 있음.
    • 캐싱으로 서버의 부하를 감소시키고 네트워크 및 인프라 리소스 경감 가능
  • Self-descriptiveness (자체 표현 구조)
    • 자체 표현 구조를 가져서 메시지만 보고 그 의미를 이해할 수 있음
    • GET image/picture/nature/tree : 나무 이미지를 가져온다.
  • Client-Server 구조
    • 서버는 요청에 대한 로직을 담당하고 클라이언트는 사용자의 인증을
      관리하는 등 각각의 역할이 구분되어 있는 구조임.
  • 계층형 구조
    • Rest 서버는 다중 계층으로 이뤄질 수 있어서 암호화 계층이나
      Proxy같은 중간매체를 사용할 수 있는 구조임.

3) 장점

  • TCP/IP 연결을 통한 HTTP에서 구현할 수 있기 때문에
    기존 웹의 기능을 최대한 활용할 수 있음.
  • 별도의 프로토콜이 필요없으며 특정 언어나 기술에 종속되지 않음.

4) 단점

  • 오버패칭: 필요한 정보보다 많은 정보를 가져올 수 있음 
  • 언더패칭: 필요한 정보를 얻기 위해 더 많은 API 요청이 필요할 수 있음.
  • 기능이 많아질수록 관리해야할 URL이 늘어남.
  • 업데이트로 인해 기존 API의 URL이 변경되면
    업데이트를 하지 않은 클라이언트에게 문제가 발생할 수 있음.

 

Serialization

1) 직렬화 (Encoding)

  • 구조체, 클래스같은 시스템에서만 사용하는 데이터 객체
    저장하거나 네트워크 통신으로 전달할 수 있는 형태로 변환하는 작업
  • 이미 구조화된 데이터를 문자열(바이트스트림) 형태로
    열을 세워 쭉 늘어놓기 때문에 직렬화라고 한다.

2) 역직렬화 (Decoding)

  • 직렬화의 반대 개념으로, 직렬화된 데이터를
    시스템이 사용할 수 있도록 다시 구조화하는 작업
  • JSON 형식의 데이터를 클래스나 구조체로 변환하는 작업이 해당됨.

 


오늘 공부한 내용 중 중요한 부분은 후에 복습할 때 다시 정리해서 포스팅하겠습니다.

'TIL' 카테고리의 다른 글

[Sesac IOS] 24일차 TIL  (0) 2022.08.05
[Sesac IOS] 23일차 TIL  (0) 2022.08.04
[Sesac IOS] 21일차 TIL  (0) 2022.08.01
[Sesac IOS] 20일차 TIL  (0) 2022.07.29
[Sesac IOS] 19일차 TIL  (0) 2022.07.28