Computer기본지식/Http지식

HTTP구조 및 네트워크

HOONY_612 2021. 7. 12. 18:29
반응형

이번에는 HTTP(HyperText Transfer Protocol)에 대해서 글을 포스팅해볼려고 한다.

물론 HTTP에 대한 기본지식이 없어도 코드를 짜고 하는데에는 큰 문제가 되지 않는다고 생각한다.

그러나 어느정도 실력있는 개발자가 되었을 때 이러한 기본지식 없이는 더 성장하기 어렵겠다 싶어서 HTTP에 대해 깊이 공부해볼려고 한다.

 

처음으로 HTTP도 프로토콜이다. 우리가 흔히 알고있는 TCP/IP, UDP와 동일한 것이다.

근데 왜 TCP/IP가 아닌 HTTP를 사용하는 것일까? 이제부터 차근차근 알아보자.

 

일단 TCP, IP, UDP에 대해서 간략하게 알아보고 가자.

첫 번째로 IP(Internet Protocol)이다. 우리가 서버에게 뭔가 요청을 할 경우 수 많은 노드를 거쳐야 된다.

그래서 우편을 보내듯이 목적지 주소와 출발지 주소를 패킷이라는 곳에 넣어서 인터넷 망에 던져준다.

그러면 목적지까지 패킷이 도착 할 것이다. 그러나 문제가 생긴다. 중간에 패킷이 손실 될 수도 있고 패킷의 도착 순서가 엉켜버릴 수 있다. 그리고 서버가 꺼져 있을 경우는 요청이 불가한 경우가 발생한다.

 

어떻게 이러한 경우들을 해결해야 할까?

 

바로 이것을 해결 할 수 있는 것이 TCP/IP, UDP이다.

아래를 보면 우리가 웹 브라우저에서 SOCKET라이브러리를 통해서 TCP계층으로 패킷을 전달한다.

그것을 TCP계층에선 TCP정보, TCP 메세지 등을 포함하여 IP로 넘겨주고 IP PORT번호, 목적IP등을 생성한다.

그리고 이렇게 완성되어진 패킷을 LAN을 통해 인터넷 망으로 던져진다.

그것을 받은 서버는 패킷을 해석하여 클라이언트 요청에 응답해준다.

 

TCP는 무엇일까?

TCP(Transmission Control Protocol)는 서버와 클라이언트가 서로 패킷을 받을 수 있는 상황인지 확인하고 보내는 방법이다. 이것을 3Way-Handshaking이라고 한다. SYN(요청수락),ACK(요청확인)을 통해서 통신가능한지 서로 확인한다.

 

그리고 UDP(User Datagram Protocol)은 데이터를 뿌려주는 것이라고 생각하면 된다. TCP는 서로 확인하고 뿌려줘서 신뢰성이 있지만 UDP는 그냥 보내기 때문에 신뢰성이 없다. 그러나 속도는 향상된다는 특징이 있다.

 

이러한 Protocol의 장점들을 합쳐 놓은 것이 HTTP라고 생각하면 된다. 현재 주로 사용하는 HTTPTCP/IP기반의 프로토콜이다.

 

 

그럼 이제부터 HTTP의 기본 특성 및 구조에 대해서 살펴보자.

현재 모든 데이터들(HTML, IMAGE, TEXT, XML, JSON등)이 HTTP를 통해서 전송된다. 

HTTP의 주요 특징부터 알아보자.

 

첫 번째는 클라이언트 - 서버 구조이다.

두 번째는 무상태(Stateless) 프로토콜이다. 이게 무슨 의미일까?

쉽게 말해서 서버와 클라이언트간의 데이터를 주고 받는데 서버가 이전 상태를 기억안해도 된다는 뜻이다.

이전 상태를 기억해야하는 Stateful 프로토콜은 계속 사용하던 서버와 통신해야한다. 그래서 서버를 무한대로 늘릴 수 없어 효율이 많이떨어진다.

 

세 번째로는 비연결성이다. 이것은 서버와 클라이언트간의 통신을 유지 안해도 되게하라는 뜻이다.

계속 서버에 연결이 되어있으면 자원이 낭비가 심해진다. 그래서 요청-응답을 주고받은 후에는 무조건 연결을 끊어준다.

이것은 무상태 설계가 기반이 되어있어야 가능하다.

 

이렇게 3가지 특성을 알아봤다. 이제는 HTTP 메세지 구조로 통신하는지 간략하게 살펴보자.

1. Start-Line

- request-line : 메서드(GET,POST,PUT,DELETE...), 요청대상(절대경로위치 + 쿼리), HTTP버전 

- status-line : HTTP버전, HTTP상태 코드(2xx, 4xx, 5xx...), 이유문구

 

2. Header

fieldname ":" OWS filed-value OWS (OWS : 띄어쓰기 허용)

헤더 부분에는 많은 내용들이 들어간다. 예를 들어 포트 번호, IP주소 등등 부가정보들이 들어있는 부분이다.

 

3. Body

실제 전송 데이터

 

 

이렇게 짧게나마 HTTP구조 및 특성에 대해서 알아봤다. 또 기본적인 네트워크에 대해서도 알아봤다.

다음 HTTP포스팅은 더 깊은 우리가 자주사용하는 GET, POST메소드에 대해서 포스팅해보겠다.

 

반응형