๐ช๐์ฟ ํค์ ์ธ์ ์ ์ฌ์ฉํ๋ ์ด์
HTTP ํ๋กํ ์ฝ์ ๋ณด์ํ๊ธฐ ์ํด์ ์ฌ์ฉ!
HTTP ํ๋กํ ์ฝ์ ํน์ง
- ๋น์ฐ๊ฒฐ์งํฅ(Connectionless)
- ํด๋ผ์ด์ธํธ๊ฐ
์์ฒญ(Request)
์ โก ์๋ฒ์ ๋ณด๋ด๊ณ , ์๋ฒ๋ โก ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ ํ์๋ต(Response)์ ์ฃผ๊ณ ์ฐ๊ฒฐ(Connection)์ ๋๋๋ค.
- HTTP๊ฐ TCP์์์ ๊ตฌํ๋์๊ธฐ ๋๋ฌธ์(TCP๋ ์ฐ๊ฒฐ์งํฅ, UDP๋ ๋น์ฐ๊ฒฐ์งํฅ) ์ฐ๊ฒฐ์งํฅ์ ์ด๋ผ๊ณ ํ ์ ์๋ค๋ ์๊ธฐ๊ฐ ์์ด ๋
ผ๋์ด ์์ง๋ง, ์์ง๊น์ง๋ ๋คํธ์ํฌ ๊ด์ ์์ keep-alive๋ ์ต์
์ผ๋ก ๋๊ณ , ์๋ฒ์ธก์์ ๋น์ฐ๊ฒฐ์งํฅ์ ์ธ ํน์ฑ์ผ๋ก
์ปค๋ฅ์ ๊ด๋ฆฌ์ ๋ํ ๋น์ฉ์ ์ค์ด๋ ๊ฒ์ด ๋ช ํํ ์ฅ์
์ผ๋ก ๋ณด๊ธฐ ๋๋ฌธ์ ๋น์ฐ๊ฒฐ์งํฅ์ผ๋ก ์์๋์๋ค.
- IP ๊ณ์ธต์๋ ์ถ๋ฐ์ง ์ฃผ์์ ๋ชฉ์ ์ง ์ฃผ์๊ฐ ์กด์ฌํ๊ณ , TCP ๊ณ์ธต์๋ ์ถ๋ฐ์ง ํฌํธ, ๋ชฉ์ ์ง ํฌํธ๊ฐ ์กด์ฌํ๋ค. IP๊ฐ ์ํํธ ์ฃผ์๋ผ๋ฉด TCP๋ ๋ฒ์ง, ๋ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํจ
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ํน์ URL๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด DNS ์๋ฒ๊ฐ ๋๋ฉ์ธ์ ๋งคํ๋๋ IP ์ฃผ์๋ฅผ ๋ฐ์์จ๋ค. TCP ๊ณ์ธต์์ HTTP ๋ฉ์์ง๋ฅผ ํจํท์ผ๋ก ๋ถํดํ๋ค. IP ๊ณ์ธต์์ ์ ์ก ์์น๋ฅผ ํ์ธํ๊ณ ๋คํธ์ํฌ๋ฅผ ํตํ์ฌ ์ ์กํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋์ชฝ์ ์์ ๊ณผ์ ์ ์ญ์์ผ๋ก ์งํํ์ฌ ์ฒ๋ฆฌ!!
- ํด๋ผ์ด์ธํธ๊ฐ
- ์ํ์์(Stateless)
- ์ปค๋ฅ์
์ ๋๋ ์๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ์ด ๋๋๋ฉฐ
์ํ ์ ๋ณด๋ ์ ์งํ์ง ์๋ ํน์ฑ
์ด ์๋ค.
- ์ปค๋ฅ์
์ ๋๋ ์๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ์ด ๋๋๋ฉฐ
HTTP๋ ์ด ๋ ๊ฐ์ง ํน์ฑ์ ๋ณด์ํ๊ธฐ ์ํด์ ์ฟ ํค
์ ์ธ์
์ ์ฌ์ฉํ๊ฒ ๋์๋ค.
๐ช์ฟ ํค(Cookie)
HTTP ์ฟ ํค(์น ์ฟ ํค, ๋ธ๋ผ์ฐ์ ์ฟ ํค)๋ ์๋ฒ๊ฐ โก ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ํด๋ผ์ด์ธํธ ๋ก์ปฌ
์ ์ ์กํ๋ ์์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ผ๋ก
ํค์ ๊ฐ(key, value)
์ด ๋ค์ด์๋ค!
์ฟ ํค์๋ ์ด๋ฆ, ๊ฐ, ๋ง๋ฃ ๋ ์ง/์๊ฐ(์ฟ ํค ์ ์ฅ๊ธฐ๊ฐ), ๊ฒฝ๋ก ์ ๋ณด๋ฑ์ด ๋ค์ด์๋ค.
์ฟ ํค๋ ์๋ฒ์์ HTTP Response Header์ Set-Cookie
์์ฑ์ ์ด์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ฅผ ์ ๊ณตํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ๊ทธ ๋ฐ์ดํฐ ์กฐ๊ฐ๋ค์ ์ ์ฅํด ๋์๋ค๊ฐ, ๋์ผํ ์๋ฒ์ ์ฌ ์์ฒญ(Request) ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ ์กํ๋ค.
์ฟ ํค๋ ๋ ์์ฒญ์ด ๋์ผํ ๋ธ๋ผ์ฐ์ ์์ ๋ค์ด์๋์ง ์๋์ง๋ฅผ ํ๋จํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
์ํ๊ฐ ์๋(stateless) HTTP ํ๋กํ ์ฝ์์ ์ํ ์ ๋ณด๋ฅผ ๊ธฐ์ต์์ผ์ฃผ๊ธฐ ๋๋ฌธ์ โก ์ด๋ฅผ ์ด์ฉํ๋ฉด ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
์ธ์ ์ฟ ํค(Session Cookie)์ ์ง์ ์ฟ ํค(Persistent Cookie)
์ฟ ํค๋ ์ธ์
์ฟ ํค(Session Cookie)
์ ์ง์ ์ฟ ํค(Persistent Cookie)
๋ก ๋๋๋ค.
๋ง๋ฃ ๋ ์ง/์๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด, '๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋์' ๊ณ์ ์ ํจํ๋ค๊ณ ํ๋จํ๋๋ก ์ธ์ ์ฟ ํค์ ์ ์ฅ๋๊ณ ,
๋ง๋ฃ ๋ ์ง/์๊ฐ์ ์ง์ ํ๋ฉด ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋๋ผ๋(๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ง๋๋ผ๋) ํน์ ๋ง๋ฃ๋ ์ง/์๊ฐ๊น์ง ์ ํจํ๋ฏ๋ก ์ง์ ์ฟ ํค์ ์ ์ฅ๋๋ค.
์ธ์ ์ฟ ํค๋
๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
๋๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋๋ฉด ์ฟ ํค๋ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
์ง์ ์ฟ ํค๋
ํ์ผ๋ก ์ ์ฅ
๋๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋์ด๋ ์ฟ ํค๋ ๋จ์์๊ฒ ๋๋ค.
→ ์ฐธ๊ณ ๋ก ์ธ์ ์ฟ ํค์ ๊ฐ์ ๋ณด์์ ๊ฝค๋ ์์ ํ ๋ธ๋ผ์ฐ์ (ex. ๊ตฌ๊ธ ํฌ๋กฌ)์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ ๋ฆฌํ์ง๋ง,
ํ์ผ๋ก ์ ์ฅ๋๋ ์ง์ ์ฟ ํค์ ๊ฒฝ์ฐ ๋น๊ต์ ์ผ๋ก ๋ณด์์ ์ทจ์ฝํ๋ค.
์ฟ ํค ํ๋ก์ธ์ค
- ๋ธ๋ผ์ฐ์ ์์ ์นํ์ด์ง์ ์ ์ํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ(request) ์นํ์ด์ง๋ฅผ ๋ฐ์ผ๋ฉด์ โก HTTP ํค๋๋ฅผ ํตํด ํด๋น ์๋ฒ์์ ์ ๊ณตํ๋ ์ฟ ํค ๊ฐ์ ์๋ต์ผ๋ก ์ค๋ค. (์ด๋ฌ๋ฉด ํด๋ผ์ด์ธํธ๋ ํด๋น ์ฟ ํค๋ฅผ ์ ์ฅํ๋ค.)
- ํด๋ผ์ด์ธํธ๊ฐ ์ฌ ์์ฒญ์ ์นํ์ด์ง ์์ฒญ๊ณผ ํจ๊ป & HTTPํค๋์ ๋ด์์ ์ฟ ํค๊ฐ๋ ์ ์ก
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์์ ์ฟ ํค ๊ฐ์ ์ฐธ๊ณ ํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ค. (ex ๋ก๊ทธ์ธ ์ํ ์ ์ง, ...)
์ฟ ํค ์ฌ์ฉ ์ฌ๋ก
- ์๋๋ก๊ทธ์ธ, ํ์ ์์ "์ค๋ ๋ ์ด์ ์ด ์ฐฝ์ ๋ณด์ง ์์" ์ฒดํฌ, ์ผํ๋ชฐ์ ๋นํ์ ์ฅ๋ฐ๊ตฌ๋, ...
์ฟ ํค์ ํ๊ณ
- ํด๋ผ์ด์ธํธ์ ์ต๋ 300๊ฐ ๊น์ง ์ฟ ํค๋ฅผ ์ ์ฅํ ์ ์๋ค.
- ์๋ฒ ๋๋ฉ์ธ ํ๋๋น ์ต๋ 20๊ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ ์ ์๋ค.
- ํ๋์ ์ฟ ํค ๊ฐ์ ์ต๋ 4KB๊น์ง ์ ์ฅํ ์ ์๋ค.
→ ์ฟ ํค๋ ์ฌ์ฉ์๊ฐ ๋ณ๋๋ก ์์ฒญํ์ง ์์๋ ๋ธ๋ผ์ฐ์ (Client)์์ ์๋ฒ์ ์์ฒญ(Request) ์์ Request Header์ ์ฟ ํค ๊ฐ์ ๋ฃ์ด ์์ฒญํ๋ค. (=์๋์ด๋ค.)
๊ทธ๋ ๋ค๊ณ ๊ทธ ๋ง์ ์ฟ ํค ๊ฐ์ ๊ตณ์ด ๋ชจ๋ ์์ฒญ์ ๋ฃ์ด์ ๋นํจ์จ์ ์ผ๋ก ๋์ํ์ง๋ ์๋๋ค.
๋๋ฉ์ธ ์ค์ ์ ํตํด์ ์ง์ ํ ๋๋ฉ์ธ์ผ๋ก ์์ฒญํ ๋๋ง ์ฟ ํค ๊ฐ์ด ์ ๊ณต๋๋๋ก ํ ์๋ ์๋ค.
โ ์ง๊ธ์modern storage APIs
๋ฅผ ์ฌ์ฉํด ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ฑธ ๊ถ์ฅํ๋ค.
๋ชจ๋ ์์ฒญ๋ง๋ค ์ฟ ํค๊ฐ ํจ๊ป ์ ์ก๋๊ธฐ ๋๋ฌธ์, (ํนํ mobile data connections์์) ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ์์ธ์ด ๋ ์ ์๋ค.
์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅํ๋ ค๋ฉด Modern APIs์ ์ข ๋ฅ์ธ ์น ์คํ ๋ฆฌ์ง API (localStorage์ sessionStorage) ์ IndexedDB๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ผ์ดํ์ฌ์ดํด
- ์ฟ ํค ์ ํจ ์๊ฐ์ด ๋ง๋ฃ๋๋ฉด ์ข ๋ฃ
- ๋ธ๋ผ์ฐ์ ์ฌ์์ ํด๋ ์ข ๋ฃ๋์ง ์์
- ์ ํจ์๊ฐ ๋ง๋ฃ๋๋ ํด๋ผ์ด์ธํธ์ ์์ (๊ทธ๋์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์ ํ์!)
๐์ธ์ (Session)
์๋ฒ(Server)์
ํด๋ผ์ด์ธํธ์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅ
ํ๋ ๊ธฐ์ ๋ก ๋ ผ๋ฆฌ์ ์ธ ์ฐ๊ฒฐ์ ์ธ์ ์ด๋ผ๊ณ ํ๋ค.
์น ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ , ํด๋ผ์ด์ธํธ์๊ฒ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ๋ถํ ์ ์๋ ID
๋ฅผ ๋ถ์ฌํ๋๋ฐ ์ด๊ฒ์
์ธ์
์์ด๋
๋ผ ํ๋ค.
์ธ์ ํ๋ก์ธ์ค
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญํ์ ๋, ํ์์ ๋ฐ๋ผ ์ธ์ ์ ํด๋ผ์ด์ธํธ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ธ์ ์์ด๋๋ฅผ ์๋ต์ ํตํด ๋ฐ๊ธํด์ค๋ค. (๋ธ๋ผ์ฐ์ ๋จ์์ ๊ด๋ฆฌ๋ ์ ์๋๋ก ์ฟ ํค๋ก ๋ฐ๊ธํ๋๊ฒ ์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ)
- ํด๋ผ์ด์ธํธ๋ ๋ฐ๊ธ๋ฐ์ ์ธ์ ์์ด๋๋ฅผ ์ฟ ํค๋ก ์ ์ฅํ๋ค. (ex. JSESSIONID)
- ํด๋ผ์ด์ธํธ๋ ๋ค์ ์๋ฒ์ ์์ฒญํ ๋, ์ธ์ ์์ด๋๋ฅผ ์๋ฒ์ ์ ๋ฌํ์ฌ ์ํ ์ ๋ณด๋ฅผ ์๋ฒ๊ฐ ํ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
์ธ์ ์ฌ์ฉ ์ฌ๋ก
- ๋ก๊ทธ์ธ ์ ๋ณด ์ ์ง
๋ผ์ดํ์ฌ์ดํด
- ์ธ์ ์ ํจ์๊ฐ์ด ๋ง๋ฃ๋๋ฉด ์ข ๋ฃ
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋๋ฉด ์ญ์ ๋จ
๐ช๐์ฟ ํค์ ์ธ์ ์ ์ฐจ์ด
์ ์ฅ ์์น
- ์ฟ ํค๋ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ๋ฉ๋ชจ๋ฆฌ ๋๋ ํ์ผ์ ์ ์ฅํ๊ณ , ์ธ์ ์ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ค.
๋ณด์
- ์ฟ ํค๋ ํด๋ผ์ด์ธํธ ๋ก์ปฌ(local)์ ์ ์ฅ๋๊ธฐ๋ ํ๊ณ ํนํ ํ์ผ๋ก ์ ์ฅ๋๋ ๊ฒฝ์ฐ ํ์ทจ, ๋ณ์กฐ๋ ์ํ์ด ์๊ณ , Request/Response์์ ์ค๋์ดํ ๋นํ ์ํ์ด ์์ด ๋ณด์์ด ๋น๊ต์ ์ทจ์ฝํ๋ค. ๋ฐ๋๋ก Session์ ํด๋ผ์ด์ธํธ ์ ๋ณด ์์ฒด๋ ์๋ฒ์ ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก ๋น๊ต์ ์์ ํ๋ค.
๋ผ์ดํ ์ฌ์ดํด
- ์ฟ ํค๋ ์์ ์ค๋ช
ํ
์ง์ ์ฟ ํค์ ๊ฒฝ์ฐ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ๋๋ผ๋ ์ ์ฅ๋์ด ์์ ์ ์๋
๋ฐ๋ฉด์ ์ธ์ ์ ์๋ฒ์์ ๋ง๋ฃ์๊ฐ/๋ ์ง๋ฅผ ์ ํด์ ์ง์๋ฒ๋ฆด ์ ์๊ธฐ๋ ํ๊ณ ์ธ์ ์ฟ ํค์ ์ธ์ ์์ด๋๋ฅผ ์ ํ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ์ข ๋ฃ์ ์ธ์ ์์ด๋๊ฐ ๋ ์๊ฐ ์ ์๋ค.
์๋
- ์ฟ ํค์ ์ ๋ณด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฟ ํค์ ์ ๋ณด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ์์ฒญ์ ํค๋๋ฅผ ๋ฐ๋ก ์ฐธ์กฐํ๋ฉด ๋๋ฏ๋ก ์๋์์ ์ ๋ฆฌํ์ง๋ง, ์ธ์ ์ ์ ๊ณต๋ฐ์ ์ธ์ ์์ด๋(Key)๋ฅผ ์ด์ฉํด์ ์๋ฒ์์ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํด์ผํ๋ฏ๋ก ์๋๊ฐ ๋น๊ต์ ๋๋ฆด ์ ์๋ค.
ํ์ฉ์ฉ๋
์ธ์ ์ ์ฃผ๋ก ์ฌ์ฉํ๋ฉด ์ข์๋ฐ ์ ๊ตณ์ด ์ฟ ํค๋ฅผ ์ฌ์ฉํ ๊น?
→ ์ธ์
์์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์์์ ํ๊ณ๊ฐ ์๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์๋ ์ ํ๋ ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.