[iOS] Network 뽀개기 1편 HTTP 통신 이론편

Red·2022년 11월 17일
0

iOS

목록 보기
8/9
post-thumbnail

Network 통신이란?

Network 통신이란 Client 와 Server 가 통신하는 것이다.

Network 내부 구조가 어떻게 되어있고, 이런 CS 적인 지식 물론 알고 있으면 너무 좋다. 그런데 내용이 방대해서 이를 다 공부하고 나서 HTTP 통신을 공부하려면 시간이 너무 많이 걸리기 때문에, 우선 HTTP 통신을 하는데 문제가 없을 정도만 알아보고 추후에 CS적인 지식의 부채를 채우면 되겠다.

Network 통신은 여러 개층으로 나누어져 있다.
Client에서 Server로 정보를 보내면,
응용계층 -> 표현계층 이런 순서를 따라 물리계층 까지 도착하고
다시 물리 계층에서 응용계층까지 역순으로 서버에 정보가 도착하게 된다.

각각의 계층에는 규격이 정해져 있는데 그 규격들을 🌟프로토콜🌟 이라고 한다.

계층이 왜 존재하는 건지? 각 계층에 특성은 무엇인지 이런것에 대해 알고 싶다면 osi 7계층 TCP/IP 4계층 등으로 검색해 보면 된다.

우리는 Client 입장에서 통신을 할 것이기 때문에 응용계층의 프로토콜을 지켜서 통신을 시도 하면 된다!

HTTP 통신

대표적인 응용 계층의 프로토콜 (규격)이 HTTP 이다.
우린 일반적으로 이것을 HTTP(Hyper Text Transfer Protocol) 통신이라고 말한다.

주소창에 https://www.google.com 이런식의 http 또는 http 로 주소를 찾아서 페이지를 띄우는 것이 대표적인 http 통신이다.

HTTP 통신의 특징

  • 클라이언트 서버 구조
    • Request, Response 구조라고도 한다.
    • Client 가 요청을 보내면 Server가 응답을 주는 방식
  • 무상태 프로토콜(Stateless)
    • 상태를 보존하지 않는다 (내가 무슨 요청을 했었는지 어떤 유저인지 매번 말해주지 않으면 기억 못함)
    • 그냥 요청에 응답할 뿐이다.
  • 비 연결성(Connectionless)
  • 단순함, 확장 가능

특징은 이런 것들이 있다.
Request, Response 를 직접해보고 사용해보면 특징이 이해가 갈 것이다.

HTTP Response

(Request 보다 Response를 먼저 보는 이유는... 눈으로 확인하기가 쉽다.)

무슨 request 인지는 뭐르겠지만, 서버에 요청을 보냈다고 치자.
(터미널 curl 을 이용하면 터미널로 http 통신 가능)

이런 응답이 왔다!
크게는 Status Line, Header, Body 로 나눌 수 있으니 뜯어서 보자.

Status Line

response가 시작되는 줄로 다음과 같은 3가지 정보를 가지고 있다.

  • 프로토콜 버전, 보통 HTTP/1.1
  • 상태 코드 (200, 404 등...)
  • 상태 텍스트, 짧고 간결하게 상태 코드에 대한 설명 (Not Found, OK 등...)

HTTP StatusCode (상태 코드)
1xx : Informational - 요청 정보를 처리 중
2xx : Success - 요청을 정상적으로 처리함
3xx : Redirection - 요청을 완료하기 위해 추가 동작이 필요함
4xx : Client Error - 클라이언트의 요청 오류
5xx : Server Error - 서버 측 오류

가끔 보이는 404 Not Found 이게 바로 요청한 request 가 잘못되었다는 유명한 상태코드 오류 중 하나다

  • 대소문자 구분 없는 문자열 다음 콜론 (' : ')이 붙으며, 그 뒤에 오는 값은 헤더에 따라 달라진다.
  • 헤더를 세분화하면 General Header, Request Header, Entity Header으로 나눌 수 있다.

Body

  • response의 마지막 부분. 모든 응답에 들어가지는 않고 body가 없는 경우도 있다.
  • 일반적으로 데이터를 담고 있다.
  • 데이터의 종류는 크게 3가지로 나뉜다.
    • 이미 길이가 알려진 단일 데이터 (header에 Content-Length 에서 타입과 길이를 찾을 수 있음)
    • 길이를 모르는 단일데이터
    • 서로 다른 정보를 담고 있는 멀티파트로 이루어진 다중데이터

예제는 Header 에
Content-Type: application/json Content-Length: 154
이 있으므로 body 에 온 데이터가 json 형태이고 길이가 154인 단일 데이터 인 것을 알 수 있다.
다중 데이터 일 경우 Content-Type이 multipart/form-data; 로 시작한다.

HTTP Request

Request Line

request가 시작되는 줄 이다. 다음과 같은 3가지 요소를 가지고 있다.

  • HTTP 메서드
  • 요청 타겟 (URL, 또는 포르토콜, 포트, 도메인)을 나타내며, 이들은 요청 컨텍스트에 의해 특정 지어집니다.
  • HTTP 버전

HTTP Method
GET : 존재하는 자원에 대한 요청
POST : 새로운 자원을 생성
PUT : 존재하는 자원에 대한 변경 (자원 전체를 갱신)
PATCH : 존재하는 자원에 대한 변경 (자원 일부를 교체)
DELETE : 존재하는 자원에 대한 삭제
OPTIONS : 웹 서버에 지원되는 메서드의 종류를 확인할 경우 사용

Header

  • 대소문자 구분 없는 문자열 다음 콜론 (' : ')이 붙으며, 그 뒤에 오는 값은 헤더에 따라 달라진다.
  • 헤더를 세분화하면 General Header, Request Header, Entity Header으로 나눌 수 있다.

Body

  • request의 마지막 부분에 들어간다. 모든 요청에 들어가지는 않고 POST 처럼 데이터를 서버에 전달해 줘야 하는 경우 사용한다.
  • response 의 body 처럼 단일 데이터와 다중 데이터로 나눠진다.

참고 문서

HTTP request response 공식 문서
자세한 HTTP 상태코드 보기

0개의 댓글