WEB

HTTP 그게 뭔데! ver1

데일리코딩 2024. 8. 5. 23:42

intro

바야흐로 웹 개발자라면 http 통신에서 살고 있는 21세기 개발자에게 필수지식이 되어버렸다.

 

http에 대해 잘 모르는 frontEnd 개발자라도 자바스크립트에 기본으로 내장되어있는 fetch 함수는 사용 혹은 구경은 해본경험은

있을것이라 생각한다. (웹 개발자니까.. 서버랑은 통신 해본경험은 있을거 아녀..)

 

통신할때 꼭 필요하다는 http! 우리가 알게 모르게 사용하고 있는 이 http에 대해서 얇고 넓은 지식을 한번 이 포스팅에 담아보도록 하겠다.

 

내용

전공자라면 정말 지겹게 듣는다던 osi 7계층 (나는 비전공자 ^ㅅ^;;) 

이 모든것에 다룰 자신도 없고 그럴 필요도 (필요할 수도?) 없다고 생각한다.

해당 포스팅은 7 ~ 4 계층 까지 정말 웹에 필수? 적인 내용만 담을거 이기 때문이다

 

우선 ip 프로토콜을 설명해야 그 다음을 설명할 수 있기에 ip 프로토콜 부터 시작하겠다.

 

ip 프로토콜 

정말 간단하게 설명하면 해당 프로토콜은 시작 ip와 도착점 ip를 통해서 데이터를 주고 받을 수 있다.

전송할 데이터를 패킷에 담아서 보내는데 이때 ip 패킷에 담는다 ip 정보와 함께 말이다

패킷은 정말 다양한 정보가 담겨져있지만 (버전, 헤더 길이, 서비스 유형, 총길이, 식별자, 플래그, 조각 오프셋, ttl, 프로토콜, 헤더 체크섬,출발지, 도착지, 옵션, 패딩...) 
우선 여기서는 출발지 ip, 도착지 ip를 통해서 수많은 노드 (서버 = 컴퓨터)를 통해서 도착지 까지 데이터를 전달해주는 프로토콜이라고 정리하겠다.

 

문제는 ip 프로토콜을 그대로 사용하기에는 네트워크라는 녀석은 호락호락하지 않았다

ip 프로토콜을 통해서 데이터를 전달시 매우 불안정한 네트워크에서 패킷(데이터)를 손실 할 수도 있고

겨우 도착지 ip에 도착했는데도 해당 ip가 데이터를 재대로 전달 했는지 알수가 없다.. 
또한 수많은 노드를 통해서 도착했는데 도착 순서가 엉망이라 데이터 순서가 엉망진창 일 수 도 있다.

 

이러한 ip 프로토콜문제를 해결 하기 위해서 4계층인 tcp, udp 프로토콜이 나온다

 

tcp, udp 프로토콜

위 프로토콜은 ip 프로토콜이 가진 문제점

(순서 보장, 어느 서비스로 가야하는지 ? (포트번호), 패킷 분실 시에는 어떻게 처리할 것인지 등) 을 해결하기 위해서 
태어났다.

 

3ways hand shake를 통해서 데이터를 보내는 쪽과 받는쪽이 서로 데이터를 받을 수 있는지 논리적으로 확인하며

port 번호를 담아서 어느 서비스로 해당 데이터를 전송할지 알 수 있고 

위 3웨이 핸드 쉐이크를 통해서 데이터 순서 보장까지 기존 ip 프로토콜의 문제를 해결 할 수 있게 되었다.

 

문제는 tcp가 위 많은 기능 과 데이터 덕분에 느릴 수 있는데

udp 가 새로운 해결 방법일 수 도 있다

 

udp는 정말 기존 Ip 프로토콜에서 체크섬 기능 정도만 추가된 정말 가벼운 프로토콜인데 

개발자들이 원하는 입맛으로 변경할 수 있기 때문에 기존의 tcp 가 느리다고 판단되면 충분히 udp 프로토콜을 사용하는 

방법으로 생각할 수 도 있다.

 

이렇게 3 ~ 4 계층을 정리해보았다.

 

어플리케이션 계층인 7계층 

그렇담~ 위에서 ip 프로토콜을 통해서 ip 도착지 정보를 얻고 tcp 를 통해서 데이터도 순서대로 전달받고 port 번호를 통해서 
어느 서비스로 데이터를 전달할곳을 식별했겠다 이제 http를 통해서 해당 정보를 어플리케이션 단으로 전달할 순간이 남았다

7계층에서는 소켓 라이브러리가 존재하는데 소켓 라이브러리에서 데이터를 마치 우물에서 양동이로 물을 퍼듯이 데이터를 한번에 가져올 수 있을만큼 가져오고~ (버퍼)로 전달되고 애플리케이션은 버퍼에서 데이터를 읽어와서 처리하게 되는것이다.

 

데이터를 수신할 시나리오에서 3 계층에서부터 7계층까지 설명을 하긴 했는데.. 
사실 해당 포스팅을 전체적인 그림에서 부터 설명을 해야 이해가 쉬울텐데 너무 중간 내용을 딱 가져와서 
네트워크나, http에 대한 지식을 익히기에는 많이 부족한 포스팅인데 ver1은 우선 여기에서 마무리 하고 점차 발전 시켜보겠다..