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

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

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

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

AppMaster ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— Websocket์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ํด๋ผ์ด์–ธํŠธ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” Websocket endpoints ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ endpoints ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ „ํ†ต์ ์ธ ์š”์ฒญ-์‘๋‹ต ์ฃผ๊ธฐ๋‚˜ ํด๋ง ์—†์ด๋„ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ฐ์€ ์‹œ๊ฐ์  BP(๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค) ๋””์ž์ด๋„ˆ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ Websocket ๋ฉ”์‹œ์ง€์™€ ๊ด€๋ จ๋œ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ํ•˜๊ณ  ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

๊ฒฐ๋ก ์ ์œผ๋กœ ์›น์†Œ์ผ“์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ํ˜„๋Œ€ ์›น์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ์— ์—†์–ด์„œ๋Š” ์•ˆ ๋  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์กด HTTP ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ์— ๋น„ํ•ด ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ์ด์ ์„ ์ œ๊ณตํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ํšจ์œจ์ ์ธ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ์  BP ๋””์ž์ด๋„ˆ, Golang ๋ฐฑ์—”๋“œ ์ƒ์„ฑ ๋ฐ ํฌ๊ด„์ ์ธ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE)์„ ๊ฐ–์ถ˜ AppMaster ์˜ no-code ํ”Œ๋žซํผ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›น์†Œ์ผ“์˜ ๋ชจ๋“  ์ž ์žฌ๋ ฅ์„ ํ™œ์šฉํ•˜์—ฌ ์›น, ๋ชจ๋ฐ”์ผ ๋ฐ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํšจ๊ณผ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  ๋””์ง€ํ„ธ ์„ธ๊ณ„์˜ ์š”๊ตฌ ์‚ฌํ•ญ.