HTTP VS 소켓 VS 웹소켓

정체는 김태현·2022년 11월 2일
1

항해99

목록 보기
38/38

소켓의 등장

네트워크 위에서 프로그램이 동작하기 쉽게 하기 위해서 우리는 OSI 7계층을 나누어 네트워크를 관리함

(-) 계층만 나누는 걸로는 한계가 있음. 왜? 계층별 각 프로토콜은 일종의 통신 규약일뿐, 프로토콜 구현을 위해 안에 들어갈 구체적인 구현부인 함수가 필요함.

(+) 소켓에서 이러한 함수들의 body를 제공함 → 별도의 구현없이 소켓을 사용할 수 있음
즉, 프로토콜의 세부적인 명세를 일일히 정의할 필요없이 소켓을 활용하면 됨.

소켓이란?

프로그램이 네트워크에서 데이터를 주고받을 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결부

일반적으로 TCP/IP 프로토콜을 이용함

  • TCP/IP 4계층에서 전송 계층 위에 놓임
  • 전송 계층 위에서 전송계층의 프로토콜 제어를 위한 코드를 제공
  • 즉, 소켓은 엔드포인트다. 통신의 양끝단!

소켓이 하는 일

  • 소프트웨어와 소프트웨어를 연결
  • 소프트웨어간 데이터 통신

TCP/IP소켓과 웹소켓의 차이

일단 소켓과 웹소켓은 IP와 포트를 통한 통신을 한다는 점에서는 비슷하다. 또, 둘 다 양방향 통신을 한다는 비슷한 특징을 갖고 있기도 하다.

차이점은,
웹 소켓은 HTTP 레이어에서 작동하는 소켓으로 TCP/IP 소켓의 레이어가 다르다!
그러니 두 개념은 엄연히 다르다. 같다고 혼동하지 않아야한다.

WebSocket

웹소켓은 http에서 실시간 통신을 할 수 없다는 문제를 해결하기 위해 나온 기술이다!

HTTP로는 실시간 통신 불가능

웹소켓의 탄생배경을 알기 위해선 http의 특징에 대해 짚고 넘어가야한다.

  • 비연결성 (단방향)
  • 매번 연결 맺고 끊는 과정의 비용
  • request-response 의 구조
  • 헤더의 비중이 너무 큼 → 실시간성으로 많은 데이터를 주고 받고자 하는 경우에는 매우 부담이 되는 요소 중 하나

http는 위와 같은 특징을 같고 있기 때문이다. 즉, 요청을 보내면 응답이 오는 단방향적 구조로 통신하기 때문에 TCP/IP 프로토콜을 사용하는 소켓처럼 계속 connection이 유지되는 실시간 통신을 할 수 없다. 이의 문제점을 해결하기 위해 나온것이 웹소켓 프로토콜이다.

웹소켓은 실시간 통신 가능

  • 연결지향 (양방향)
  • 한 번 연결 맺은 뒤 유지
  • 핸드쉐이크 과정에서는 헤더의 비중이 크지만, 한번 연결이 되면 간단한 메시지들만 오고감 → 굉장히 경제적임

웹소켓은 위와 같은 특징으로 실시간 통신을 할 수 있다. 웹소켓은 http를 대체할 수 있는 개념까진 아니고, 그저 웹에서 실시간 통신을 해야하는 상황에서 잘 쓰이는 프로토콜 중 하나라고 생각하면 된다. 위에서 언급했지만 이름부터 웹소켓이기에 http 레이어 위에서 작동한다.

http는 왜 단방향 통신일까?

일단 http는 tcp 위에서 만들어진다. 즉 소켓을 양끝단으로 하는 tcp 레이어 위에 존재하는 프로토콜이다. 아무리 'http vs socket'에 관하여 설명하는 글이 많다 할지라도 http가 tcp 위에 만들어졌으니 HTTP 또한 소켓 통신을 활용한 방식이라고 볼 수 있지 않느냐에 대한 물음에 대한 답은 '그렇다'일것 이다.

하지만 통신에는 계층이 있다. http와 소켓은 다른 프로토콜을 가지고 있고, 엄연히 다른 계층에서 동작한다. 일반적으로 사용하는 소켓통신(tcp통신)은 4계층에서 시작하여 패킷이 생성되고, http 통신의 경우 7계층에서부터 시작하여 패킷이 생성된다.

따라서 4계층 관점으로 본다면 이 둘은 연결지향적 통신이 되는 것이고,
7계층 관점에서 본다면 http는 비연결, socket 통신은 연결지향적이 되는 것이다.

결론

  • 웹소켓 이전의 방식은 주기적인 요청을 송신 하는 방식을 사용 (Polling)
    HTTP 불필요한 정보들을 계속 주기적으로 받는것이 효율적이지 못하여 웹소켓이 나왓다.
  • 소켓은 엔드포인트. 즉 IP와 포트 넘버를 활용하여 만들어진 통신의 양끝단이다(TCP/IP).
  • HTTP 또한 소켓통신을 활용한 방식이다.
  • 소켓과 웹소켓은 같은 말이 아니다.




출처
https://velog.io/@rhdmstj17/%EC%86%8C%EC%BC%93%EA%B3%BC-%EC%9B%B9%EC%86%8C%EC%BC%93-%ED%95%9C-%EB%B2%88%EC%97%90-%EC%A0%95%EB%A6%AC-2

https://bitcodic.tistory.com/151

https://bentist.tistory.com/35

profile
하나부터 열가지 다

0개의 댓글