๋ชฉ์ฐจ

1. WebSocket ๊ธฐ๋ณธ

๊ธฐ๋ณธ์ ์ธ ๋‹จ์ˆœ WebSocket ํ†ต์‹ ์„ Spring์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

2. Broker ํŒจํ„ด์˜ WebSocket

STOMP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜์˜ Broker ํŒจํ„ด์œผ๋กœ WebSocket ํ†ต์‹ ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3. ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” WebSocket

DefaultHandshakeHandler๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ํ†ต์‹ ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

์›๋ณธ ๋งํฌ

9๊ฑด์˜ ํ•ญ๋ชฉ

  • 2025๋…„ 3์›” 31์ผ

    DefaultHandshakeHandler ์ •์˜ WebSocket ์—ฐ๊ฒฐ ์‹œ Principal์„ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ธ๋“ค๋Ÿฌ์ž…๋‹ˆ๋‹ค. WebSocket ์„ธ์…˜๊ณผ ์‚ฌ์šฉ์ž๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋ฉฐ, SimpMessagingTemplate์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • 2025๋…„ 3์›” 31์ผ

    WebSocket ๊ธฐ๋ฐ˜์˜ STOMP ๋ฉ”์‹œ์ง•์—์„œ๋Š” ์‚ฌ์šฉ์ž ๊ตฌ๋ถ„ ๋ฐ ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WebSocket์—์„  ์‚ฌ์šฉ์ž๊ฐ€ WebSocket์— ์—ฐ๊ฒฐ๋  ๋•Œ Principal ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ณ , ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ID๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 2025๋…„ 3์›” 31์ผ

    1. WebSocket ๊ธฐ๋ณธ ๊ธฐ๋ณธ์ ์ธ ๋‹จ์ˆœ WebSocket ํ†ต์‹ ์„ Spring์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 2. Broker ํŒจํ„ด์˜ WebSocket STOMP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜์˜ Broker ํŒจํ„ด์œผ๋กœ WebSocket ํ†ต์‹ ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 3. ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” WebSocket DefaultHandshakeHandler๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ํ†ต์‹ ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

    • 2025๋…„ 3์›” 31์ผ

      WebSocketMessageBrokerConfigurer ์ •์˜ WebSocketMessageBrokerConfigurer๋Š” Spring์—์„œ STOMP ๊ธฐ๋ฐ˜์˜ WebSocket ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค์ •ํ•˜๋Š” ํด๋ž˜์Šค์ด๋ฉฐ, ๋‹จ์ˆœ WebSocket ์„ค์ •์„ ์œ„ํ•ด์„œ๋Š” WebSocketConfigurer๋กœ ์„ค์ •์„ ํ•ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • 2025๋…„ 3์›” 31์ผ

      STOMP ์ •์˜ STOMP(Simple Text Oriented Messaging Protocol)๋Š” ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ๋ฉ”์‹œ์ง• ํ”„๋กœํ† ์ฝœ๋กœ, WebSocket ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” Pub/Sub(๋ฐœํ–‰/๊ตฌ๋…) ๋ชจ๋ธ์„ ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.WebSocket์ด ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์œ„ํ•œ ์ €์ˆ˜์ค€ ํ”„๋กœํ† ์ฝœ์ด๋ผ๋ฉด, STOMP๋Š” ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ...

    • 2025๋…„ 3์›” 31์ผ

      ๊ธฐ๋ณธ์ ์ธ WebSocket์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ง€๋งŒ, ๋ฉ”์‹œ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ์ฒ˜๋ฆฌํ• ์ง€์— ๋Œ€ํ•œ ํ‘œ์ค€์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด WebSocket ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” STOMP์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ผ์ •ํ•œ ๊ทœ๊ฒฉ์„ ๊ฐ–์ถ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ™œ์šฉํ•œ Pub/Sub ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • 2025๋…„ 3์›” 31์ผ

      WebSocketConfigurer ์ •์˜ WebSocketConfigurer๋Š” Spring์—์„œ WebSocket ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด WebSocket ์—”๋“œํฌ์ธํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ , ํŠน์ • ํ•ธ๋“ค๋Ÿฌ์™€ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœ WebSocket์ด ํ•„์š”ํ•œ ์ƒํƒœ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ • ํด๋ž˜์Šค์ด๋ฉฐ, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค์ •์„ ์œ„ํ•ด์„œ๋Š” WebSocketMessageBrokerConfigurer๋กœ ์„ค์ •์„ ํ•ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • 2025๋…„ 3์›” 31์ผ

      WebSocketHandler ์ •์˜ Spring์—์„œ ์ œ๊ณตํ•˜๋Š” WebSocket์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ WebSocketHandler ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ TextWebSocketHandler์™€ BinaryWebSocketHandler ๋“ฑ์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. WebSocketHandler ์ข…๋ฅ˜ ํ•ธ๋“ค๋Ÿฌ ์ข…๋ฅ˜์‚ฌ์šฉ ๋ชฉ์ ์ง€์› ๋ฉ”์‹œ์ง€ ์œ ํ˜•WebSocketHandler๊ธฐ๋ณธ WebSocket ์ธํ„ฐํŽ˜์ด์Šคํ…์ŠคํŠธ + ๋ฐ”์ด๋„ˆ๋ฆฌTextWebSocketHandlerํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€ ์ „์šฉ (์ฑ„ํŒ…, JSON)TextMessageBinaryWebSocketHandlerํŒŒ์ผ, ์ด๋ฏธ์ง€, ์˜ค๋””์˜ค ๋“ฑ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ „์šฉBinaryMessagePerConnectionWebSocketHandler์„ธ์…˜๋ณ„ ๋…๋ฆฝ์ ์ธ ํ•ธ๋“ค๋Ÿฌ ์ƒ์„ฑํ…์ŠคํŠธ + ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฃผ์š” ๋ฉ”์„œ๋“œ ๋ฉ”์„œ๋“œ์„ค๋ช…afterConnectionEstablishedํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋˜์—ˆ์„ ๋•Œ ํ˜ธ์ถœhandleMessageํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒˆ์„ ๋•Œ ํ˜ธ์ถœhandleTransportErrorWebSocket ํ†ต์‹  ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ํ˜ธ์ถœafterConnectionClosedํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ–ˆ์„ ๋•Œ ํ˜ธ์ถœsupportsPartialMessages๋ถ€๋ถ„ ๋ฉ”์‹œ์ง€(ํ”„๋ ˆ์ž„ ๋ถ„ํ• )๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๊ตฌํ˜„ ์˜ˆ์‹œ ๊ฐ„๋‹จํžˆ TextWebSocketHandler๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

    • 2025๋…„ 3์›” 30์ผ

      ๊ธฐ๋ณธ์ ์ธ WebSocket ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ // build.gradle .. dependencies { .. implementation 'org.springframework.boot:spring-boot-starter-websocket' } ..