네트워크 위에서 프로그램이 동작하기 쉽게 하기 위해서 우리는 OSI 7계층을 나누어 네트워크를 관리함
(-) 계층만 나누는 걸로는 한계가 있음. 왜? 계층별 각 프로토콜은 일종의 통신 규약일뿐, 프로토콜 구현을 위해 안에 들어갈 구체적인 구현부인 함수가 필요함.
(+) 소켓에서 이러한 함수들의 body를 제공함 → 별도의 구현없이 소켓을 사용할 수 있음
즉, 프로토콜의 세부적인 명세를 일일히 정의할 필요없이 소켓을 활용하면 됨.
프로그램이 네트워크에서 데이터를 주고받을 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결부
일반적으로 TCP/IP 프로토콜을 이용함
일단 소켓과 웹소켓은 IP와 포트를 통한 통신을 한다는 점에서는 비슷하다. 또, 둘 다 양방향 통신을 한다는 비슷한 특징을 갖고 있기도 하다.
차이점은,
웹 소켓은 HTTP 레이어에서 작동하는 소켓으로 TCP/IP 소켓의 레이어가 다르다!
그러니 두 개념은 엄연히 다르다. 같다고 혼동하지 않아야한다.
웹소켓은 http에서 실시간 통신을 할 수 없다는 문제를 해결하기 위해 나온 기술이다!
웹소켓의 탄생배경을 알기 위해선 http의 특징에 대해 짚고 넘어가야한다.
http는 위와 같은 특징을 같고 있기 때문이다. 즉, 요청을 보내면 응답이 오는 단방향적 구조로 통신하기 때문에 TCP/IP 프로토콜을 사용하는 소켓처럼 계속 connection이 유지되는 실시간 통신을 할 수 없다. 이의 문제점을 해결하기 위해 나온것이 웹소켓 프로토콜이다.
웹소켓은 위와 같은 특징으로 실시간 통신을 할 수 있다. 웹소켓은 http를 대체할 수 있는 개념까진 아니고, 그저 웹에서 실시간 통신을 해야하는 상황에서 잘 쓰이는 프로토콜 중 하나라고 생각하면 된다. 위에서 언급했지만 이름부터 웹소켓이기에 http 레이어 위에서 작동한다.
일단 http는 tcp 위에서 만들어진다. 즉 소켓을 양끝단으로 하는 tcp 레이어 위에 존재하는 프로토콜이다. 아무리 'http vs socket'에 관하여 설명하는 글이 많다 할지라도 http가 tcp 위에 만들어졌으니 HTTP 또한 소켓 통신을 활용한 방식이라고 볼 수 있지 않느냐에 대한 물음에 대한 답은 '그렇다'일것 이다.
하지만 통신에는 계층이 있다. http와 소켓은 다른 프로토콜을 가지고 있고, 엄연히 다른 계층에서 동작한다. 일반적으로 사용하는 소켓통신(tcp통신)은 4계층에서 시작하여 패킷이 생성되고, http 통신의 경우 7계층에서부터 시작하여 패킷이 생성된다.
따라서 4계층 관점으로 본다면 이 둘은 연결지향적 통신이 되는 것이고,
7계층 관점에서 본다면 http는 비연결, socket 통신은 연결지향적이 되는 것이다.