우선 개념에 대해 알아볼 필요가 있어요.
HTTP란?
HTTP Hyper Text Transfer Protocol의 약자로, 인터넷 프로토콜 스택의 4걔층 중 애플리케이션 계층의 프로토콜이에요.
인터넷 프로토콜 스택이라는 말과, 프로토콜이라는 말을 더 정확히 들어가보죠.
Protocol
컴퓨터 사이에 원활한 데이터 통신을 하기 위해 필요한 통신 규약이에요.
이때, 하나의 프로토콜의 설계로 데이터 송수신의 문제를 해결 될 수 없기에 프로토콜 스택은 아래와 같이 4가지의 영역별로 세분화 돼요.
- 인터넷 프로토콜 스택 4계층
그러고 이러한 계층들의 과정을 도식화 해보면 아래와 같아요.
하나씩 생겨난 이유에 대해 다뤄볼 거에요.
네트워크 인터페이스 계층
집에 컴퓨터가 두대가 있어요. 저는 두대의 컴퓨터를 연결해서 통신을 해보려해요.
집에 케이블을 찾아, 둘울 연결했어요.
이제 이 컴퓨터들은 통신이 가능해요
이때 사용되는 계층이 네트워크 인터페이스 계층
이에요 (Lan 드라이버, 장비)
저는 여기서 만족하지 않고, 해외에 사는 친구에게 메세지를 보내고 싶어졌어요.
하지만 저는 몇백,천km의 케이블을 가지고 있지 않아요.
이때 인터넷이 필요해요.
인터넷은 케이블의 역할을 대신해요.
인터넷 계층
그림상으로는 간단하게 보이지만, 실제 내부는 굉장히 복잡해요.
인터넷은 이렇게 수많은 노드들이 이어져있기 때문에. 친구에게 메시지를 보내려면 최소한의 규칙이 있어야해요.
(노드들에게 정보를 주면서, 받은 노드가 다음 노드에게 전달)
이때 사용하는 것이 IP(Internet Protocol)예요.
IP(Internet Protocol)
지정한 IP 주소(목적지 주소)에 데이터를 전달해요.
패킷이라는 통신 단위로 데이터를 전달해요.
IP 패킷
그림으로 살펴보면 출발지 IP, 목적지 IP, 기타 등이 포함되며, 전송할 데이터가
포함돼요.
친구 컴퓨터의 IP를 알고, 전송할 데이터 준비를 했고, 어떻게 보낼지 결정(통신 단위)했어요,
즉, 해외의 친구에게 메세지를 보낼 준비가 완료됐어요
클라이언트 패킷 전달
서버 패킷 전달
Hello를 보냈고, Yes라는 답변을 받았어요.
간단히 보면 정말 편리해보이는데, 아쉽게도 IP프로토콜엔 많은 한계가 있어요.
IP 프로토콜의 한계
비연결성:
패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송해요
비신뢰성:
중간에 패킷이 사라지거나, 순서대로 오지 않아도 체크할 수 없어요.
프로그램 구분:
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 어떠한 서비스가 목적지인지 알 수 없어요.
이러한 IP 프로토콜의 한계를 해결하는 방법이 TCP에요
전송 계층
TCP ( Transmission Control Protocol )
TCP는 전송 제어 프로토콜이라 불러요.
특징으로는 연결지향( TCP 3way handshake(가상연결))형 프로토콜이며, 데이터 전달을 보증하고, 순서를 보장
해요.
신뢰할 수 있는 프로토콜이라 불러요.
TCP/IP 패킷
데이터 전달 보증, 순서를 보장 할 수 있는 이유는 3Way handshake과정이 있기 때문이에요.
TCP 3 way handshake는 실제로 연결된게 아니에요. 연결이 됐나보다~처럼 논리적으로 연결이 된 것이에요.(물리적으로 연결된 랜선이랑은 느낌이 다름)
애플리케이션 계층
HTTP(HyperText Transfer Protocol)
인터넷 프로토콜 스택 4계층 중, 애플리케이션 계층의 프로토콜이에요.
기반 프로토콜
기반 프로토콜로는
TCP: HTTP/1.1, HTTP/2
UDP: HTTP3
이에요. 현재는 HTTP/1.1을 주로 사용해요.
특징
클라이언트 서버 구조를 가져요.
무상태 프로토콜이에요.
비 연결성을 가져요
HTTP 메시지로 통신해요
클라이언트 서버 구조
Request Response 구조라는 뜻이에요.
클라이언트는 서버에 요청을 보내고, 응답을 대기하고
서버는 요청에 대한 결과를 만들어서 응답해요.
이렇게 클라이언트와 서버가 분리가 되어있는 것이 양쪽이 독립적으로 실행될 수 있기에 좋다고 해요.
무상태 프로토콜(Stateless)
서버가 클라이언트의 상태를 보존하지 않아요
장점으로는 서버의 확장성이 높아져요.(스케일 아웃)
단점으로는 클라이언트가 추가 데이터를 전송해야 해서 데이터가 많아져요.
무상태 프로그램의 한계
모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있어요.
그렇기에 로그인이 필요한 곳에서는 왠만하면 상태유지를 사용해요. 이때 쿠키, 세션을 사용해요
상태유지는 최소한만 사용해요
비 연결성(Connectionless)
HTTP는 기본으로 연결을 유지하지 않아요.
그렇기에 TCP/IP연결 시 모든 자원에서 이 과정이 포함되요 → 속도가 증가됨
이때 HTTP 지속 연결(Persistent Connections)로 문제를 해결할 수 있어요.
HTTP 메시지
HTTP 메시지는 클라이언트에서 서버로의 요청(Request
)과 서버에서 클라이언트로의 응답(Response
)으로 구성돼요.
일반적으로 아래의 그림과 같이 이루어져 있어요.
쉽게 말해 목적지를 가지는 머리와 몸을 가진 메시지예요.
Request
Request HTTP 메시지는 위와 같이 이루어져 있어요.
시작라인인 Request-Line에는 위와 같이, Method (공백) Request-URI (공백) HTTP-Version CRLF(줄바꿈)으로 이루어져 있어요.
메소드의 종류는 아래와 같아요.
예제
Response
Response HTTP 메시지는 위와 같이 이루어져 있어요.
시작라인인 Status-Line에는 위와 같이, HTTP-Version (공백) Status-Code (공백) Reason-Phrase CRLF(줄바꿈)으로 이루어져 있어요.
상태코드의 종류는 아래와 같아요
댓글