HTTP 통신, TCP 통신 그리고 웹 소켓

유영·2023년 5월 3일
0

HTTP

목록 보기
19/22

1.HTTP통신과 TCP통신의 개념

우선 HTTP통신과 TCP통신에 대해 알기전에 OSI 7 Layer와 프로토콜이란것에 대해서 알아 가도록 하겠다.

OSI(Open Systems Interconnection) 7 Layer는 ISO(국제표준기구)에서 만든 네트워크를
7계층으로 만든 모델이고,
프로토콜(Protocol, 통신규약)은 상호간의 접속이나 전달방식, 통신방식, 주고받을 자료의 형식, 오류 검출 방식, 코드 변환방식, 전송속도 등에 대하여 이미 정해진 약속이기 때문에
레이어별 프로토콜은 한마디로 OSI 7 계층의 계층간에 존재하는 네트워크 통신을 위한 규약을 뜻한다.
즉, 우리가 이제 알려고 하는 HTTP(HyperText Transfer Protocol)와 TCP(Transmission Control Protocol)는 모두 특정 layer(계층)의 규약으로 해석할 수 있다.


그렇기에, TCP통신과 HTTP통신이란
해당 계층에 해당되는 규약(protocol)아래에서 이루어지는 통신
의미한다.
조금 더 각각의 통신에 대해 자세히 보도록 하겠다.


2.TCP통신

TCP통신은 3-way-handshake라는 과정을 거치고 연결이 이루어진다.
그리고 연결을 종료할때는 4-way-handshake를 거치게 된다.

또한, TCP통신에서는 소켓을 이용한 연결방식을 사용한다.
그로인해, 양방향 통신이 가능하게 되는데 양방향 통신이란, 클라이언트단과 서버단이 서로 연결되어 있을때
양방향(클라이언트 -> 서버, 서버 -> 클라이언트) 으로 요청을 보내 통신을 할 수 있게 해주는 것이다.
또한, 클라이언트단과 서버단의 연결이 끊어지지않고 계속 연결을 유지해주어 실시간 소통이 가능하다.

위와같이 소켓을 이용한 연결은 TCP 프로토콜 기반으로 맺어진 연결이며, 소켓통신이라고도 부른다.
마지막으로, 이러한 소켓 통신을 사용하도록 설계하는 프로그래밍을 소켓 프로그래밍이라고 한다.


3.HTTP통신

그렇다면, HTTP통신은 어떻게 이루어지는것일까?
HTTP통신에 대해 정리하고 대개 고민하고 헷갈리는 부분에 대해 한번에 정리하도록 하겠다.

위의 그림만 보더라도, HTTP통신은 TCP 위에서 이루어지는것을 알 수 있다.
즉, HTTP통신이 이루어지려면 TCP를 거쳐야 한다는 말인데,
이 말이 무엇인지 아래 그림을 보면서 설명하도록 하겠다.

소켓은 엔드포인트. 즉 IP와 포트 넘버를 활용하여 만들어진 통신의 양끝단이다.
우리가 보통 웹서버를 만들때 80포트를 이용해서 만드는데, 이때 쓰는 엔드포인트도 IP + 포트 의 조합입니다. 그리고 소켓 통신은 소켓을 활용한 통신 방식인거죠.

근데 HTTP란 TCP 위에서 만들어집니다.
즉 소켓을 양끝단으로 하는 TCP 레이어 위에 존재하는 프로토콜입니다.

HTTP가 TCP 위에 만들어졌으니, 즉 HTTP 또한 소켓 통신을 활용한 방식이라 할 수있다!


4.HTTP 프로그래밍과 소켓 프로그래밍


양방향 통신을 위해서 소켓을 사용하도록 하는 프로그래밍을 소켓 프로그래밍이라 했는데,
반대로 HTTP통신을 하기 위한 프로그래밍을 HTTP 프로그래밍이라고도 한다.
하지만, HTTP 통신에서도 소켓을 사용한다고 했으니 꼭 소켓을 사용한다고 해서 소켓 프로그래밍이라고는 하지 않는다. 즉, 해당 소켓이 어떠한 용도로 사용되느냐에 따라 HTTP 프로그래밍이 될 수도 있고, 소켓 프로그래밍이 될 수도 있는것이다.

