2023๋…„ 8์›” 15์ผยท3๋ถ„ ์ฝ๊ธฐ

์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜: WebSockets ๋ฐ SignalR

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํšจ์œจ์ ์ด๊ณ  ์›ํ™œํ•œ ํ†ต์‹ ์„ ์œ„ํ•ด WebSocket๊ณผ SignalR ๊ฐ„์˜ ์‹ฌ์ธต ๋น„๊ต ๋ฐ โ€‹โ€‹ํ‰๊ฐ€๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์˜ ์„ธ๊ณ„๋ฅผ ํƒ์ƒ‰ํ•˜์„ธ์š”.

์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜: WebSockets ๋ฐ SignalR

์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์€ ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ์ปดํ“จํŒ… ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๊ธˆ์œต, ๋ฌผ๋ฅ˜, ๊ฒŒ์ž„, ํ—ฌ์Šค์ผ€์–ด ๋“ฑ ๋‹ค์–‘ํ•œ ์˜์—ญ์˜ ์—…๋ฌด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์™ธ๋ถ€ ์ด๋ฒคํŠธ์— ์‹œ๊ธฐ์ ์ ˆํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์›ํ™œํ•œ ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ตœ์‹  ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๊ณผ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœํ† ์ฝœ ์ค‘ ์ผ๋ถ€์—๋Š” ๋‹ค์–‘ํ•œ ์„ฑ๋Šฅ ์ˆ˜์ค€, ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ ๊ตฌํ˜„ ์šฉ์ด์„ฑ์„ ์ œ๊ณตํ•˜๋Š” WebSockets , SignalR, SSE(Server-Sent Events) ๋ฐ Long Polling์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์— ์ ํ•ฉํ•œ ๊ธฐ์ˆ ์„ ์„ ํƒํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํšจ์œจ์„ฑ๊ณผ ์‘๋‹ต์„ฑ์— ์ƒ๋‹นํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์— ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ์†”๋ฃจ์…˜์ธ WebSockets ๋ฐ SignalR์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ ๋ฐฉ์‹, ์ด์ , ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•œ ์†”๋ฃจ์…˜์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

WebSocket ์ดํ•ด

WebSocket์€ ๋‹จ์ผ ์˜๊ตฌ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ง„์ •ํ•œ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ์š”์ฒญ-์‘๋‹ต ๋ชจ๋ธ๊ณผ ๋‹ฌ๋ฆฌ WebSocket์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์งง์€ ์ „์ด์ค‘ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์ง€์†์ ์ธ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. WebSocket ํ”„๋กœํ† ์ฝœ์€ HTTP ๋ฐ HTTPS(๊ฐ๊ฐ ํฌํŠธ 80 ๋ฐ 443)์™€ ๋™์ผํ•œ ํฌํŠธ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ๊ธฐ์กด ์›น ์ธํ”„๋ผ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

WebSocket์€ ์ดˆ๊ธฐ HTTP ํ•ธ๋“œ์…ฐ์ดํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•œ ๋‹ค์Œ WebSocket ํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ์„ค์ •๋˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋™์‹œ์— ํ๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค๊ณ  ์˜จ๋ผ์ธ ์ฑ„ํŒ…, ์•Œ๋ฆผ ๋ฐ ๋ผ์ด๋ธŒ ์—…๋ฐ์ดํŠธ์™€ ๊ฐ™์€ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. WebSocket ์‚ฌ์šฉ์˜ ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์งง์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„: WebSocket์€ ์ง€์†์ ์ธ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•˜์—ฌ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ณ  ๋‹ซ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์—ฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.
  • ์ „์ด์ค‘ ํ†ต์‹ : ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ํ˜ธํ™˜์„ฑ: WebSocket์€ HTTP ๋ฐ HTTPS ํฌํŠธ๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•˜๋ฏ€๋กœ ๊ธฐ์กด ์›น ์ธํ”„๋ผ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ์„ฑ: WebSocket ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐ ์ˆ˜ํ‰ ํ™•์žฅ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ WebSocket์—๋Š” ์ž ์žฌ์ ์ธ ๋‹จ์ ์ด ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WebSocket ์‚ฌ์šฉ์˜ ๋ช‡ ๊ฐ€์ง€ ๋‹จ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ณต์žก์„ฑ: ์—ฐ๊ฒฐ ์„ค์ •, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ๋ฉ”์‹œ์ง€ ํ”„๋ ˆ์ด๋ฐ์„ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ WebSocket ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ SignalR๊ณผ ๊ฐ™์€ ์ƒ์œ„ ์ˆ˜์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ œํ•œ๋œ ์ง€์›: ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ WebSocket ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜์ง€๋งŒ ์ผ๋ถ€ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ € ๋ฐ ํ”Œ๋žซํผ์€ ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ๋„๋‹ฌ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SignalR ์‹œ์ž‘ํ•˜๊ธฐ

