Web Socket을 관리한다고 많이 들었는데 Web Socket이 정확히 뭐고..? Rest API 이런 것들과 어떤차이인지…잘 모르겠어서 미리미리 찾아보기
REpresentational State Transfer?
자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미함.
- HTTP URI 를 통해 자원(Resource)를 명시하고
- HTTP Method(POST, GET, PUT, DELETE, PATCH 등)을 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미 함.
⇒ 세 가지 마다 장단점이 있기에 경우에 따라 사용해야 함.장점
단점
한 번 뜨고 나면 그 결과가 변하지 않는다.
예를 들어 사이트에 들어갔을 때 아무 행위도 하지 않는다면 그대로 있다.
그런데 주식창을 생각해보면 아무것도 하지 않았는데, 계속해서 변동되는 주가가 보인다.
만일 이것을 REST API 로 만든다면 지속적으로 데이터를 요청하며 새로고침 하는 셈이 되는 것이다.
무한 반복으로 초당 10,000번 불러오게 만든다고 해도 어떤 주식의 값은 변하지 않을 수도 있는데 계속 불러오게 되는 자원 낭비가 일어나는 것이다.
사실 REST API 는 API 중 몇 가지 특성을 가진 특정 API의 종류일 뿐이다.
⇒ 현재 대부분 많이 쓰이는 방식이다.
그렇다면..?
한 번만 요청하고, 그 뒤로 정보가 변할 때마다 그냥 불러오도록 할 수는 없을까?
여기서 새로운 방식의 API 가 필요하게 된다.
Web Socket?
Web Socket은 웹 앱과 서버 간의 지속적인 연결을 제공하는 프로토콜
⇒ 이를 통해 Server 와 Client 간에 양방향 통신이 가능해진다. HTTP 와는 달리, WebSocket연결은 한 번 열린 후 계속 유지된다.
그렇기에, 실시간으로 진행되는 통신에서 적극적으로 사용하고 있다.
HTTP를 이용한 Request ↔ Response 통신 방식의 모델은 현재 가장 많이 쓰는 기술 중 하나이며 작업에 큰 문제는 없다.
하지만, 실시간으로 데이터를 주고 받는 데에는 한계점이 발생한다.
요청과 응답이 있다는 것은 클라이언트가 서버에게 요청하지 않는 이상 서버는 클라이언트에게 먼저 데이터를 보낼 수 없게 되기 때문에 클라이언트는 항상 새로운 데이터가 있는지 확인을 하기 위해서는 서버에 지속적으로 요청을 보낼 수밖에 없습니다.
⇒ 불필요한 트래픽을 증가 시키고, 서버의 비용이 증가될 뿐더러 요청과 응답 사이의 지연시간이 있기 때문에 실시간 통신의 효율성이 저하된다.
Web Socket은 HTML5에 등장 실시간 웹 애플리케이션을 위해 설계된 통신 프로토콜이며, TCP 를 기반으로 한다.
⇒ TCP를 기반으로 한 Web Socket은 신뢰성 있는 데이터 전송을 보장하며, 메시지 경계를 존중하고, 순서가 보장된 양방향 통신을 제공할 수 있다.
데이터는 패킷(packet)형태로 전달되며, 전송은 연결 중단과 추가 HTTP 요청 없이 양방향으로 이뤄진다.

1. Client 가 HTTP를 통해 Web Socket 연결 요청
⇒ “handshake”
서버가 연결 요청을 받아 Web Socket으로 Upgrade
⇒ TCP로 변경됨.
양방향 통신 시작
연결 유지 (연결이 끊이지 않도록 ping/pong message)
연결 종료
WebSocket 자체가 변경된 데이터를 가져오는거면…?
변경된 데이터가 많다면? Kafka도 필요하지 않을까?

⇒ 실제로 요런 아키텍처도 있더라…
⇒ 요런게 있긴하네용