웹소켓을 사용해서 프로젝트를 진행하려고 합니다.
처음 사용을 해보고 주로 실시간을 위해 사용을 한다고 알고 있습니다. (채팅, 주식 등)
그래서 정리를 한번하고 구현에 들어가려고 합니다.
HTTP는 기본적으로 장시간 실시간 Full Duplex 통신을 지원하기 위해 만들어진 프로토콜이 아닙니다.
그래서 브라우저 서버 간의 지속적인 양방향 통신을 위한 HTTP 솔루션은 대부분 폴링이나 단방향 트래픽만 처리하는 두 개의 개방형 HTTP 연결, 또는 둘 다로 구성됩니다.
Polling
폴링(polling)이란 하나의 장치(또는 프로그램)가 충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식을 말한다. 이 방식은 버스, 멀티포인트 형태와 같이 여러 개의 장치가 동일 회선을 사용하는 상황에서 주로 사용된다. 서버의 제어 장치(또는 프로그램)는 순차적으로 각 단말 장치(또는 프로그램)에 회선을 사용하기 원하는지를 물어본다. - [위키디피아]
가장 기본적인 데이터 처리방식으로, 특정 주기를 가지고 서버에 http request을 하는 방식입니다.
Polling방식은 언제 통신이 발생할 지 예측이 불가능하기 때문에 클라이언트가 평범한 http request를 일정한 주기로 서버에 요청하여 이벤트 내용을 전달받는 방식입니다.
가장 간단한 방법이지만 언제 통신이 발생할지 예측이 불가능하다는 점에서 클라이언트가 계속적으로 요청을 하기때문에 클라이언트가 많아지면 서버의 부담이 급증하게되며 실시간 통신이라고 부르기는 하지만 실시간 정도의 빠른 응답을 기대하기는 어렵습니다.
LongPolling
Polling과 비슷한 기법이나 실시간으로 데이터를 처리할 수 있는 방식입니다.
Long Polling은 클라이언트에서 서버로 일단 http request를 보내고 이 상태로 계속 기다리다가 서버에서 해당 클라이언트로 전달할 이벤트가 있다면 그 순간 response 메세지를 전달하며 연결이 종료된다. 해당 작업이 완료된 이후에는 클라이언트에서 곧바로 다시 http request를 보내 서버의 다음 이벤트를 기다리게 되는 작업 방식입니다.
일반 Polling과 비교했을때 Polling보다는 서버의 부담이 줄어든다는 장점이 있지만 클라이언트에게 동시에 많은 양의 메세지가 올 경우 Polling과 별 차이가 없게되며, 다수의 클라이언트에게 동시에 이벤트가 발생될 경우에는 곧바로 다수의 클라이언트가 서버로 접속을 시도하게 되면서 서버의 부담이 급증하게 됩니다.
Streaming
일반적인 TCP Connection과 비슷하며, 클라이언트와 서버간 연결 된 연결 통로로 데이터를 보내는 방식입니다.
Streaming은 Long Polling과 마찬가지로 처음에는 클라이언트에서 서버로 http request를 보냅니다.
서버에서 클라이언트로 이벤트를 전달할 때, 해당 요청을 끊지 않고 필요한 메세지만 보내기를 반복하는 방식입니다.
서버에서 메세지를 보내고 나서 다시 http request연결을 하지 않아도 되어 Long Polling에 비해 부담이 덜 합니다.
Long Polling과 Streaming 방식의 경우 서버에서 클라이언트로 메세지를 보낼수는 있지만 클라이언트에서 서버로 메세지를 보내는것에는 조금 어렵다는 문제점이 있습니다.
그래서 이렇게 약간의 문제가 있는 기술들 말고 정식으로 클라이언트와 서버간에 어려움 없이 양방향으로 통신이 가능하게 하기 위해서 HTML5 표준의 일부로 Web Socket이 만들어지게 되었습니다.
WebSocket?
HTTP와 달리 웹소켓은 전이중 통신을 사용한다.[2][3] 또, 웹소켓은 TCP 위에서 메시지 스트리밍을 가능케 한다. TCP 단독으로는 메시지의 상속 개념 없이 바이트 스트림을 다룬다. 웹소켓 이전에는 포트 80 전이중 통신은 코멧 채널을 사용하여 수행이 가능했다. 그러나 코멧 구현체는 사소한 것이 아니었으며 TCP 핸드셰이크와 HTTP 헤더 부하로 인해 작은 메시지에는 비효율적이다. 웹소켓 프로토콜은 웹의 보안 문제를 타협하지 않고 이 문제를 해결하는 것을 목적으로 한다. - [위키백과]
하나의 TCP 커넥션으로 Full Duplex 통신을 제공하는 프로토콜입니다.
- 데이터의 송수신을 동시에 처리
- 클라이언트와 서버가 원할 때 데이터를 서로 주고 받을 수 있다.
- (HTTP 통신은 Client의 req 와 server가 response해주는 단방향 통신)
실시간 네트워킹
- 1의 양방향 통신의 이점을 활용하여, 빠르게 실시간으로 데이터를 주고 받을 수 있다.
- web 환경에서 연속된 데이터를 빠르게 처리가 가능하다. EX) 주식, 채팅
- 여러 단말기에 빠르게 데이터를 교환이 가능하다.
'Study' 카테고리의 다른 글
Redis (1) | 2024.01.15 |
---|---|
JWT (JSON Web Tokens) (0) | 2024.01.10 |