SignalR์€ ์‹ค์‹œ๊ฐ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค Microsoft ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ถ”๊ฐ€ํ•˜์—ฌ WebSocket, Server-Sent Events ๋ฐ Long Polling๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ „์†ก ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SignalR์€ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์ƒ์˜ ํ†ต์‹  ๋ฐฉ๋ฒ•์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ตœ์ ์˜ ์„ฑ๋Šฅ๊ณผ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๋Ÿฐ

SignalR์€ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด API๋ฅผ ์ œ๊ณตํ•˜์—ฌ .NET์˜ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ ํ‘œํ˜„์„ ๊ด€๋ฆฌํ•˜๊ณ , ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•˜๋Š” ์„œ๋ฒ„ ์ธก ํ—ˆ๋ธŒ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SignalR์šฉ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” JavaScript, .NET ๋ฐ Java๋ฅผ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SignalR ์‚ฌ์šฉ์˜ ๋ช‡ ๊ฐ€์ง€ ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋‹จ์ˆœ์„ฑ: SignalR์€ ๊ณ ๊ธ‰ ์ถ”์ƒํ™” ๋ฐ API๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ WebSocket์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋” ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋™ ํ”„๋กœํ† ์ฝœ ์„ ํƒ: SignalR์€ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์ƒ์˜ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•˜์—ฌ ๊ธฐ๋ณธ ๊ธฐ์ˆ ์— ๊ด€๊ณ„์—†์ด ์›ํ™œํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด‘๋ฒ”์œ„ํ•œ ํ”Œ๋žซํผ ์ง€์›: SignalR์—๋Š” JavaScript, .NET ๋ฐ Java๋ฅผ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์„ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๊ณ  ๋‹ค์žฌ๋‹ค๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ: SignalR์€ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์—์„œ ํ™•์žฅ์„ ์ง€์›ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ Redis, Azure Service Bus ๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐฑํ”Œ๋ ˆ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์ œ๊ณต ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  SignalR์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์ž ์žฌ์ ์ธ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • .NET์— ๋Œ€ํ•œ ์ข…์†์„ฑ: SignalR์€ .NET ๊ธฐ์ˆ ์— ์˜์กดํ•˜๋ฏ€๋กœ ํ”Œ๋žซํผ์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์–ธ์–ด ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ: SignalR์€ ์ง๊ด€์ ์ธ API์™€ ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ WebSocket์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ž ์žฌ์ ์œผ๋กœ ์„ฑ๋Šฅ๊ณผ ๋Œ€๊ธฐ ์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SignalR๋ณด๋‹ค WebSocket์„ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

WebSocket๊ณผ SignalR์€ ๋ชจ๋‘ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ์ˆ ์ด์ง€๋งŒ ํ•˜๋‚˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ๋ณด๋‹ค ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” WebSocket์ด SignalR์— ๋น„ํ•ด ๋” ๋‚˜์€ ์˜ต์…˜์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ €์ˆ˜์ค€ ์ œ์–ด

