๊ฐœ๋ฐœ ์ง€์‹/WEB ์ง€์‹

[WEB] ๐ŸŒ ์›น ์†Œ์ผ“ (Socket) ์ •๋ฆฌ (์—ญ์‚ฌ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ)

์ธํŒŒ_ 2021. 10. 20. 21:57

์›น์†Œ์ผ“-์ •๋ฆฌ

โ€‹์›น ๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ํ†ต์‹ ์€ ๋ชจ๋‘ HTTP ํ”„๋กœํ† ์ฝœ๋งŒ ์ด์šฉํ•ด์„œ ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์›น ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ์ฑ„ํŒ…, ๊ฒŒ์ž„, ์ฃผ์‹ ์ฐจํŠธ ๋“ฑ์˜ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค ํ•˜๋ฉด HTTP ํ”„๋กœํ† ์ฝœ์ด ์•„๋‹Œ ์›น์†Œ์ผ“ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ”ํžˆ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


HTTP์˜ ํ•œ๊ณ„

 

[๋ฐฑ์—”๋“œ ๋กœ๋“œ๋งต] ๐ŸŒ HTTP๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

HTTP (Hyper Text Transfer Protocol) HTTP๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ†ต์‹  ๊ทœ์•ฝ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. โ€‹ TCP/IP(Transmission Control Protocol / Internet Protocol)์„ ์ด์šฉํ•˜๋ฉฐ, ์‚ฌ..

inpa.tistory.com

HTTP๋Š” ์•ฝ์†์ž…๋‹ˆ๋‹ค. ์•ฝ์†์„ ์˜์–ด๋กœ ํ‘œํ˜„ํ•˜๋ฉด, ํ”„๋กœํ† ์ฝœ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

HTTP๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์ด์ „ ์„ธ๋Œ€์—์„œ ํ†ต์‹ ํ•œ๋‹ค ํ•จ์€, ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ ๋”ฑ๋”ฑํ•œ ํ…์ŠคํŠธ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด์—ˆ์–ด์š”.

์›น์†Œ์ผ“-์ •๋ฆฌ

๊ทธ๋Ÿฐ๋ฐ HTTP๊ฐ€ ๋“ฑ์žฅํ•˜๋‹ˆ, ์‹œ๊ฐ์ ์œผ๋กœ๋‚˜ ์ •๋ณด๋Ÿ‰ ์ฐจ์›์—์„œ ์—„์ฒญ๋‚˜๊ฒŒ ๋ฉ‹์ง„ ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ HTTP์—๋Š” ๋ฌด์„œ์šด ๋Œ€์ „์ œ๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ URL์„ ์š”์ฒญํ•  ๋•Œ์—๋งŒ! ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๊บผ๋‚ด์ฃผ๋Š” ์‹์ด๋ผ๋Š” ๊ฒ๋‹ˆ๋‹ค.

 

๊ฑฐ๊พธ๋กœ ๋งํ•˜์ž๋ฉด, ์‚ฌ์šฉ์ž๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ๋ฐ›์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ, ๋ฐ˜๋“œ์‹œ ์ƒˆ๋กœ์šด URL์„ ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ง๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

โ€‹

์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณต๊ณต๊ธฐ๊ด€ ์›น์‚ฌ์ดํŠธ์˜ ํšŒ์›๊ฐ€์ž… ๊ณผ์ •์„ ๋– ์˜ฌ๋ ค๋ณด์„ธ์š”.

์›น์†Œ์ผ“-์ •๋ฆฌ

์ฆ‰, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น์„œ๋ฒ„์— ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์š”์ฒญํ•˜๋ ค๋ฉด, ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•ด์•ผ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๊ทธ๋ ‡๊ฒŒ ์›นํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด๋ฒ„๋ฆฌ๋ฉด ์‹œ๊ฐ์ ์œผ๋กœ ๋„ˆ๋ฌด ๋ปฃ๋ปฃํ•˜๊ณ  ๊ตฌ๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ผผ์ˆ˜๋“ค์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.

์•กํ‹ฐ๋ธŒ์—‘์Šค๋„ ๊ทธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์›น์†Œ์ผ“-์ •๋ฆฌ


AJAX ๋“ฑ์žฅ

 

[JS][AJAX] ๐Ÿ“š AJAX ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ

