HTTP review
Socket ํต์
Socket vs. RestAPI
HTML ํ์ผ์ ์ ์กํ๋ ํ๋กํ ์ฝ๋ก์จ ์น ๋ธ๋ผ์ฐ์ ์์ ํต์ ์ด ์ผ์ด๋ฉ๋๋ค. ์ด๊ธฐ์๋ HTML ํ์ผ์ ์ ์กํ๋ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ก์ผ๋ ํ์ฌ๋ json, image ํ์ผ ๋ฑ ๋ํ ์ ์กํฉ๋๋ค.
Http ํต์ ์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ฒ๊ฐ ์๋ตํ๋ ๋ฐฉ์์ผ๋ก ํต์ ์ด ์ด๋ฃจ์ด์ง๋๋ค. ์๋ต์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์์ ๋ ์๋ฒ๊ฐ ์๋ตํ๋ ๋ฐฉ์์ผ๋ก
๋จ๋ฐฉํฅ ํต์
- HTTP ํต์ ์ ํด๋ผ์ด์ธํธ ์๋ฒ๊ฐ ์์ฒญ, ์๋ต์ ํ๋ ๋จ๋ฐฉํฅ ํต์ ์ด๋ค.
- json, xml, image, html ๋ฑ๋ฑ ํ์ผ์ ์ ์กํ๋ค.
- ์๋ต์ ๋ฐ์ผ๋ฉด connetction์ด ๋์ด์ง๋ค. ํ์ง๋ง keep alive ์ต์ ์ผ๋ก ์ผ์ ์๊ฐ๋์ ์ฐ๊ฒฐ์ ์ ์งํ ์ ์๋ค.
์์ผ ํต์ ์ ๋ ํ๋ก๊ทธ๋จ์ด ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ์์ชฝ์ ์์ฑ๋๋ ํต์ ๋จ์์
๋๋ค. ๊ธฐ์กด์ HTTP ํต์ ์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ํ๋ฉด ์๋ฒ๊ฐ ์๋ต์ ๋ณด๋ด๋ ๋ฐฉ์์ด์ง๋ง ์์ผ ํต์ ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์๋ฐฉํฅ ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๋ ํต์
์ผ๋ก, ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋ ์์ฒญ๊ณผ ์๋ต์ ํ ์ ์๋ ๋ฐฉ์์ด๋ค. ์๋ฐฉํฅ ํต์ .
์ด๋ฐ ์ฅ์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐ์ด๋ ์ค์๊ฐ ์ฑํ ๋ฑ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํ๋ ๊ฒฝ์ฐ์ connection์ ์์ฃผ ๋งบ๊ณ ๋๋ http ํต์ ๋ณด๋ค ์์ผ ํต์ ์ด ์ ํฉํ๋ค. ์์ผ ํต์ ์ http๋ณด๋ค ๋ฆฌ์์ค๊ฐ ๋ง์ด ์๋ชจ๋๋ค.(์ฐ๊ฒฐ์ ๊ณ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ.)
- ์ฑํ ์ฑ์ ํตํ์ฌ ๋ฉ๋ฆฌ์ ์กด์ด ๋ํ๋ฅผ ํ๊ณ ์๋ค.
- ์กด - ์ก์ ์, ๋ฉ๋ฆฌ - ์์ ์
- ์๋ฒ ์ชฝ db์๋ ๋ํ์ ๋ด์ฉ์ด ์ ์ฅ๋๋ค.
{
method : post,
user_id : "john",
message_payload :{
"hey mary!"
}
}
rest API๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฌ์ง๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํต์ ์ ํ๊ฒ๋๋ค. ์ฌ๊ธฐ์ ๋ฌธ์ ๋ ๋ง์ฝ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์ ๋ฉ๋ฆฌ๋ ์ด๋ป๊ฒ john์ด ๋ณด๋ธ ๋ฉ์์ง๋ฅผ ์์์ฐจ๋ฆด ๊ฒ์ธ์ง์ด๋ค.
- short polling
- long polling
short polling์ ๋ฉ๋ฆฌ์ ์ฑ์ด๋ ์กด์ ์ฑ์ด get ๋ฐฉ์์ ํตํด์ ์๋ก์ด ๋ฉ์์ง๊ฐ ์๋์ง ์งง์ ์๊ฐ ํ (ํ์ด๋จธ)์ ๊ฐ์ง๊ณ ํ์ธํ๋ ๋ฐฉ์์ด๋ค. ๊ณ์ ๋ฐ๋ณตํ๋ค ๋ณด๋ฉด ๋ฉ์์ง๊ฐ ์๋ก ์์ ๋๋ฉด ๋ฉ๋ฆฌ์ ์ฑ์์๋ message end-point๋ก๋ถํฐ ์ ๋ฐ์ดํธ๋ ์ ์ db๋ก ๋ถํฐ ์์ฒญํ๊ฒ ๋๋ค. ์ฌ๋๋ค์ ์ด๋ฐ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์กด์ฑ ๋๋ฌธ์ ์ด์ฉํ์ง๋ง ์ด ๋ฐฉ์์ server, client ๋ชจ๋์๊ฒ ์ข์ง ์์ ๋ฐฉ์์ด๋ค. ์๋ํ๋ฉด latency delay๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ํ์ด๋จธ๋ฅผ 5์ด๋ฅผ ๋๋ฉด 5์ด ๊ฐ๊ฒฉ๋ง๋ค ๋ฉ์์ง ๋๋ ์ด๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ http๋ก ํต์ ํ๊ธฐ ๋๋ฌธ์ request๊ฐ ๋ฐ์ํ ๋๋ง๋ค server๋ก ์์ฒญํ๊ฒ ๋๋๋ฐ ์ด ๋๋ฌธ์ ์๋ฒ์ ๋ถํ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฅผ ๊ฐ์ ํ ๋ฐฉ๋ฒ์ผ๋ก long polling์ด ์๋ค. long polling์ ์ด์ฉํ๊ฒ ๋๋ฉด ๋งค x์ด๋ง๋ค ๊ฒ์ฌ๋ฅผ ํ๋ ๊ฒ์ด ์๋๊ณ delay๋ฅผ ์ค์ ๋ง์ฝ ์๋ก์ด ๋ฉ์์ง๊ฐ ์์ ๋ ๋๋ง๋ค request๋ฅผ ํ๋ ๋ฐฉ์์ด๋ค. short polling์ ๋นํด์ ์ข์ ๋ฐฉ์์ด์ง๋ง ์ ์ฉ์ํค๊ธฐ์ ๋ค์ ์ด๋ ต๊ณ ๋ฐฑ์๋์์ ๋ ๋ง์ ์์ ์ด ์๊ตฌ๋๋ค.
์งง๊ฒ ๋งํด์ restAPI๋ http ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ(๋จ๋ฐฉํฅ ํต์ ) ๋๋ฌธ์ server์์ request๋ฅผ ๋ณด๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ์์ง๊ฐ ์๋ก ๋ค์ด์๋ client์๊ฒ ์๋ฆด ๋ฐฉ๋ฒ์ ์๊ณ client๊ฐ get ์์ฒญ์ server์๊ฒ ์ง์์ ์ผ๋ก ๋ณด๋ด์ ํ์ธํ๋ ์ ๋ฐ์ ์๋ค.
websocket ํต์ ์ ์ด๊ธฐ์ ์ฐ๊ฒฐ์ด ์ฑ๋ฆฝ๋๋ค๋ ๊ฒ์ client๊ฐ ์๋ฒ์๊ฒ ์๋ฆฐ๋ค. ๋ง์ฝ ์กด์ด ๋ฉ๋ฆฌ์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ฒ๋๋ฉด ๋ฉ๋ฆฌ ์ธก์์๋ ์ง์์ ์ผ๋ก request๋ฅผ ๋ณด๋ผ ํ์๊ฐ ์์ด server์ ๋ฉ๋ฆฌ์๊ฒ ์ก์ ๋ ๋ฉ์์ง๊ฐ ์์ผ๋ฉด ์ฆ์ ๋ฉ์์ง๋ฅผ ๋ฉ๋ฆฌ์๊ฒ ์ ๋ฌํ๊ฒ๋๋ค. ์ฆ ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ์ด์ฒ๋ผ websocket ํต์ ์ ์ด์ฉํ๋ฉด end to end๊ฐ ์ฐ๊ฒฐ๋ ํต์ ์ ํ๊ฒ๋์ด ์๋ฒ์ ๋ถํ๋ฅผ ์ค์๊ณผ ๋์์ http๋ฅผ ํตํด ์ก์์ ํ ๋๋ณด๋ค ์ํ ํ๊ฒ ํต์ ํ ์ ์๋ค.
- httpํต์ ๊ณผ socket ํต์ ์ ์ฐจ์ด์ ์ ์ค๋ช ํ์์ค.
- RestAPI๊ณผ Websocket์ ์ฌ์ฉํ๋ ์ํฉ์ ์์๋ฅผ ํตํด์ ์ค๋ช ํ์์ค.