일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- AWS
- docker-compose
- 페이지이동경고
- Dominic
- docker
- gcOverhead
- Intellij
- rsa충돌
- byungjoo kim
- 커리어스킬
- handshake
- java
- GIT
- nginx
- 토이프로젝트
- zsh
- 김병주
- socjs
- remote
- SSH
- failed upgrade header
- omz
- Spring
- WebSocket
- alpine
- beforeunload
- KPT
- MSA
- iTerm2
- python
- Today
- Total
Eyeeshot BloG
Spring WebSocket 본문
개요
HTTP 통신의 기본적인 동작 방식은 Web Browser 에서 Request를 보내면 Server는 Response를 준다.
하지만 양방향 통신을 동작해야 하는 상황이 있다. 즉 Server에서 Client로 특정 동작을 알려야 하는상황이다.
예로 instargram에 접속되어있는 상황에서 새글이 올라오면 새글로 가기라는 버튼이 뜨는 경우가 이와같은 상황이다.
WebSocket이 있기 전에는 이를 Poling이나 Long poling 등의 방식으로 해결했었다. 하지만 WebSocket의 등장으로 Server-Client 간의 실시간 통신이 가능하게 되었다.
WebSocket이란 HTTP 환경에서 전이중 통신(full duplex, 2-way communication)을 지원하기 위한 프로토콜로, RFC 6455에 정의되어 있다. HTTP 프로토콜에서 Handshaking을 완료한 후, HTTP로 동작을 하지만, HTTP와는 다른 방식으로 통신을 한다.
유의사항
HTTP에서 동작하나 HTTP와는 많이 상이하다.
- REST한 방식의 HTTP 통신에서는 많은 URI를 통해 application이 설계된다.
- Websocket은 하나의 URL을 통해 Connction이 맺어지고, 후에는 해당 Connection으로만 통신한다.
Handshake가 완료되고 Connetion을 유지한다.
- HTTP 통신은 요청- 응답이 완료되면 Connection을 close한다. 떄문에 이론상 하나의 Server가 Port 수의 한계(n<65535)를 넘는 client의 요청을 처리할수 있다. 하지만 WebSocket 은 Connection을 유지하고 있기때문에 가용 Port 수만큼만 통신할수 있다.
Spring Reference 을 참조하면, 자주 + 많은 양의 + 지연이 짧아야 하는 통신을 할 수록 WebSocket이 적합하다고 설명하고 있다. 주로 채팅이나 게임이 이러한 요구 사항을 가질 것이다. 단순한 알림 성격의 뉴스 피드 같은 정보에는 polling이나 streaming 방식이 더욱 단순하고 효율적인 솔루션이 될 수 있다.
Spring Websocket
WebSocket은 지금까지 사용되고 있던 Ajax에 비하여 매우 훌륭한 방법입니다. 그렇지만, WebSocket이 Spring 4.0에서나 지원이 된 이유는 약간 발전이 너무나도 느렸습니다. WebSocket을 지원하는 Browser의 종류는 다음과 같습니다. WebSocket의 경우, IE 10이상에서 지원하고 있기 때문에, 현실상 지원하기 힘듭니다. 이 문제를 해결하기 위해서, socket.io와 같은 websocket을 지원하지 않는 browser에서 websocket과 같이 접근하기 위한 방법들이 계속해서 나왔는데, SockJS도 그 방법들중 하나입니다.
SockJS
- 기본적으로 WebSocket을 이용하고 있고, interface가 동일합니다. 다만 WebSockeet과는 다음과 같은 차이점을 가지고 있습니다.
- schema가 ws가 아닌 http
- WebSocket과 같이 Browser에서 제공되는 library가 아닌, 외부 library 사용
- IE 6이상부터 지원합니다.
- Server 측에서도 websocket이 아닌 SockJS server side library를 사용
STOMP
- STOMP는 text 지향의 message protocol입니다. websocket을 이용한 message handling을 보다 더 쉽게 만들어줍니다. WebSocket이나 SockJS의 경우 onmessage function에서 받는 메세지를 모두 handling해야지 되는 단점을 가지고 있습니다. 이러한 단점을 구독(subscription)과 사용자 구독(user)를 통해서 처리할 수 있다는 장점을 가지고 있습니다.
'Tech' 카테고리의 다른 글
vi 에서 붙여넣기 했을때 탭 깨지는 현상 해결방법 (0) | 2021.01.11 |
---|---|
SSH 접속시 RSA 공유키 충돌 해결방법 (0) | 2020.12.03 |
ELB Websocket 설정 문제 (0) | 2020.12.03 |
Sping boot + websocket Hands On (0) | 2020.12.03 |
Mac OS 에 기본 설정 하기 (0) | 2020.04.12 |