WebSockets๋Š” ํด๋ผ์ด์–ธํŠธ(์ผ๋ฐ˜์ ์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €)์™€ ์„œ๋ฒ„(์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„) ๊ฐ„์˜ ๋‹จ์ผ ์žฅ๊ธฐ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ „์ด์ค‘(์–‘๋ฐฉํ–ฅ) ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋„๋ฆฌ ์ฑ„ํƒ๋œ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. IETF(Internet Engineering Task Force)์—์„œ RFC 6455์˜ ์ž˜ ์ •์˜๋œ ํ‘œ์ค€์œผ๋กœ ์„ค์ •ํ•œ WebSocket์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๋ฐ ์ €์ง€์—ฐ ํ†ต์‹ ์„ ์œ„ํ•ด HTTP์™€ ๊ฐ™์€ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋Œ€์•ˆ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. WebSockets๋Š” ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํ˜ธ์ž‘์šฉ์„ฑ๊ณผ ์‘๋‹ต์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์„ธ๊ณ„์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

WebSocket ์—ฐ๊ฒฐ ๋ณด์•ˆ์€ ํŠนํžˆ ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ฐ€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. AppMaster TLS(์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์„ ์•”ํ˜ธํ™”ํ•˜๋Š” WSS(WebSocket Secure) ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ธก๋ฉด์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด WebSocket ์—ฐ๊ฒฐ์€ ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ฐ„์— ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์•ˆ ์ฑ„๋„์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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