HTTP์˜ ํ•œ๊ณ„ HTTP์˜ ๋’ค ๋‘ ๊ธ€์ž Transfer Protocol. HTTP์˜ ๋Œ€์ „์ œ๋Š” “URL ๋ฐ ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•œ๋‹ค, ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์š”์ฒญ์— ์‘๋‹ตํ•œ๋‹ค” ์ž…๋‹ˆ๋‹ค. โ€‹ ๊ทธ๋Ÿฐ๋ฐ HTTP

inpa.tistory.com

 

๋‹น์‹œ์— ํ˜œ์„ฑ์ฒ˜๋Ÿผ ๋“ฑ์žฅํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๊ตฌ๊ธ€์€ HTTP ๊ทœ์•ฝ์„ ๋›ฐ์–ด๋„˜๋Š” ๋ฐฉ์•ˆ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„ํ•˜์—ฌ AJAX์ž…๋‹ˆ๋‹ค.

 

โ€‹AJAX๋Š” HTTP๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ด์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

์•ž์—์„œ HTTP๋Š” ์•ฝ์†์ด๋ผ๊ณ  ๋ง์”€๋“œ๋ ธ์ง€์š”? AJAX๋Š” ์•ฝ์†์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํšจ๊ณผ์ ์œผ๋กœ ์„œ๋ฒ„์™€ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ฆผ์œผ๋กœ ๋น„๊ตํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ HTTP์— ๋”ฐ๋ฅธ ๋‚˜์ด๋ธŒํ•œ ํ†ต์‹  ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์›น์†Œ์ผ“-์ •๋ฆฌ

์š”์ฒญ ํŽ˜์ด์ง€์—์„œ ํ™•์ธ์„ ๋ˆ„๋ฅด๋ฉด, ํ™•์ธ์„ ๋ˆŒ๋ €๋‹ค๋Š” ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์›น์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๋ฐ›๊ณ , ์ฒ˜๋ฆฌํ•œ ํ›„์— HTML ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์œ ์ €์—๊ฒŒ ํ•ด๋‹น HTMLํŽ˜์ด์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์„ ์„ ํƒํ•œ๋‹ค๋ฉด, HTML(์ฆ‰ ์›น ํŽ˜์ด์ง€)์„ ํ•˜๋‚˜ ์ƒˆ๋กญ๊ฒŒ ๋ธŒ๋ผ์šฐ์ €์— ๋ฟŒ๋ฆฌ๊ฒŒ ๋˜๊ณ , ๊ฒฐ๊ตญ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

โ€‹

์•„๋ž˜๋Š” AJAX ๊ธฐ์ˆ ์ด ๋“ค์–ด๊ฐ„, ์ง„์ผ๋ณดํ•œ ํ†ต์‹  ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์›น์†Œ์ผ“-์ •๋ฆฌ

AJAX๋ฅผ ์“ฐ๋ฉด, ์œ ์ €๋Š” ์ƒˆ๋กœ์šด HTML์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ฆ‰, ์œ ์ €๋Š” ์ƒˆ๋กœ์šด ์›นํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋Œ€์‹ , ๋™์ผํ•œ ์›นํŽ˜์ด์ง€ ๋‚ด์—์„œ DOM์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

โ€‹

์š”์ฒญ ํŽ˜์ด์ง€์—์„œ ์ด๋ฆ„ ์นธ์— ‘์ด‰์ƒˆ’๋ฅผ ์“ฐ๊ณ , ๋‚ด์šฉ์— ‘์•ˆ๋…•ํ•˜์„ธ์š”. ์ด‰์ƒˆ์ž…๋‹ˆ๋‹ค’๋ผ๊ณ  ์ผ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์ด๋ฒคํŠธ๋กœ๋ถ€ํ„ฐ Javascript๋Š” ํ•ด๋‹น ์ด๋ฆ„๊ณผ ๋‚ด์šฉ์ด ์“ฐ์—ฌ์ง„ DOM์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ ๋Š” XMLHttpRequest ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์›น์„œ๋ฒ„์— ํ•ด๋‹น ์ด๋ฆ„๊ณผ ๋‚ด์šฉ์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

์›น์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  XML, Text ํ˜น์€ JSON์„ XMLHttpRequest ๊ฐ์ฒด์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด, Javascript๊ฐ€ ํ•ด๋‹น ์‘๋‹ต ์ •๋ณด๋ฅผ DOM์— ์”๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๊ฒฐ๊ณผํŽ˜์ด์ง€๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

โ€‹