추가로, HTTP 프로그래밍은 단방향 통신이 가능하게 하며 HTTP통신은 애초에, html파일을 전송하거나, JSON, image파일등을 전송하는데 사용된다.

소켓 프로그래밍이 실제 사용되는 예로는 실시간 동영상 streaming서비스나 실시간 채팅을 들 수 있다. 이는 뒤에 나올 웹 소켓이라는것을 사용하여 구현하는데, 잠시뒤에 설명하도록 하겠다.

HTTP 프로그래밍은 우리가 브라우저에서 특정 URL을 입력하고 이에 대한 결과값을 받아올때나 요청을 보내 Server의 응답을 기다리는 어플리케이션(Android or Ios)의 개발에도 주로 사용된다.

흔히REST API도 모두 HTTP통신에 해당한다.


5.HTTP,HTTPS 통신에서 양방향 통신을 위한 웹소켓의 사용

기존의 HTTP통신은 connectionless로 기본적으로 연결이 유지되지 않으며 단방향이라는 특징을 갖고있다.
그렇기에 이를 극복하고 양방향이면서 실시간 통신이 필요한 기능들에 대해 여러가지 시도들이 있었다.
대표적으로, http polling, http streaming등이 시도되었다. 하지만, 비효율적이며 HTTP통신에서의 한계점 때문에 다른 대안이 제시되었다.

그리하여, web socket(웹 소켓)이라는 개념이 나오게 됬다.
웹 소켓은 일반 소켓(TCP 기반 소켓)처럼 양방향에 실시간 통신이 가능하며,
IP와 포트를 사용한 통신을 한다는 점에서 공통점
을 갖고 있다.

하지만, 웹 소캣은 기본적으로 HTTP 기반 계층(7 layer)에서 작동한다는점에서
일반 소켓이 TCP 기반 계층(4 layer) 에서 작동한다는 점에서 다르다.

그렇기에, 웹 소켓과 소켓은 엄연히 다른것으로 보아야 한다.


웹 소켓을 기반으로 하는 통신은 WebSocket 프로토콜이라는 새로운 규약에서 이루어진다.
하지만, 웹 소켓 통신을 위한 별도의 포트는 없으며, 포트 80, 443(http:80, https:443)을 사용하도록 설계되어져 있다. 그렇기에 HTTP 프로토콜, HTTPS 프로토콜과도 호환이 되도록 설계되어져 있다고 하는 것이다.
(기존 HTTP도 포트80, HTTPS는 443에서 이루어지기 때문)

즉, 조금 더 풀어서 얘기하자면 최초 접속시 HTTP 혹은 HTTPS 위에서 3-way handshake를 거치고,
그 이후에 웹 소켓을 이용해야하는 경우에 HTTP Upgrade header라는 걸 사용하여 HTTP 프로토콜에서 혹은 HTTPS 프로토콜에서 WebSocket 프로토콜로 전환시킨다.

그렇기에, WebSocket 프로토콜이 HTTP 프로토콜을 대체하는 개념은 아니고 상호보완하는 개념으로 볼 수 있다. 더 자세한 내용들에 대해서는 실제로 웹 소켓을 사용할 때 알아보도록 하자.


웹 소켓은 HTML5 이후에 나온 개념이기 때문에, html5이전 기술로 구현된 서비스의 경우에는 Socket.io, SocketJS를 사용하며,
이는 html5이전의 기술로 구현된 서비스에서 웹 소켓처럼 사용할 수 있도록 도와주는 기술이다.
그 외에, 예전에는 웹 소켓은 지원하지 않는 브라우저가 있었으나
현재는 거의 모든 브라우저에서 지원해주고 있으며,
버전이 낮은 경우 위의 Socker.io나 SockerJS를 사용하여 크로스 브라우징을 해주면 된다.

0개의 댓글