websocket์ ๋ํด ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
์น์์ผ ํต์ ์ ์์
์น์์ผ ํต์ ์ ์์์ HTTP request ์ ๋๋ค.
์ด๋ HTTP request ํค๋์๋ Connection : "Upgrade", Upgrade : "websocket"์ ํฌํจํ๊ณ ์์ต๋๋ค.
GET /spring-websocket-portfolio/portfolio HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: Uc9l9TMkWGbHFD2qnFHltg==
Sec-WebSocket-Protocol: v10.stomp, v11.stomp
Sec-WebSocket-Version: 13
Origin: http://localhost:8080
์น์์ผ ์๋ฒ๊ฐ web server ๋ค์์ ์คํ๋๋ค๋ฉด?
๐ฝ์น์์ผ ์๋ฒ๊ฐ nginx์ ๊ฐ์ web server ๋ค์์ ์คํ๋๊ณ ์๋ค๋ฉด ์น์์ผ์ upgrade request๋ฅผ ์น์์ผ ์๋ฒ๋ก ์ ์กํ๊ธฐ ์ํ ์ค์ ์ด ํ์ํฉ๋๋ค.
nginx์ ๊ฒฝ์ฐ์ ์๋ ์ฒ๋ผ Upgrade์ Connection ํค๋๋ฅผ ๋ฐ๋์ ๋ช ์ํด์ผ ํฉ๋๋ค.
$vi /etc/nginx/sites-available/proxy.conf
# ์๋ ๋ถ๋ถ ์ถ๊ฐ
location /api/stomp {
proxy_pass http://00.00.00.000:8080; # WebSocket Server
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
Connection๊ณผ Upgrade๋ฅผ ์ค์ ํด์ฃผ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
HTTP vs WebSockt
- ์น์์ผ์ HTTP์ ๋ค๋ฅด๊ฒ ์ฒ์ ์ฐ๊ฒฐ์ ์ํ ํ๋์ URL๋ง ์ฌ์ฉํฉ๋๋ค.
- ์น์์ผ์ HTTP์ ๋ค๋ฅด๊ฒ ์ ์ก๋ ๋ฉ์์ง์ ํ์์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํ์์ ์๋ก ์ฝ์ํด์ ํต์ ํด์ผ ํฉ๋๋ค.
- STOMP๋ฅผ ์ฌ์ฉํด์ ๋ฉ์์ง ํ์์ด ์๋ค๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
- STOMP๋ ์ปค์คํ ํค๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ปค์คํ ํค๋๋ฅผ ์ฌ์ฉํด์ JWTํ ํฐ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๊ตฌํ๋ฐฉ๋ฒ
1. WebSocketHandler
WebSocketHandler๋ฅผ ๊ตฌํํด์ ์น์์ผ ์๋ฒ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ด๋ AbstractWebSocketHandler๋ฅผ extendsํ TextWebsocketHandler ๋๋ BinaryWebSocketHandler๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
public class MyHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
// ...
}
}
์ด๋ AbstractWebSocketHandler๋ WebSocketHandler๋ฅผ implements ํ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
2. WebSocketConfigurer
WebSocketConfigurer๋ฅผ ์์ฑํด์ WebSocketHandler๋ฅผ ๋ฑ๋กํ๊ณ WebSocketRequest๋ฅผ ํธ๋ค๋ง ํ๊ธฐ ์ํ ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ์์ฑํฉ๋๋ค.
@Configuration
@EnableWebSocket
public class WebSocketConfiguration implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry
.addHandler(echoWebSocketHandler(), "/ws")
.setAllowedOrigins("*");
}
@Bean
public WebSocketHandler echoWebSocketHandler() {
return new WebSocketHandler();
}
}
์์ฑ์ค..
์ฐธ๊ณ ์๋ฃ
https://docs.spring.io/spring-framework/reference/web/websocket.html
WebSockets :: Spring Framework
The WebSocket protocol, RFC 6455, provides a standardized way to establish a full-duplex, two-way communication channel between client and server over a single TCP connection. It is a different TCP protocol from HTTP but is designed to work over HTTP, usin
docs.spring.io
https://velog.io/@hanblueblue/%EB%B2%88%EC%97%AD-Spring-4-Spring-WebSocket
'๐๋ฐฑ์๋ : BackEnd' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ก๊น (0) | 2024.06.08 |
---|---|
๋์์ฑ ์ฒ๋ฆฌ (0) | 2024.04.08 |
์คํ๋ง ์ํ๋ฆฌํฐ (0) | 2024.02.21 |
REST API (1) | 2024.01.12 |
MyBatis (1) | 2024.01.06 |