AJAX๋ฅผ ์“ฐ๋ฉด ์ƒˆ๋กœ์šด HTML์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ผํ•œ ํŽ˜์ด์ง€์˜ ์ผ๋ถ€๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊น๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ํŽ˜์ด์ง€ ์ด๋™์ด ๋ฐœ์ƒ๋˜์ง€ ์•Š๊ณ  ํŽ˜์ด์ง€ ๋‚ด๋ถ€ ๋ณ€ํ™”๋งŒ ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

HTML ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋‹ค ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ถ€๋ถ„๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


HTTP vs AJAX

 

์ฐจ์ด1 : ์ „์ฒด๋ฅผ ๋‹ค ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š”๊ฐ€? vs ๋ถ€๋ถ„๋งŒ ์„ ๋ณ„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

  • HTTP๋Š” ํด๋ผ์ด์–ธํŠธ์ชฝ์—์„œ Request๋ฅผ ๋ณด๋‚ด๊ณ  Server์ชฝ์—์„œ Response๋ฅผ ๋ฐ›์œผ๋ฉด ์ด์–ด์กŒ๋˜ ์—ฐ๊ฒฐ์ด ๋Š๊ธฐ๊ฒŒ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ™”๋ฉด์˜ ๋‚ด์šฉ์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์‹œ request๋ฅผ ํ•˜๊ณ  response๋ฅผ ํ•˜๋ฉด์„œ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๊ฐฑ์‹ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • AJAX๋Š” html ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ผ๋ถ€๋ถ„๋งŒ ๊ฐฑ์‹ ํ• ์ˆ˜ ์žˆ๋„๋ก XMLHttpRequest๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— request ํ•ฉ๋‹ˆ๋‹ค. XMLHttpRequest๋Š” ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์„ ์žก์•„๋‘ก๋‹ˆ๋‹ค. Json์ด๋‚˜ xmlํ˜•ํƒœ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ DOM์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋งŒํผ์˜ ์ž์›๊ณผ ์‹œ๊ฐ„์„ ์•„๋‚„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€‹

์ฐจ์ด2 : ๋ˆ„๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋Š”๊ฐ€?

  • HTTP๋Š” ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • AJAX๋Š” XMLHttpRequest ๊ฐ์ฒด๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

โ€‹

์ฐจ์ด3 : ํŽ˜์ด์ง€์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๋Š”๊ฐ€?

  • HTTP๋Š” ํ•ญ์ƒ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • AJAX๋Š” ์กฐ๊ทธ๋งˆํ•œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ, ํ•ด๋‹น ํŽ˜์ด์ง€ ๋‚ด์—์„œ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โ€‹

์•ž์„œ์„œ HTTP๋กœ ํšŒ์›๊ฐ€์ž…ํ–ˆ์„ ๋•Œ ์ค‘๋ณต์ฒดํฌํ•˜๋Š” ๊ณผ์ •๊ณผ ๋น„๊ตํ•ด๋ณผ๊นŒ์š”?

AJAX๋ฅผ ์“ด๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์•„์ด๋”” ์ค‘๋ณต์ฒดํฌํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

์›น์†Œ์ผ“-์ •๋ฆฌ

๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•๋„ ํ™•์ธ, ๊ฒ€์ƒ‰์–ด ์‹ค์‹œ๊ฐ„ ์ถ”์ฒœ, ๋งˆ์šฐ์Šค ์ปค์„œ๋‚˜ ์Šคํฌ๋กค๋ฐ” ์œ„์น˜์— ๋ฐ˜์‘ํ•˜๋Š” ๊ทธ๋ฆผ, ์ง€๋„ ํ‘œ์‹œ ์„œ๋น„์Šค ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค.

โ€‹

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ AJAX๋กœ ์—ฌ์ „ํžˆ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

โ€‹์™œ๋ƒํ•˜๋ฉด, AJAX๋„ ์—ฌ์ „ํžˆ HTTP๋กœ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฆ‰, AJAX๋„ HTTP์˜ ํ•œ๊ณ„๋ฅผ ์™„์ „ํžˆ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

HTTP๋Š” “ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์žˆ๊ณ  ๊ทธ ๋‹ค์Œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›๋Š” ์ƒํ™ฉ”์ธ๋ฐ, ์ด ํ‹€๋กœ๋ถ€ํ„ฐ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์™ธ์—๋„ ์›น ์ƒ์—์„œ๋Š” ๊ฐˆ์ˆ˜๋ก ๋™์ ์ธ ํ‘œํ˜„๊ณผ ๋›ฐ์–ด๋‚œ ์ƒํ˜ธ์ž‘์šฉ์ด ์š”๊ตฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ฆ‰, ๋ฐ์ดํ„ฐ ์ˆ˜์‹ ์„ ์œ„ํ•ด ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•ด ์ฃผ๋Š” ํ‘ธ์‹œ(push)๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ์—ฌ์ „ํžˆ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์—๊ฒŒ ์š”์ฒญํ•˜๋Š” ํด๋ง(polling) ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

โ€‹

์ด์™€ ๊ฐ™์€ ์• ๋กœ์‚ฌํ•ญ์€ HTML5 ๊ฐœ๋ฐœ ๊ณผ์ •์— ๋…น์•„๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ, HTML5์€ ์ˆœ์ˆ˜ ์›น ํ™˜๊ฒฝ์—์„œ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์ง€๊ฒŒ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ŠคํŽ™์˜ ๋ช…์นญ์ด ๋ฐ”๋กœ ์›น ์†Œ์ผ“(Web Socket) ์ž…๋‹ˆ๋‹ค.

โ€‹

AJAX๋Š” ์ด๋ฆ„์ด ์™œ AJAX ์ธ๊ฐ€์š”?

Asynchronous Javascript And Xml์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. (๋น„๋™๊ธฐ์ ์ธ) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ DOM์„ ์ฝ๊ณ  ์“ฐ๋ฉฐ,
XMLHttpRequest ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ช…๋ช…๋˜์–ด์กŒ์Šต๋‹ˆ๋‹ค.

HTTP์™€ HTTPS์—๋Š” ๋ฌด์Šจ ์ฐจ์ด๊ฐ€ ์žˆ๋‚˜์š”?

๋’ค์— ๋ถ™์€ S๋Š” Secured์˜ S์ž…๋‹ˆ๋‹ค.
์›นํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋ฌด์Šจ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋Š”์ง€, ์„œ๋ฒ„๊ฐ€ ์œ ์ €์—๊ฒŒ ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ์ฃผ์—ˆ๋Š”์ง€๊ฐ€ ์•”ํ˜ธํ™”๋ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ ์ •๋ถ€๊ฐ€ ์•ผ๋™ ์‚ฌ์ดํŠธ, ๋ถˆ๋ฒ• ์›นํˆฐ ์‚ฌ์ดํŠธ, ๋ถˆ๋ฒ• ๋„๋ฐ• ์‚ฌ์ดํŠธ ๋“ฑ์„ ์ „๋ถ€ ์—†์• ์ง€ ๋ชปํ•˜๋Š” ์ด์œ ๋„ ์ด S ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


์›น ์†Œ์ผ“ ์ด๋ž€?

์›น์†Œ์ผ“-์ •๋ฆฌ

์›น์†Œ์ผ“์€ HTML5 ํ‘œ์ค€ ๊ธฐ์ˆ ๋กœ, ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ๋™์ ์ธ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ์ฑ„๋„์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Websocket API๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๊ณ , ์š”์ฒญ ์—†์ด ์‘๋‹ต์„ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โ€‹

์›น์†Œ์ผ“์€ ๋งค์šฐ ๋‹จ์ˆœํ•œ API๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์›น์†Œ์ผ“์„ ์ด์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ HTTP ์ ‘์†์œผ๋กœ ์–‘๋ฐฉํ–ฅ ๋ฉ”์‹œ์ง€๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€‹

์›น์†Œ์ผ“ ํ†ต์‹ ๊ณผ ๋น„๊ตํ•˜๋ฉด xmlhttprequest์—์„œ๋Š” ํ†ต์‹ ํ•  ๋•Œ๋งˆ๋‹ค ๊ผญ ์š”์ฒญ ํ—ค๋”๊ฐ€ ๋ถ€์—ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๊ณผ 1๋ฐ”์ดํŠธ์˜ ์ •๋ณด๋ฅผ ์†ก์‹ ํ•˜๊ณ  ์‹ถ์–ด๋„ ์ˆ˜ ํ‚ฌ๋กœ๋ฐ”์ดํŠธ์— ๋‹ฌํ•˜๋Š” ์“ธ๋ฐ์—†๋Š” ์ •๋ณด๋ฅผ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฑ„ํŒ… ์ž…๋ ฅ์„ ํ•œ ๋ฌธ์ž๋งˆ๋‹ค ์„œ๋ฒ„์— ์†ก์‹ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ, ์‹ค์‹œ๊ฐ„์„ ์ถ”๊ตฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ด ์ ์ด ์„ฑ๋Šฅ ์ฐจ์ด๋กœ ์ด์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


HTTP vs ์›น ์†Œ์ผ“ ์ฐจ์ด์ 

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

 

WebSocket ํ”„๋กœํ† ์ฝœ์€ ์ ‘์† ํ™•๋ฆฝ์— HTTP๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ทธ ํ›„์˜ ํ†ต์‹ ์€ WebSocket ๋…์ž์˜ ํ”„๋กœํ† ์ฝœ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ, header๊ฐ€ ์ƒ๋‹นํžˆ ์ž‘์•„ overhead๊ฐ€ ์ ์€ ํŠน์ง• ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์žฅ์‹œ๊ฐ„ ์ ‘์†์„ ์ „์ œ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ ‘์†ํ•œ ์ƒํƒœ๋ผ๋ฉด ํด๋ผ์ด์–ธํŠธ๋‚˜ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์†ก์‹ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋”๋ถˆ์–ด ๋ฐ์ดํ„ฐ์˜ ์†ก์‹ ๊ณผ ์ˆ˜์‹ ์— ๊ฐ๊ฐ ์ปค๋„ฅ์…˜์„ ๋งบ์„ ํ•„์š”๊ฐ€ ์—†์–ด, ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ํ†ต์‹ ์‹œ์— ์ง€์ •๋˜๋Š” URL์€ http://www.sample.com/ ๊ณผ ๊ฐ™์€ ํ˜•์‹์ด ์•„๋‹ˆ๋ผ ws://www.sample.com/ ๊ณผ ๊ฐ™์€ ํ˜•์‹์ด ๋ฉ๋‹ˆ๋‹ค.

์›น์†Œ์ผ“-์ •๋ฆฌ

โ€‹

WebSocket ์†Œ์ผ“์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  1. ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ.
  2. ๋งŽ์€ ์ˆ˜์˜ ๋™์‹œ ์ ‘์†์ž๋ฅผ ์ˆ˜์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ.
  3. ๋ธŒ๋ผ์šฐ์ €์—์„œ TCP ๊ธฐ๋ฐ˜์˜ ํ†ต์‹ ์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ.
  4. ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด API๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ.
  5. ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์ด๋‚˜ ์›น์„ ๋„˜์–ด SOA(Service Oriented Architecture) ๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

โ€‹

WebSocket ์„œ๋ฒ„์˜ ์ข…๋ฅ˜

  • pywebsocket(apache)
  • phpwebsocket(php)
  • jWebSocket(java,javascript)
  • web-socket-ruby(ruby)
  • Socket.IO(node.js)

Socket.io

์›น์†Œ์ผ“-์ •๋ฆฌ

๊ทธ๋Ÿฌ๋‚˜ ์›น์†Œ์ผ“์€ HTML5์˜ ๊ธฐ์ˆ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์›น์†Œ์ผ“์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์ž๋™ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ์ต์Šคํ”Œ๋กœ๋Ÿฌ ๊ตฌ ๋ฒ„์ „ ์‚ฌ์šฉ์ž๋“ค์€ ์›น์†Œ์ผ“์œผ๋กœ ์ž‘์„ฑ๋œ ์›นํŽ˜์ด์ง€๋ฅผ ๋ณผ ์ˆ˜ ์—†์ง€์š”.

 

๋”ฐ๋ผ์„œ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๊ฐ€ Socket.io ์ž…๋‹ˆ๋‹ค.

์›นํŽ˜์ด์ง€๊ฐ€ ์—ด๋ฆฌ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น์†Œ์ผ“์„ ์ง€์›ํ•˜๋ฉด ์›น์†Œ์ผ“ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ณ ,

์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋ผ๋ฉด ์ผ๋ฐ˜ http๋ฅผ ์ด์šฉํ•ด์„œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ํ‰๋‚ด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€‹

Socket.io๋Š” node.js ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ์ˆ ๋กœ, ๊ฑฐ์˜ ๋ชจ๋“  ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ๋ชจ๋ฐ”์ผ ์žฅ์น˜๋ฅผ ์ง€์›ํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง€์› ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ 100% ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ˜„์กดํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‹ค์‹œ๊ฐ„ ์›น ๊ธฐ์ˆ ๋“ค์„ ์ถ”์ƒํ™”ํ•ด ๋†“์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด, Socket.io๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฅ˜์— ์ƒ๊ด€์—†์ด ์‹ค์‹œ๊ฐ„ ์›น์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

โ€‹

Socket.io๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„์˜ ์ข…๋ฅ˜์™€ ๋ฒ„์ „์„ ํŒŒ์•…ํ•˜์—ฌ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ธฐ์ˆ ์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋ธŒ๋ผ์šฐ์ €์— FlashSocket์ด๋ผ๋Š” ๊ธฐ์ˆ ์„ ์ง€์›ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—†์œผ๋ฉด AJAX Long Polling ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.


์™œ ์›น์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

์›น์†Œ์ผ“-์ •๋ฆฌ

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

์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์€ ํฌ๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ์ •๋ณด์˜ ๊ฒ€์ƒ‰ ๋ฐ ์—ด๋žŒ ์ˆ˜์ค€์— ๊ทธ์ณค์Šต๋‹ˆ๋‹ค.

 

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

โ€‹

์ „ํ˜•์ ์ธ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๋ฐฉ์‹์€ HTTP ์š”์ฒญ์— ๋Œ€ํ•œ HTTP ์‘๋‹ต์„ ๋ฐ›์•„์„œ ๋ธŒ๋ผ์šฐ์ €์˜ ํ™”๋ฉด์„ ๋ชจ๋‘ ์ง€์šฐ๊ณ  ๋ฐ›์€ ๋‚ด์šฉ์„ ์ƒˆ๋กœ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋•Œ Ajax์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์ด ๋‚˜ํƒ€๋‚˜๋ฉด์„œ ์‚ฌ์šฉ์ž์™€ ๊ธด๋ฐ€ํžˆ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์›น ์„œ๋น„์Šค๊ฐ€ ๋“ฑ์žฅํ•˜์˜€๊ณ  ์ธ๊ธฐ๋ฅผ ๋Œ๊ธฐ ์‹œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โ€‹

๋‹ค์‹œ ๋งํ•ด, ๊ธฐ์กด์—๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ˆจ๊ฒจ์ง„ ํ”„๋ ˆ์ž„์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ Long Polling, Stream ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์›น ์„œ๋ฒ„๊ฐ€ ์ด ์š”์ฒญ์— ๋Œ€ํ•œ HTTP ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ๋‹จ๋ฐฉํ–ฅ์˜ ๋ฉ”์‹œ์ง€ ๊ตํ™˜ ๋ฐฉ์‹์„ ์œ ์ง€ํ•˜๋Š” ์„ ์—์„œ ๊ตฌํ˜„๋œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ฆ‰, ๊ธฐ์กด์˜ ๋ฐฉ๋ฒ•์— ์ผ์ข…์˜ ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๊ธฐ์กด์˜ ์›น ๊ธฐ์ˆ ์„ ์ด์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ผ์€ ๋ณต์žกํ•˜๊ณ  ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.

โ€‹

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

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ Ajax์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ๊ฐœ๋… ๋ฉด์—์„œ Ajax์™€ ์ฐจ์ด๋ฅผ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

โ€‹์˜ˆ๋กœ ์ฑ„ํŒ…ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ์ฑ„ํŒ…์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ๊ฑด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Ajax๋กœ ๋งŒ๋“  ์›น ํŽ˜์ด์ง€๋ผ๋ฉด ์„œ๋ฒ„ ์ธก์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ผ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‘์ฑ…์œผ๋กœ 10์ดˆ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

๋Œ€์‹ , ์›น์†Œ์ผ“์€ ์„œ๋ฒ„์—์„œ๋„ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ธ์ง€ํ•˜๋Š” ์ƒํƒœ์ด๊ธฐ์— ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โ€‹

HTML5 ์›น์†Œ์ผ“์€ ๋งค์šฐ ์œ ์šฉํ•œ ๊ธฐ์ˆ ์ด์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๋ณ„๋กœ ์ง€์›ํ•˜๋Š” ์›น์†Œ์ผ“ ๋ฒ„์ „์ด ๋‹ค๋ฅด๋ฉฐ ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ์šฐ ์•„์˜ˆ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์ƒ๊ด€์—†์ด ์‹ค์‹œ๊ฐ„ ์›น์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” Socket.io๋ฅผ ์ข€ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

โ€‹


์›น์†Œ์ผ“ ์‚ฌ์šฉ์˜ ์–ด๋ ค์šด ์ 

WebSocket์€ ์‚ฌ์šฉ์‹œ ์œ„์— ์„œ์ˆ ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์žฅ์ ๋“ค์„ ์ฃผ์ง€๋งŒ ๊ทธ์— ๋ชป์ง€ ์•Š๋Š” ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” WebSocket ์‚ฌ์šฉ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋ ค์šด ์  ๋˜๋Š” ๋ฌธ์ œ์ ๋“ค์ž…๋‹ˆ๋‹ค.

 

  1. ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„์— ๋ณด๋‹ค ๋งŽ์€ ๋ณต์žก์„ฑ ์ดˆ๋ž˜ :
    WebSocket์€ HTTP์™€ ๋‹ฌ๋ฆฌ Stateful protocol์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ํ•ญ์ƒ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฉฐ ๋งŒ์•ฝ ๋ฐ”์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ์„ ๋•Œ ์ ์ ˆํ•˜๊ฒŒ ๋Œ€์‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์กด์˜ HTTP ์‚ฌ์šฉ ์‹œ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ฝ”๋”ฉ์˜ ๋ณต์žก์„ฑ์„ ๊ฐ€์ค‘์‹œํ‚ค๋Š” ์š”์ธ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ Socket ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋น„์šฉ์ด ๋“œ๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ๋‚˜ ํŠธ๋ž˜ํ”ฝ์–‘์ด ๋งŽ์€ ์„œ๋ฒ„ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” CPU์— ํฐ ๋ถ€๋‹ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋ฌผ๋ก  SockJS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” Fallback option์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.) ์ฐธ๊ณ ๋กœ ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ์–ด ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” 10 ๋ฒ„์ „๋ถ€ํ„ฐ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  4. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ์„ ๋•Œ ์ƒ์„ฑ๋˜๋Š” ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊ฐ€ ๊ตฌ์ฒด์ ์ด์ง€ ์•Š์•„์„œ (์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ด์œ ๋กœ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ๋Š”๋ฐ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ) ๋””๋ฒ„๊น…์„ ํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์ด ๋งŽ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

โ€‹์•„๋ฌด๋ฆฌ ์ข‹์€ ๊ธฐ์ˆ ์ด๋ผ ํ• ์ง€๋ผ๋„ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์œ ์šฉํ•  ์ˆ˜๋Š” ์—†๋Š” ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์— ๊ผญ ํ•„์š”ํ•œ ๊ธฐ์ˆ ์ธ์ง€ ์ž˜ ์ฒดํฌํ•˜๊ณ  ์ˆ˜์šฉ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.

โ€‹

๋Œ€ํ‘œ์ ์ธ ์›น์†Œ์ผ“ ์‚ฌ์šฉ ์˜ˆ

  • ํŽ˜์ด์Šค๋ถ ๊ฐ™์€ SNS ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜
  • LOL ๊ฐ™์€ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„๋“ค
  • ๊ตฌ๊ธ€ Doc ๊ฐ™์ด ์—ฌ๋Ÿฌ ๋ช…์ด ๋™์‹œ ์ ‘์†ํ•ด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” Tool
  • ํด๋ฆญ ๋™ํ–ฅ ๋ถ„์„ ๋ฐ์ดํ„ฐ ์–ดํ”Œ (ํŠน์ • ์‹œ๊ฐ„๋™์•ˆ ์–ด๋Š ์‚ฌ์ดํŠธ์— ์ฃผ๋กœ ์ ‘์†ํ–ˆ๋Š”์ง€ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•˜๋Š” ์–ดํ”Œ)
  • ์ฆ๊ถŒ ๊ฑฐ๋ž˜ ์ •๋ณด ์‚ฌ์ดํŠธ ๋ฐ ์–ดํ”Œ
  • ์Šคํฌ์ธ  ์—…๋ฐ์ดํŠธ ์ •๋ณด ์‚ฌ์ดํŠธ ๋ฐ ์–ดํ”Œ
  • ํ™”์ƒ ์ฑ„ํŒ… ์–ดํ”Œ
  • ์œ„์น˜ ๊ธฐ๋ฐ˜ ์–ดํ”Œ
  • ์˜จ๋ผ์ธ ๊ต์œก ์‚ฌ์ดํŠธ ๋ฐ ์–ดํ”Œ