[WEB] ๐ ์น ์์ผ (Socket) ์ ๋ฆฌ (์ญ์ฌ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ)
โ์น ๊ฐ๋ฐ์ ์ฒ์ ๋ฐฐ์ฐ๊ธฐ ์์ํ๋ค๋ฉด ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ํต์ ์ ๋ชจ๋ HTTP ํ๋กํ ์ฝ๋ง ์ด์ฉํด์ ์ด๋ฃจ์ด์ง๋ค๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์น ๊ฐ๋ฐ์ ํ๋ฉด์ ์ฑํ , ๊ฒ์, ์ฃผ์ ์ฐจํธ ๋ฑ์ ์ค์๊ฐ ํต์ ์ด ํ์ํ ์๋น์ค๋ฅผ ๊ตฌํํ๋ ค ํ๋ฉด HTTP ํ๋กํ ์ฝ์ด ์๋ ์น์์ผ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ํํ ์ฐพ์๋ณผ ์ ์์ต๋๋ค.
HTTP์ ํ๊ณ
HTTP๋ ์ฝ์์ ๋๋ค. ์ฝ์์ ์์ด๋ก ํํํ๋ฉด, ํ๋กํ ์ฝ์ด๋ผ๊ณ ํฉ๋๋ค.
HTTP๊ฐ ๋ฑ์ฅํ๊ธฐ ์ด์ ์ธ๋์์ ํต์ ํ๋ค ํจ์, ํฐ๋ฏธ๋ ์ฐฝ์์ ๋ฑ๋ฑํ ํ ์คํธ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด์์ด์.
๊ทธ๋ฐ๋ฐ HTTP๊ฐ ๋ฑ์ฅํ๋, ์๊ฐ์ ์ผ๋ก๋ ์ ๋ณด๋ ์ฐจ์์์ ์์ฒญ๋๊ฒ ๋ฉ์ง ๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ HTTP์๋ ๋ฌด์์ด ๋์ ์ ๊ฐ ๋ถ์ต๋๋ค.
์ฌ์ฉ์๊ฐ URL์ ์์ฒญํ ๋์๋ง! ์๋ฒ์์ ํด๋น ํ์ด์ง๋ฅผ ๊บผ๋ด์ฃผ๋ ์์ด๋ผ๋ ๊ฒ๋๋ค.
๊ฑฐ๊พธ๋ก ๋งํ์๋ฉด, ์ฌ์ฉ์๋ ์๋ฒ๋ก๋ถํฐ ์๋ก์ด ์ ๋ณด๋ฅผ ๋ฐ์๋ณด๊ธฐ ์ํด์, ๋ฐ๋์ ์๋ก์ด URL์ ์์ฒญํด์ผ ํ๋ค๋ ๋ง๊ณผ ๊ฐ์ต๋๋ค.
โ
์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ๊ณต๊ณต๊ธฐ๊ด ์น์ฌ์ดํธ์ ํ์๊ฐ์ ๊ณผ์ ์ ๋ ์ฌ๋ ค๋ณด์ธ์.
์ฆ, ๋ธ๋ผ์ฐ์ ๊ฐ ์น์๋ฒ์ ๋ฌด์์ธ๊ฐ๋ฅผ ์์ฒญํ๋ ค๋ฉด, ํ์ด์ง๋ฅผ ์ด๋ํด์ผ๋ง ํ์ต๋๋ค.
์ฌ์ค ๊ทธ๋ ๊ฒ ์นํ์ด์ง๋ฅผ ์ด๋ํ๋ ๋ฐฉ์์ผ๋ก ๋ง๋ค์ด๋ฒ๋ฆฌ๋ฉด ์๊ฐ์ ์ผ๋ก ๋๋ฌด ๋ปฃ๋ปฃํ๊ณ ๊ตฌ๋ ธ๊ธฐ ๋๋ฌธ์ ๋ง์ ๊ผผ์๋ค์ด ๋ฑ์ฅํฉ๋๋ค.
์กํฐ๋ธ์์ค๋ ๊ทธ ์ค ํ๋์ ๋๋ค.
AJAX ๋ฑ์ฅ
๋น์์ ํ์ฑ์ฒ๋ผ ๋ฑ์ฅํ๊ธฐ ์์ํ ๊ตฌ๊ธ์ 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 ์์ผ์ด ํ์ํ ๊ฒฝ์ฐ
- ์ค์๊ฐ ์๋ฐฉํฅ ๋ฐ์ดํฐ ํต์ ์ด ํ์ํ ๊ฒฝ์ฐ.
- ๋ง์ ์์ ๋์ ์ ์์๋ฅผ ์์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ.
- ๋ธ๋ผ์ฐ์ ์์ TCP ๊ธฐ๋ฐ์ ํต์ ์ผ๋ก ํ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ.
- ๊ฐ๋ฐ์์๊ฒ ์ฌ์ฉํ๊ธฐ ์ฌ์ด API๊ฐ ํ์ํ ๊ฒฝ์ฐ.
- ํด๋ผ์ฐ๋ ํ๊ฒฝ์ด๋ ์น์ ๋์ด 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 ์ฌ์ฉ ์ ๋ฐ์ํ ์ ์๋ ์ด๋ ค์ด ์ ๋๋ ๋ฌธ์ ์ ๋ค์ ๋๋ค.
- ํ๋ก๊ทธ๋จ ๊ตฌํ์ ๋ณด๋ค ๋ง์ ๋ณต์ก์ฑ ์ด๋ :
WebSocket์ HTTP์ ๋ฌ๋ฆฌ Stateful protocol์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ฐ๊ฒฐ์ ํญ์ ์ ์งํด์ผ ํ๋ฉฐ ๋ง์ฝ ๋ฐ์ ์์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๋์ด์ก์ ๋ ์ ์ ํ๊ฒ ๋์ํด์ผ ํฉ๋๋ค. ์ด๋ ๊ธฐ์กด์ HTTP ์ฌ์ฉ ์์ ๋น๊ตํ์ ๋ ์ฝ๋ฉ์ ๋ณต์ก์ฑ์ ๊ฐ์ค์ํค๋ ์์ธ์ด ๋ ์ ์์ต๋๋ค. - ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ Socket ์ฐ๊ฒฐ์ ์ ์งํ๋ค๋ ๊ฒ ์์ฒด๊ฐ ๋น์ฉ์ด ๋๋ ์ผ์ ๋๋ค. ํนํ๋ ํธ๋ํฝ์์ด ๋ง์ ์๋ฒ ๊ฐ์ ๊ฒฝ์ฐ์๋ CPU์ ํฐ ๋ถ๋ด์ด ๋ ์ ์์ต๋๋ค.
- ์ค๋๋ ๋ฒ์ ์ ์น ๋ธ๋ผ์ฐ์ ์์๋ ์ง์ํ์ง ์์ต๋๋ค. (๋ฌผ๋ก SockJS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ๊ฒฝ์ฐ์๋ Fallback option์ ์ ๊ณตํ๊ณ ์์ต๋๋ค.) ์ฐธ๊ณ ๋ก ์ธํฐ๋ท ์ต์คํ๋ก์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ 10 ๋ฒ์ ๋ถํฐ ์ง์ํฉ๋๋ค.
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ฐ๊ฒฐ์ด ๋์ด์ก์ ๋ ์์ฑ๋๋ ์๋ฌ ๋ฉ์ธ์ง๊ฐ ๊ตฌ์ฒด์ ์ด์ง ์์์ (์๋ฅผ ๋ค์ด ์ฌ๋ฌ๊ฐ์ง ๋ค๋ฅธ ์ด์ ๋ก ์ฐ๊ฒฐ์ด ๋์ด์ก๋๋ฐ ์๋ฌ ๋ฉ์ธ์ง๊ฐ ๊ฐ์ ๊ฒฝ์ฐ) ๋๋ฒ๊น ์ ํ๋๋ฐ ์ด๋ ค์์ด ๋ง๊ธฐ๋ ํฉ๋๋ค.
โ์๋ฌด๋ฆฌ ์ข์ ๊ธฐ์ ์ด๋ผ ํ ์ง๋ผ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ ์๋ ์๋ ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ๊ผญ ํ์ํ ๊ธฐ์ ์ธ์ง ์ ์ฒดํฌํ๊ณ ์์ฉ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
โ
๋ํ์ ์ธ ์น์์ผ ์ฌ์ฉ ์
- ํ์ด์ค๋ถ ๊ฐ์ SNS ์ดํ๋ฆฌ์ผ์ด์
- LOL ๊ฐ์ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์๋ค
- ๊ตฌ๊ธ Doc ๊ฐ์ด ์ฌ๋ฌ ๋ช ์ด ๋์ ์ ์ํด์ ์์ ํ ์ ์๋ Tool
- ํด๋ฆญ ๋ํฅ ๋ถ์ ๋ฐ์ดํฐ ์ดํ (ํน์ ์๊ฐ๋์ ์ด๋ ์ฌ์ดํธ์ ์ฃผ๋ก ์ ์ํ๋์ง ๋ฑ์ ์ ๋ณด๋ฅผ ํ์ ํ๋ ์ดํ)
- ์ฆ๊ถ ๊ฑฐ๋ ์ ๋ณด ์ฌ์ดํธ ๋ฐ ์ดํ
- ์คํฌ์ธ ์ ๋ฐ์ดํธ ์ ๋ณด ์ฌ์ดํธ ๋ฐ ์ดํ
- ํ์ ์ฑํ ์ดํ
- ์์น ๊ธฐ๋ฐ ์ดํ
- ์จ๋ผ์ธ ๊ต์ก ์ฌ์ดํธ ๋ฐ ์ดํ