WebSocket์€ SignalR์— ๋น„ํ•ด ์—ฐ๊ฒฐ์„ ๋” ์ง์ ‘์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SignalR์€ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋†’์€ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ํ•„์š”ํ•œ ์„ธ๋ถ„์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ์ƒํƒœ ๊ด€๋ฆฌ, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ด๋ฐ ์‚ฌ์šฉ์ž ์ง€์ •์„ ํฌํ•จํ•˜์—ฌ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ํ•˜์œ„ ์ˆ˜์ค€ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ WebSocket์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋‹จ์ถ•

WebSocket ์—ฐ๊ฒฐ์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์ง์ ‘์ ์ด๊ณ  ์ง€์†์ ์ธ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ์ฑ„๋„์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— SignalR๋ณด๋‹ค ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์งง์Šต๋‹ˆ๋‹ค. SignalR์€ ์ž์ฒด์ ์ธ ํŽธ์˜๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ธด ํด๋ง ๋ฐ ์„œ๋ฒ„ ์ „์†ก ์ด๋ฒคํŠธ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ธํ•ด ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ

SignalR์€ .NET ๊ธฐ๋ฐ˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ํƒ์›”ํ•œ ์†”๋ฃจ์…˜์ด์ง€๋งŒ Windows๊ฐ€ ์•„๋‹Œ ํ™˜๊ฒฝ๊ณผ ๊ฐ™์ด SignalR์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์™„์ „ํžˆ ์ง€์›๋˜๋Š” ํ”Œ๋žซํผ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์€ ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ WebSocket์€ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ๊ณผ ํ™˜๊ฒฝ์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ณด๋‹ค ๋ณดํŽธ์ ์ธ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ข…์†์„ฑ ๋ฐฉ์ง€

ํ”„๋กœ์ ํŠธ์˜ ์™ธ๋ถ€ ์ข…์†์„ฑ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด WebSocket์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์˜ต์…˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WebSocket์€ HTML5 ํ‘œ์ค€์˜ ํ•„์ˆ˜ ๋ถ€๋ถ„์ด๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ € ๋ฐ ์„œ๋ฒ„ ์ธก ๊ธฐ์ˆ ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ SignalR์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”„๋กœ์ ํŠธ์— ํ†ตํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SignalR ๋Œ€ WebSockets: ์„ฑ๋Šฅ ํ‰๊ฐ€

์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ WebSocket๊ณผ SignalR์˜ ์ฐจ์ด์ ์„ ๋” ์ž˜ ์ดํ•ดํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง€์—ฐ ์‹œ๊ฐ„

WebSocket์€ ์ผ๋ฐ˜์ ์œผ๋กœ SignalR์— ๋น„ํ•ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์งง์Šต๋‹ˆ๋‹ค. ์ด์ „์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด๋Š” WebSocket์ด ์ œ๊ณตํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ง์ ‘์ ์ด๊ณ  ์–‘๋ฐฉํ–ฅ์ด๋ฉฐ ์ง€์†์ ์ธ ์—ฐ๊ฒฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. SignalR์€ ๋‹ค์–‘ํ•œ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜์ง€๋งŒ ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์— ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋Ÿ‰

WebSocket ์—ฐ๊ฒฐ์€ ๋ฉ”์‹œ์ง€๋‹น ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ SignalR์— ๋น„ํ•ด ์ดˆ๋‹น ๋” ๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ด์ ์€ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋Ÿ‰์˜ ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๋Œ€๋ถ€๋ถ„์˜ ์‹ค์ œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์› ์†Œ๋น„

๋ฆฌ์†Œ์Šค ์†Œ๋น„๋Š” WebSocket๊ณผ SignalR์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค. WebSocket ์—ฐ๊ฒฐ์€ ๊ฐ€๋ฒผ์šด ํ”„๋กœํ† ์ฝœ๋กœ ์ธํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋Š” ๋ฐ˜๋ฉด SignalR์€ ์—ฌ๋Ÿฌ ์ „์†ก ๋ฐ ๊ธฐ๋Šฅ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌ์†Œ์Šค ์†Œ๋น„์˜ ์‹ค์ œ ์ฐจ์ด๋Š” ํŠน์ • ๊ตฌํ˜„ ๋ฐ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์žฅ์„ฑ

WebSocket๊ณผ SignalR์€ ๋ชจ๋‘ ์ฆ๊ฐ€ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅ์„ ์ง€์›ํ•˜์ง€๋งŒ ์ด๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. WebSocket์€ ์ ์ ˆํ•œ ํ™•์žฅ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์ˆ˜ํ‰ ํ™•์žฅ ๋ฐ ๊ธฐํƒ€ ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด SignalR์€ ๋ฉ”์‹œ์ง€ ๋ฒ„์Šค ๋ฐ ๋ฐฑํ”Œ๋ ˆ์ธ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๊ฑธ์ณ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ์ง€์› ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

WebSocket ๋ฐ SignalR์„ AppMaster ์™€ ํ†ตํ•ฉ

๋ฐฑ์—”๋“œ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์„ค๊ณ„
PostgreSQL ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ณ , API๋ฅผ ์„ค๊ณ„ํ•˜๋ฉฐ, ์ง€์† ์—ฐ๊ฒฐ ์ „๋žต์„ ๊ณ ๋ คํ•˜์„ธ์š”.
๋ฐฑ์—”๋“œ ์ƒ์„ฑ

์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ์ฝ”๋“œ ์—†๋Š” ํ”Œ๋žซํผ์ธ AppMaster ๋Š” WebSocket ๋ฐ SignalR ๊ธฐ์ˆ ๊ณผ์˜ ์›ํ™œํ•œ ํ†ตํ•ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ด‘๋ฒ”์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ „๋ฌธ ์ง€์‹ ์—†์ด๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ธฐ๋Šฅ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AppMaster ์˜ ์‹œ๊ฐ์ ์ธ ๋Œ์–ด์„œ ๋†“๊ธฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , REST API ๋ฐ WSS endpoints ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ AppMaster ์˜ ํ”Œ๋žซํผ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•˜์—ฌ ์†”๋ฃจ์…˜์ด ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์„ฑ๋Šฅ์— ์ตœ์ ํ™”๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. WebSocket ๋ฐ SignalR์„ AppMaster ์™€ ํ†ตํ•ฉํ•˜๋ฉด ๊ฐ•๋ ฅํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹ค์‹œ๊ฐ„ ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŒ€์€ ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ์„œ๋ฒ„ ์ธํ”„๋ผ ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ํš์ผ์ ์ธ ์ž‘์—…์— ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋Š” ๋Œ€์‹  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ๊ตญ์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž์ด์ž ์—”์ง€๋‹ˆ์–ด๋ง ๊ด€๋ฆฌ์ž์ธ Christopher Baus๊ฐ€ ํ˜„๋ช…ํ•˜๊ฒŒ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ "์†Œํ”„ํŠธ์›จ์–ด๋Š” ๋ฐฉ๋ฒ•๋ก , ์–ธ์–ด ๋˜๋Š” ์šด์˜ ์ฒด์ œ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค." ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ WebSockets ๋˜๋Š” SignalR์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด AppMaster ๋Œ€๊ทœ๋ชจ ์‹ค์‹œ๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๊ณ„, ๊ตฌ์ถ• ๋ฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ no-code ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋ฌด๋ฃŒ ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  AppMaster ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ํ†ตํ•ฉ์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฐ ํ”„๋กœ์„ธ์Šค ๋ฐ์ดํ„ฐ์— ์‘๋‹ตํ•˜๋„๋ก ์„ค๊ณ„๋œ ์ปดํ“จํŒ… ์‹œ์Šคํ…œ์œผ๋กœ, ์™ธ๋ถ€ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์‹œ๊ธฐ์ ์ ˆํ•˜๊ณ  ์ •ํ™•ํ•œ ์‘๋‹ต์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

