WebSocket
Last updated
Last updated
์ค์๊ฐ์ ์ฌ์ฉ์๊ฐ ์ฆ์๋ผ๊ณ ๋๋ ์ ๋๋ก ์ถฉ๋ถํ ๋น ๋ฅด๊ฑฐ๋, ๋๋ ์ปดํจํฐ๊ฐ ์ธ๋ถ์์ ์งํ๋๋ ์ฒ๋ฆฌ์ ๋ค๋จ์ด์ง์ง ์์ ์ ๋๋ก ๋น ๋ฅด๊ฒ ๋์ํ๋ ์ปดํจํฐ์ ๋ฐ์ ์์ค์ด๋ค
push server๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ค๋ฉด ์๋ตํด์ฃผ๋ ๋ฐฉ์์ด ์๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ๊ณต์ง์ฌํญ๊ณผ ๊ฐ์ ๋ฌด์์ธ๊ฐ ํต์งํด์ฃผ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค. ๋ค์ ๋งํด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์์ด๋ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํ๋ ๋ฐฉ์์ด๋ค.
ํด๋ง(polling)์ด๋ ํ๋์ ์ฅ์น(๋๋ ํ๋ก๊ทธ๋จ)๊ฐ ์ถฉ๋ ํํผ ๋๋ ๋๊ธฐํ ์ฒ๋ฆฌ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ๋ค๋ฅธ ์ฅ์น(๋๋ ํ๋ก๊ทธ๋จ)์ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฌํ์ฌ ์ผ์ ํ ์กฐ๊ฑด์ ๋ง์กฑํ ๋ ์ก์์ ๋ฑ์ ์๋ฃ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ฐฉ์์ ๋งํ๋ค
ํด๋ผ์ด์ธํธ๊ฐ ์น์๋ฒ์๊ฒ ์๋ก์ด ๋ด์ฉ์ด ์๋์ง ๋ฌผ์ด๋ณด์์ ๋ ์น์๋ฒ์ ์๋ก์ด ๋ด์ฉ์ด ์๋ค๋ฉด ๋๋ตํด์ฃผ์ง ์๋ค๊ฐ ์๋ก์ด ๋ด์ฉ์ด ์๊ธฐ๋ฉด ์ด๋ ๋๋ตํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
Interrupt ์ Polling
Interrupt์ Polling์ CPU๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๋์ ๋๋ฐ์ด์ค๋ก ๋ถํฐ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ค์ ์ฒ๋ฆฌํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด๋ค. Polling๊ณผ Interrupt๋ CPU๊ฐ ํ์ฌ ํ๋ ์ผ์ ๋ฉ์ถ๊ณ ์ค์ํ ์ผ์ ๋ฐ์ํ๋๋ก ๋ฉ์ถ๊ฒ ํ๋ค.
๊ธฐ๋ณธ์ ์ธ ๋น๊ต
Interrupt
Polling
๊ธฐ๋ณธ
๋๋ฐ์ด์ค๊ฐ CPU์๊ฒ attention์ด ํ์ํ๋ค๊ณ ์๋ ค์ค๋ค
CPU๊ฐ ๊ณ์ CPU์ attention์ด ํ์ํ ์ง ์ํ์ง ๋๋ฐ์ด์ค์ ์ํ๋ฅผ ์ฒดํฌํ๋ค
๋ฉ์ปค๋์ฆ
Interrupt๋ ํ๋์จ์ด์ ๋ฉ์ปค๋์ฆ์ด๋ค
Polling์ ํ๋กํ ์ฝ์ด๋ค
Servicing
Interrupt ํจ๋ค๋ฌ๊ฐ ๋๋ฐ์ด์ค๋ฅผ ์ฒ๋ฆฌํ๋ค
CPU๊ฐ ๋๋ฐ์ด์ค๋ฅผ ์ฒ๋ฆฌํ๋ค
Indication
Interrupt-request ๋ผ์ธ์ด ๋๋ฐ์ด์ค๊ฐ servicing์ด ํ์ํ๋ค๊ณ ์๋ ค์ค๋ค
Command-ready ๋นํธ๋ ๋๋ฐ์ด์ค๊ฐ servicing์ด ํ์ํ๋ค๊ณ ์๋ ค์ค๋ค
CPU
CPU๋ ๋๋ฐ์ด์ค๊ฐ servicing์ด ํ์ํ ๋๋ง ๋ฐฉํด๋ฐ์ผ๋ฉด CPU์ ์ฌ์ดํด์ ์ ์ฝํ๋ค
CPU๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๋ฐ์ด์ค๊ฐ servicing์ด ํ์ํ ์ง ๊ธฐ๋ค๋ฆฌ๊ณ ์ฒดํฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ CPU ์ฌ์ดํด์ ๋ญ๋นํ๋ค
Occurence
Interrupt๋ ์ธ์ ๋ ๋ฐ์ํ ์ ์๋ค
CPU๋ ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก device๋ฅผ pollํ๋ค
Interrupt๋ ๋๋ฐ์ด์ค๊ฐ ๋ฐ๋ณต์ ์ผ๋ก CPU๋ฅผ interruptํ ๋ ๋นํจ์จ์ด ๋๋ค
Polling์ CPU๊ฐ service๋ฅผ ์ํ device ready๊ฐ ๊ฑฐ์ ์์ ๋ ๋นํจ์จ์ด ๋๋ค
์์
๋ฒจ์ด ์ธ๋ฆฌ๋ฉด ๋ฌธ์ ์ด๊ณ ๋๊ฐ ์๋์ง ํ์ธํ๋ค
๊ณ์ ๋๊ฐ ์๋ ์ง ๋ฌธ์ ์ด์ด๋ณธ๋ค
Web Socket์ด๋?
์น์์ผ์ HTML5 ํ์ค ๊ธฐ์ ๋ก, ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ์ฌ์ด์ ๋์ ์ธ ์๋ฐฉํฅ ์ฐ๊ฒฐ ์ฑ๋์ ๊ตฌ์ฑํฉ๋๋ค. Websocket API๋ฅผ ํตํด ์๋ฒ๋ก ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ณ , ์์ฒญ ์์ด ์๋ต์ ๋ฐ์์ค๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ฌ API๋ W3C์์ ๊ด์ฅํ๊ณ ์์ผ๋ฉฐ ํ๋กํ ์ฝ์ IETF์์ ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค. ์น์์ผ์ ๋ณ๋์ ํฌํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ HTTP์ ๊ฐ์ 80๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ์ด ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ธ ์น ๋ธ๋ผ์ฐ์ ๋ฟ๋ง ์๋๋ผ ์น ์๋ฒ๋ ๊ธฐ๋ฅ์ ์ง์ํ๊ณ ์์ด์ผ๋ง ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์น์์ผ์ HTML5์ ๊ธฐ์ ์ด๊ธฐ ๋๋ฌธ์ ์ค๋๋ ๋ฒ์ ์ ์น ๋ธ๋ผ์ฐ์ ๋ ์น์์ผ์ ์ง์ํ์ง ์์ต๋๋ค. ํนํ ์๋ ์ ๋ฐ์ดํธ๊ฐ ๋์ง ์๋ ์ต์คํ๋ก๋ฌ ๊ตฌ ๋ฒ์ ์ฌ์ฉ์๋ค์ ์น์์ผ์ผ๋ก ์์ฑ๋ ์นํ์ด์ง๋ฅผ ๋ณผ ์ ์์ง์. ๋ฐ๋ผ์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ์ฌ๋ฌ ๊ธฐ์ ์ค ํ๋๊ฐ Socket.io์ ๋๋ค. ์นํ์ด์ง๊ฐ ์ด๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์น์์ผ์ ์ง์ํ๋ฉด ์น์์ผ ๋ฐฉ์์ผ๋ก ๋์ํ๊ณ , ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ๋ผ๋ฉด ์ผ๋ฐ http๋ฅผ ์ด์ฉํด์ ์ค์๊ฐ ํต์ ์ ํ๋ด๋ด๋ ๊ฒ์ ๋๋ค.
Socket.io๋ node.js ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๊ธฐ์ ๋ก, ๊ฑฐ์ ๋ชจ๋ ์น ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ฐ์ผ ์ฅ์น๋ฅผ ์ง์ํ๋ ์ค์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ด๊ฒ์ 100% ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ํ์กดํ๋ ๋๋ถ๋ถ์ ์ค์๊ฐ ์น ๊ธฐ์ ๋ค์ ์ถ์ํํด ๋์์ต๋๋ค. ๋ค์ ๋งํด, Socket.io๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์ข ๋ฅ์ ์๊ด์์ด ์ค์๊ฐ ์น์ ๊ตฌํํ ์ ์๋๋ก ํ ๊ธฐ์ ์ ๋๋ค.
Socket.io๋ ์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ์ ์ข ๋ฅ์ ๋ฒ์ ์ ํ์ ํ์ฌ ๊ฐ์ฅ ์ ํฉํ ๊ธฐ์ ์ ์ ํํ์ฌ ์ฌ์ฉํฉ๋๋ค. ๋ง์ฝ ๋ธ๋ผ์ฐ์ ์ FlashSocket์ด๋ผ๋ ๊ธฐ์ ์ ์ง์ํ๋ ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋์ด ์์ผ๋ฉด ๊ทธ๊ฒ์ ์ฌ์ฉํ๊ณ ํ๋ฌ๊ทธ์ธ์ด ์์ผ๋ฉด AJAX Long Polling ๋ฐฉ์์ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค.
์ด์ฐฝ๊ธฐ ์น์ ๋จ์ํ ์ธํฐ๋ท์ ์ ์ํ ์ฌ์ฉ์์๊ฒ ์ฝํ ์ธ ๋ฅผ ์ ๋ฌํ๋ ์ญํ ์ ์ง๋์ง ์์์ต๋๋ค. ์ฌ์ฉ์์์ ์ํธ์์ฉ์ ํฌ๊ฒ ์ค์ํ์ง ์์์ผ๋ฉฐ, ์ ๋ณด์ ๊ฒ์ ๋ฐ ์ด๋ ์์ค์ ๊ทธ์ณค์ต๋๋ค. ํ์ง๋ง ์น์ ํตํด ์ฌ์ฉ์๋ค์ด ์ ๋ณด๋ฅผ ๊ตํํ๊ณ ์ค์ค๋ก ์ปค๋ฎค๋ํฐ๋ฅผ ๋ง๋ค์ด ๊ต๋ฅํ๊ณ ์ ํ๋ ์์๊ฐ ๋์ด๋๋ฉด์ ๊ฒ์ํ, ๋ธ๋ก๊ทธ ๋ฑ๊ณผ ๊ฐ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ํธ์์ฉ์ ํ๋ ๋ถ๋ถ๋ค์ด ์๊ธฐ๊ธฐ ์์ํ์ต๋๋ค. ์ธํฐ๋ท๊ณผ ์น์ด ํ๋ํ๋ CERN๊ณผ ๊ฐ์ ์ด์ฐฝ๊ธฐ์ ์ฐ๊ตฌ๊ธฐ๊ด์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ์ค๋๋ ์ ์น์ ์ผ์์ํ ๊น์์ด ํ๊ณ ๋ค์๊ณ , ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ฒดํ๋ ์์ค์ ์ด๋ฅด๋ ์ต๋๋ค. ํนํ ์ ํ์ ์ธ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๋ฐฉ์์ HTTP ์์ฒญ์ ๋ํ HTTP ์๋ต์ ๋ฐ์์ ๋ธ๋ผ์ฐ์ ์ ํ๋ฉด์ ๋ชจ๋ ์ง์ฐ๊ณ ๋ฐ์ ๋ด์ฉ์ ์๋ก ํ์ํ๋ ๋ฐฉ์์ด์์ต๋๋ค. ๊ทธ๋ Ajax์ ๊ฐ์ ๊ธฐ์ ์ด ๋ํ๋๋ฉด์ ์ฌ์ฉ์์ ๊ธด๋ฐํ ์ํธ์์ฉํ๋ ์น ์๋น์ค๊ฐ ๋ฑ์ฅํ์๊ณ ์ธ๊ธฐ๋ฅผ ๋๊ธฐ ์์ํ์์ต๋๋ค. ์ด๋ฌํ RIA(Rich Internet Application) ๊ธฐ์ ์ ๋ฐ๋ฌ์ด ์น์์ผ์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๋ค์ ๋งํด, ๊ธฐ์กด์๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ค์๊ฐ์ผ๋ก ์ํธ์์ฉํ๋ ์น ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด์ ์จ๊ฒจ์ง ํ๋ ์์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ Long Polling, Stream ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์์ต๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ HTTP ์์ฒญ์ ๋ณด๋ด๊ณ ์น ์๋ฒ๊ฐ ์ด ์์ฒญ์ ๋ํ HTTP ์๋ต์ ๋ณด๋ด๋ ๋จ๋ฐฉํฅ์ ๋ฉ์์ง ๊ตํ ๋ฐฉ์์ ์ ์งํ๋ ์ ์์ ๊ตฌํ๋ ๋ฐฉ์์ ๋๋ค. ์ฆ, ๊ธฐ์กด์ ๋ฐฉ๋ฒ์ ์ผ์ข ์ ํธ๋ฆญ์ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ๋๋ฌธ์ ๊ธฐ์กด์ ์น ๊ธฐ์ ์ ์ด์ฉํ์ฌ ์ค์๊ฐ ์น ์๋น์ค๋ฅผ ๋ง๋๋ ์ผ์ ๋ณต์กํ๊ณ ์ด๋ ค์ ์ต๋๋ค.
๋ฐ๋ก ์ด๋ฌํ ๋ถํธํจ๊ณผ ์ฌ์ฉ์์ ๊ธด๋ฐํ ์ํธ์์ฉํ๋ ์น ํ์ด์ง๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋ค๊ณ ์ ํ๋ ๊ฐ๋ฐ์์ ์๊ตฌ๊ฐ ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ์ฌ์ด์ ์์ ๋ก์ด ์๋ฐฉํฅ ๋ฉ์์ง ์ก์์ ๋ฐฉ๋ฒ์ผ๋ก์จ HTML5 ํ์ค์์ ์ผ๋ถ์ธ ์น์์ผ API๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ์ Ajax์ ๋น์ทํ์ง๋ง, ๊ฐ๋ ๋ฉด์์ Ajax์ ์ฐจ์ด๋ฅผ ๋๊ณ ์์ต๋๋ค. Ajax์ ๊ฒฝ์ฐ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ํธ์ถํ๋ฉด ์น ์๋ฒ์์ ํธ์ถ๋ ๊ฐ์ ๊ฒ์, ์์ฑํด์ ์น ๋ธ๋ผ์ฐ์ ๋ก ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ ํ์์ ๊ตฌ์กฐ๋ผ๋ฉด ์น์์ผ์ ๊ฒฝ์ฐ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ํธ์ถํด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ๋ฐ๋๋ก ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ฅผ ํธ์ถํ ์ ์๋ ๊ธฐ๋ฅ๊น์ง ์์ต๋๋ค.
์๋ก ์ฑํ ํ๋ก๊ทธ๋จ์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ ๋, ์ฐ๋ฆฌ๊ฐ ์ฑํ ์ ์๋ฒ๋ก ๋ณด๋ด๋ ๊ฑด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ Ajax๋ก ๋ง๋ ์น ํ์ด์ง๋ผ๋ฉด ์๋ฒ ์ธก์์ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ผ ์๊ฐ ์์ต๋๋ค. ๋์์ฑ ์ผ๋ก 10์ด๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํด์ ํ์ธํ ์ ์์ง๋ง, ์น์์ผ์ ์๋ฒ์์๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ธ์งํ๋ ์ํ์ด๊ธฐ์ ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค.