본문 바로가기

iOS

Network - 가볍게

728x90

HTTP

HTTP란?

Hyper Text Transfer Protocol의 약어로,

  • 인터넷에서 데이터를 주고 받을 수 있는 프로토콜을 말한다.
  • 메시지를 평문 그대로 전송하기 때문에 주고 받을 수 있는 데이터가 공개될 수 있는 여지가 있다.
    • 만약, URL에 중요한 정보를 담아서 주고 받는다면 보안에 취약할 수 있다.
  • 모든 프로그램이 규칙에 맞춰 개발하므로 (클라이언트와 서버가 동일한 규칙을 바탕으로 정보를 주고 받으므로) 상호간의 정보 교환이 가능하다.
    • 클라이언트(앱) ---reqeust(POST/GET/PUT/DELET) + 인증키---> 서버 
    • 클라이언트(앱) <---response(JSON/XML)---서버 

 

HTTP 통신의 특징

Request - Response

클라이언트의 요청이 있을 때, 서버에서 응답을 하는 방식으로 동작한다.

= 서버가 클라이언트에게 먼저 정보를 주지 못한다.

= 서버에서 새로운 정보를 알고 싶다면 클라이언트가 서버에 재요청을 하여 데이터를 업데이트 해야한다.

= 클라이언트의 요청이 없다면 서버의 데이터를 받을 수 없다.

 

Connectionless

위에서 말한 것과 같이 서버는 클라이언트가 요청할 때마다 그에 맞는 응답을 보낸다. 

즉, 클라이언트와 서버가 특정 쌍을 이루고 있지 않는다. 모든 클라이언트의 요청에 의해서 새롭게 연결되고 해제되는 과정을 거친다.

 

Stateless

서버는 클라이언트의 정보를 기억하고 있지 않기 때문에 클라이언트를 기본적으로 따로 식별할 방법이 없다.

그렇기 때문에 몇가지 방법을 통해서 클라이언트를 식별한다.

  • 웹 : 쿠키/세션을 통해서 클라이언트를 식별한다.
  • 앱 : 토큰을 통해서 클라이언트를 식별한다.

 

HTTP Method

클라이언트가 서버에게 요청할 때, 요청을 하는 목적을 알리는 수단을 의미한다.

  • GET
    • URL에 데이터를 포함해서 요청하기 때문에(ex, query string / end point 등으로) URL에 데이터가 노출되어 보안에 취약하다.
    • 서버에 정보를 요청할 때 주로 사용한다. (서버에게서 정보를 받아올 때)
    • 정보를 전달하는 방식으로 Query String과 Header를 사용한다.
      즉, 데이터를 Query String과 HTTP Header에 포함하여 전달한다.
      Query String : 일반적으로 OpenAPI는 해당 방법으로 데이터를 요청한다, URL 주소에 요청하고자 하는 데이터를 파라미터로 넘기는 방식을 말한다. 
    • 통신 규약상 URL 길이에 제한이 없기 때문에 무제한으로 보낼 수도 있지만 브라우저에서 일반적으로 최대 길이를 제한하고 있다.
  • POST
    • 데이터를 HTTP Body에 포함해서 전달
    • URL 자체에 데이터가 포함되어 있지 않기 때문에 최소한의 보안 구성은 되어 있다. 그렇지만 보안 관점에서 보았을 때 유의미한 보안 정도는 아니다.
    • 전송 데이터의 길이에 제한이 없다. 

 

상태 코드 (Status Code)

클라이언트와 서버 간 통신의 성공/실패 여부 및 오류 원인을 알려주는 코드 

보편적인 상태 코드가 존재하지만 다르게 사용할 수도 있고 서버의 프레임워크 종류에 따라 상태 코드 방식이 다르기 때문에 협업이 필수적이다.

 

보편적으로 아래와 같이 사용한다.

  • 1xx (정보) : 요청을 받았으며 프로세스를 계속한다.
  • 2xx (성공) : 요청을 성공적으로 받았으며 인식-수용한다.
  • 3xx (리다이렉션) : 요청 완료를 위한 추가 작업 조치가 필요하다.
  • 4xx (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
  • 5xx (서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했다.

 

HTTP 메시지

요청 메시지와 응답 메시지로 구분할 수 있다.

라인-헤더-바디 구조로 되어 있다.

  • 헤더 : 메시지 본문에 대한 메타 정보
  • 바디 : 실제로 보내고자 하는 메시지 본문 내용 

 

XML, JSON

  • XML 방식
    • < 으로 시작하여 > 로 끝나는 Tag로 이루어진 마크업 구조
    • iOS의 경우 XMLParser 모듈을 Foundation Framwork에서 제공하므로 데이터를 쉽게 분석할 수 있다.
    • 데이터의 의미 전달을 위해 마크업 태그를 사용해야 하므로 주고 받을 전체 데이터의 용량이 지나치게 커질 수 있다.
  • JSON 방식
    • XML의 단점을 해결하기 위해 만들어진 경량의 데이터 교환 형식
    • { 키 : 데이터 } 형태로 이루어진 딕셔너리식 데이터 집합인 JSON 객체와 [ ] 로 이루어져 데이터를 나열하는 JSON 배열로 이루어져 있다.
    • 데이터를 계층적인 구조로 표현할 수 있으므로 구조화 된 데이터를 만들 수 있다. 

 

URL

URL 구조 

http://news.naver.com:80/article/3234234?lang=ko&page=1 

이라는 주소가 있다고 가정해보자.

 

이 주소를 나눠보면 다음과 같다.

  • http - scheme
    • Scheme : 네트워크 통신 시 사용할 프로토콜을 의미 / http, https, ftp 등 
  • news.naver.com - host
  • 80 - port
  • article/3234234 - path
  • lang=ko&page=1 - query string  
    • URL 허용 문자
    • URL에서는 기본적으로 아스키 코드 값만 사용 가능하다.
    • 한글, 특수문자와 같이 아스키 코드에 해당하지 않는 문자는 인코딩이 필요하다.
    • URL Encoding - URL에 문자를 표현하는 문자 인코딩 방법, 16진수 값으로 인코딩한다. 

 

'iOS' 카테고리의 다른 글

.gitignore  (0) 2022.08.05
프로토콜 - Basic To Advanced  (0) 2022.08.03
SSAC - 다마고치 프로젝트 피드백 정리  (0) 2022.08.02
0729 Q&A 정리  (0) 2022.08.01
Custom Font를 적용하고 싶다면?  (0) 2022.08.01