WebSocket์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

WebSocket์€ ๋‹จ์ผ ์˜๊ตฌ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ง„์ •ํ•œ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

SignalR์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

SignalR์€ ์‹ค์‹œ๊ฐ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  WebSockets, Server-Sent Events ๋ฐ Long Polling๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์–ธ์ œ SignalR ๋Œ€์‹  WebSocket์„ ์„ ํƒํ•ด์•ผ ํ•˜๋‚˜์š”?

์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ง์ ‘์ ์ด๊ณ  ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์งง๊ฑฐ๋‚˜ SignalR์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ”Œ๋žซํผ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ SignalR ๋Œ€์‹  WebSockets๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.

WebSocket๊ณผ SignalR์˜ ์„ฑ๋Šฅ ๋น„๊ต๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

WebSocket์€ ์ง์ ‘ ์—ฐ๊ฒฐ๋กœ ์ธํ•ด ๋Œ€๊ธฐ ์‹œ๊ฐ„๊ณผ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. SignalR์€ ๋” ํฐ ํŽธ์˜์„ฑ๊ณผ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ ์ˆœ์ „ํžˆ WebSocket ๊ธฐ๋ฐ˜ ๊ตฌํ˜„์— ๋น„ํ•ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์•ฝ๊ฐ„ ๋” ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AppMaster ํ”Œ๋žซํผ์—์„œ WebSockets์™€ SignalR์„ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์˜ˆ, AppMaster ์˜ no-code ํ”Œ๋žซํผ์€ ๋งž์ถคํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ WebSocket ๋ฐ SignalR๊ณผ์˜ ํ†ตํ•ฉ์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๋Œ€ํ™”ํ˜• ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์•ฑ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WebSocket๊ณผ SignalR ๊ฐ„์— ๋ฆฌ์†Œ์Šค ์†Œ๋น„์— ์ƒ๋‹นํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๋‚˜์š”?

WebSocket์€ ๊ฐ€๋ฒผ์šด ํ”„๋กœํ† ์ฝœ๋กœ ์ธํ•ด ๋ฆฌ์†Œ์Šค ์†Œ๋น„๊ฐ€ ์ ์€ ๊ฒฝํ–ฅ์ด ์žˆ๋Š” ๋ฐ˜๋ฉด SignalR์€ ์—ฌ๋Ÿฌ ํ”„๋กœํ† ์ฝœ ๋ฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์— ์˜์กดํ•˜๋ฏ€๋กœ ๊ตฌํ˜„๋œ ๊ตฌ์„ฑ ์š”์†Œ์— ๋”ฐ๋ผ ๋ฆฌ์†Œ์Šค ์†Œ๋น„๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WebSocket ์‚ฌ์šฉ์—์„œ SignalR๋กœ ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

WebSocket๊ณผ SignalR ๋ชจ๋‘ ํ™•์žฅ์„ ์ง€์›ํ•˜๋‚˜์š”?

์˜ˆ, WebSocket๊ณผ SignalR์€ ๋ชจ๋‘ ํ™•์žฅ์„ ์ง€์›ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ ์ ‘๊ทผ ๋ฐฉ์‹์€ ํŠน์ • ๊ธฐ์ˆ ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ™•์žฅ WebSocket์—๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐ ์ˆ˜ํ‰ ํ™•์žฅ๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ SignalR์€ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๊ฑธ์ณ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๋กœ AppMaster๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.
์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ ์ ˆํ•œ ๊ตฌ๋…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค
์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜: WebSockets ๋ฐ SignalR | AppMaster