-
HTTP ํ๋กํ ์ฝ์ ๋น์ฐ๊ฒฐ์ฑ(Connectionless), ๋ฌด์ํ์ฑ(Stateless) ํ๋กํ ์ฝ์ด๋ค.
-> ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ๊ธฐ ์ํด์๋ ์ธ์ฆ ์ ์ฐจ๊ฐ ํ์ํ๋ค.
-> ํ์ง๋ง ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ์ ํ๋๋ผ๋ ๋ค์ ์์ฒญ์ ํด๋น ํด๋ผ์ด์ธํธ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ค๋ฉด ์ธ์ฆ ์ ์ฐจ๊ฐ ์ค๋ณต๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
-> ์ฟ ํค, ์ธ์ , ํ ํฐ์ผ๋ก ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ์งํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
- HTTP ๊ธฐ๋ณธ ์ธ์ฆ
- ๊ฐ์ฅ ์ ์๋ ค์ง HTTP ์ธ์ฆ ๊ท์ฝ์ผ๋ก, ์ฌ์ฉ์์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ Base64 ์ธ์ฝ๋ฉํ์ฌ Header์ ๋ด์ ์ ์กํ๋ ์ธ์ฆ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ request๋ฅผ ๋ณด๋ผ ๋๋ง๋ค ์ฌ์ฉ์์ ๊ณ์ ์ ๋ณด๋ฅผ Header์ ๋ด์ ์ ์กํ๋ฏ๋ก ๋ณด์์ ์ทจ์ฝํ๋ค.
- ์๋ฒ ๊ธฐ๋ฐ ์ธ์ฆ
- ์๋ฒ์ ์ธ์ ๊ณผ ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ธ์ฆ ๋ฐฉ์์ด๋ค.
- ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ
- ํด๋ผ์ด์ธํธ์ ์ธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๊ณ , ํ์ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ ํ ํฐ์ ํ์ฉํ๋ ์ธ์ฆ ๋ฐฉ์์ด๋ค.
- ํ ํฐ์ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ง๊ณ ์๋ค๊ฐ ์๋ฒ๋ก reqeust๋ฅผ ๋ณด๋ผ ๋, ์ธ์ฆ ํค๋์ ๋ด์ ๋ณด๋ธ๋ค. ์๋ฒ๋ ํ ํฐ์ ๊ฒ์ฆํ๊ณ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. ์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ธ์ฆ ์ฒ๋ฆฌ๊ฐ ์ด๋ค์ง๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ ํ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ, ๊ทธ ์ฌ์ดํธ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์๋ฒ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์ ์ค์น๋๋ key-value ํํ์ ๋ฌธ์์ด์ด๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์๊ฒ request๋ฅผ ๋ณด๋ธ๋ค.
- ์๋ฒ๋ ์ํ ์ ์ง๋ฅผ ํ๋ ค๋ ๊ฐ์ ์ฟ ํค๋ก ์์ฑํ๊ณ , ์ด๋ฅผ response์ HTTP ํค๋(Set-Cookie)์ ํฌํจํ์ฌ ์ ์กํ๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๋ ์ ๋ฌ๋ฐ์ ์ฟ ํค๋ฅผ ๋ฐ์ ์ ์ฅํ๊ณ , ๋ค์ request๋ฅผ ์ ์กํ ๋ HTTP ํค๋(Cookie)์ ๋ด์์ ์ ์กํ๋ค.
- ์ฟ ํค์ ๋ํ ์ ๋ณด๋ฅผ ๋งค ํค๋์ ์ถ๊ฐํ์ฌ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์๋นํ ํธ๋ํฝ์ ๋ฐ์์ํจ๋ค.
- ํด๋ผ์ด์ธํธ์ request ํค๋์ ์ฟ ํค ๊ฐ์ ๊ทธ๋๋ก ๋ด์ ์ ์กํ๊ณ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์๋ณ์กฐ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ทจ์ฝํ๋ค.
- ์ฟ ํค์ ๊ฐ์, ํฌ๊ธฐ๊ฐ ํ์ ๋์ด์๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฟ ํค์ ๋ํ ์ง์ ํํ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์น๋ธ๋ผ์ฐ์ ๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์น๋ธ๋ผ์ฐ์ ์์ ์ ์ฅํ ์ฟ ํค๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
์ฟ ํค์ ๋ฌธ์ ์ ์ผ๋ก ์ธํ ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ธฐ์ ๋ก, ์ผ์ ์๊ฐ๋์ ๊ฐ์ ์น ๋ธ๋ผ์ฐ์ ๋ก๋ถํฐ ๋ค์ด์ค๋ ์ผ๋ จ์ ์๊ตฌ๋ฅผ ํ๋์ ์ํ๋ก ๋ณด๊ณ ๊ทธ ์ํ๋ฅผ ์ผ์ ํ๊ฒ ์ ์ง์ํจ๋ค.
- ํ๋์ ์ํ = ์ฌ์ฉ์์ ๋ํ ๊ณ ์ ํ ์๋ณ๊ฐ = SessionId
- ์๋ฒ์ ์ ์ฅ๋ ์ธ์ ์ ๊ตฌ๋ถํ๊ธฐ ์ํ SessionId๊ฐ์ ์ ์ฅํ๋ ์ฉ๋๋ก ์ฟ ํค๊ฐ ์ฌ์ฉ๋๋ค.
- ์ ํ๋ธ, ๊ตฌ๊ธ์์ ๋ก๊ทธ์ธํ์ง ์์๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ๋์์์ด๋ ๊ฒ์ ๊ธฐ๋ก์ ์ฟ ํค์ ์ ์ฅํด๋๊ณ , ํด๋น ์ฟ ํค๋ฅผ ๋ฐํ์ผ๋ก ๊ฒ์ ์ต์ ํ์ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
- ์ผํ๋ฌ ์ฌ์ดํธ์์๋ ์ฌ์ฉ์์ ์ผํ ๋ํฅ์ ์ฟ ํค์ ์ ์ฅํ์ฌ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํ์ ์ถ์ฒํ๋ค.
| Cookie | Session | |
|---|---|---|
| ์ ์ฅ์์น | ํด๋ผ์ด์ธํธ์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๋๋ ํ๋๋์คํฌ์ ์ ์ฅ | ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ |
| ์ ์ฅํ์ | Text | Object |
| ๋ง๋ฃ์์ | ์ฟ ํค ์ ์ฅ์ expires ์์ฑ์ผ๋ก ์ค์ (์ค์ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ์ข ๋ฃ ์) | ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์์ํ๊ฑฐ๋, ์ค์ ์๊ฐ๋์ ๋ฐ์์ด ์์ผ๋ฉด ๋ฌดํจํ ๋๊ธฐ ๋๋ฌธ์ ์ ํํ ์์ ์ ์ ์์ |
| ๋ฆฌ์์ค | ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๊ณ ํด๋ผ์ด์ธํธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์์ ์ฌ์ฉํ์ง ์์ | ์ธ์ ์ ์๋ฒ์ ์ ์ฅ๋๊ณ , ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ฉ ๋๊ธฐ ๋๋ฌธ์ ์ธ์ ์ด ์๊ธธ ๋๋ง๋ค ๋ฆฌ์์ค๋ฅผ ์ฐจ์งํจ |
| ์ฉ๋์ ํ | ํด๋ผ์ด์ธํธ๋ ๋ชจ๋ฅด๊ฒ ์ ์๋๋ ์ฌ์ดํธ์ ์ํ์ฌ ์ค์ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ฟ ํค๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฑธ ๋ง๊ณ ์ ํ ๋๋ฉ์ธ๋น 20๊ฐ, ํ๋์ ์ฟ ํค ๋น 4KB๋ก ์ ํํด ๋ | ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๋ฉด ์๋ฒ์ ์ํด ์์ฑ๋๋ฏ๋ก ๊ฐ์๋ ์ฉ๋ ์ ํ ์์ |
- ํด๋ผ์ด์ธํธ๋ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์๋ฒ์๊ฒ ์ ๋ฌํ๋ค.
- ์๋ฒ๋ DB๋ฅผ ํตํด ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๊ฒ์ฆํ๊ณ , ์ ํํ๋ค๋ฉด ์ฌ์ฉ์๋ฅผ ์๋ณํ ๊ณ ์ SessionID๋ฅผ ์์ฑํ๋ค. ์ดํ HTTP response ํค๋์ Set-Cookie ํ๋์ SessionID๋ฅผ ๋ด์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ค.
- ํด๋ผ์ด์ธํธ๋ ์ ๋ฌ๋ฐ์ SessionID๋ฅผ ์ฟ ํค์ ์ ์ฅํ๊ณ , ์์ฒญ์ HTTP request ํค๋์ Cookie ํ๋์ ์ฟ ํค๋ฅผ ๋ด์ ์๋ฒ์ ์ ๋ฌํ๋ค.
- ์๋ฒ๋ ์ฟ ํค๋ฅผ ๋ฐ์ ์ธ์ ์ ์ฅ์๋ฅผ ํตํด SessionID์ ์ ํจ์ฑ์ ํ์ธํ ์ดํ, ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.(์ธ์ ์ ์ฅ์๋ WAS์ ์ธ์ , RDB, In-memory DB๊ฐ ๋ ์ ์๋ค.)
- ์๋ฒ ๋ถํ ๋ฌธ์
- ๋ง์ฝ ์ฌ์ฉ์ ์๊ฐ ๋ง์์ง๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ์ธ์ ์ ๋ณด๊ฐ ๋ง์์ง๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ ๋ถํ๋ฅผ ์ผ์ผํจ๋ค.
- ํ์ฅ์ฑ ๋ฌธ์
- ๋ ๋ง์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์น ์๋ฒ๋ฅผ ์ฆ์คํ ๊ฒฝ์ฐ, ์๋ก์ด ์น ์๋ฒ์ ๊ธฐ์กด์ ์ธ์ ์ ๋ณด๋ฅผ ์ฎ๊ฒจ์ผ ํ๊ธฐ ๋๋ฌธ์ Scaling Out์ด ์ด๋ ค์์ง๋ค.
- CORS ๋ฐฉ์
- ์น ๋ธ๋ผ์ฐ์ ์์ ์ธ์ ๊ด๋ฆฌ ์ฉ๋๋ก ์ฌ์ฉ๋๋ ์ฟ ํค๋ ๋จ์ผ ๋๋ฉ์ธ/์๋ธ ๋๋ฉ์ธ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ Cross-Origin ์์ ์ฟ ํค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด์ฒ๋ผ ์ฟ ํค๋ฅผ ์ฌ๋ฌ ๋๋ฉ์ธ์์ ์ฌ์ฉํ๊ธฐ ๋ฒ๊ฑฐ๋กญ๋ค๋ ์ ์์ ์ฟ ํค, ์ธ์ ์ ์ด์ฉํ ์๋ฒ ๊ธฐ๋ฐ ์ธ์ฆ ์ฒ๋ฆฌ๊ฐ ์ด๋ ต๋ค.
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ ์ ์ธ์ฆ ๋ฐ์ ์ฌ์ฉ์๋ค์๊ฒ ํ ํฐ์ ๋ฐ๊ธํ๊ณ , ์๋ฒ์ ์์ฒญํ ๋๋ง๋ค ํค๋์ ํ ํฐ์ ๋ด์ ๋ณด๋ด๋๋กํ์ฌ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋ค.
- ์ฌ์ฉ์์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์ฅํ์ง ์๊ณ , ํด๋ผ์ด์ธํธ ์ธก์์ ๋ค์ด์ค๋ ์์ฒญ๋ง์ผ๋ก ์ธ์ฆ์ฒ๋ฆฌํ๋ค. (statelessํ ๊ตฌ์กฐ)
- ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์๋ฒ์๊ฒ ์ ๋ฌํ๋ค.
- ์๋ฒ๋ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๊ฒ์ฆํ๊ณ , ์ ํํ๋ค๋ฉด ์ฌ์ฉ์ ์๋ณ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Token์ ๋ฐ๊ธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ค
- ํด๋ผ์ด์ธํธ๋ ์ ๋ฌ๋ฐ์ Token์ ์ฟ ํค๋ localStorage, sessionStorage ๋ฑ์ ์ ์ฅํ๊ณ , ์ดํ ์์ฒญ์์ Token์ ๋ด์ ์ ๋ฌํ๋ค.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ Token์ ๊ฒ์ฆํ๊ณ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
- Stateless & ํ์ฅ์ฑ
- ํ ํฐ์ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ Statelessํ๋ฉฐ, ์๋ฒ ํ์ฅ์ ์ธ์ ์ ๋ณด๋ก ์ธํ Scaling Out์ ์ ์ฝ์ด ์๋ค.
- ์ฌ๋ฌ ํ๋ซํผ ๋ฐ ๋๋ฉ์ธ์์ ์ฌ์ฉ ๊ฐ๋ฅ -> CORS ๋ฌธ์ ํด๊ฒฐ
- ๋๋ฐ์ด์ค์ ์ข ๋ฅ ๋ฐ ๋๋ฉ์ธ๊ณผ ์๊ด์์ด ํ ํฐ ๊ธฐ๋ฐ์ ์ธ์ฆ์ ํ ์ ์๋ค. (์ฃผ๋ก JWT ํ ํฐ์ ์ฌ์ฉ)
JSON ํฌ๋งท์ ์ด์ฉํ์ฌ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ Claim(key-value ํ์์ผ๋ก ์ด๋ฃจ์ด์ง ํ ์์ ์ ๋ณด) ๊ธฐ๋ฐ์ Web Token์ผ๋ก ๋ชจ๋ฐ์ผ์ด๋ ์น์ ์ฌ์ฉ์ ์ธ์ฆ์ ์ํด ์ฌ์ฉํ๋ ์ํธํ ํ ํฐ์ด๋ค.
| ์ฅ์ | ๋จ์ |
|---|---|
| 1. Header์ Payload๋ฅผ ๊ฐ์ง๊ณ Signature๋ฅผ ์์ฑํ๋ฏ๋ก ๋ฐ์ดํฐ ์๋ณ์กฐ๋ฅผ ๋ง์ ์ ์๋ค. | 1. ์ฟ ํค/์ธ์ ๊ณผ ๋ค๋ฅด๊ฒ JWT๋ ํ ํฐ์ ๊ธธ์ด๊ฐ ๊ธธ์ด, ์ธ์ฆ ์์ฒญ์ด ๋ง์์ง์๋ก ๋คํธ์ํฌ ๋ถํ๊ฐ ์ฌํด์ง๋ค. |
| 2. ์ธ์ฆ ์ ๋ณด์ ๋ํ ๋ณ๋์ ์ ์ฅ์๊ฐ ํ์์๋ค. | 2. Payload ์์ฒด๋ ์ํธํ ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ ์ ์ค์ํ ์ ๋ณด๋ ๋ด์ ์ ์๋ค. |
| 3. JWT๋ ํ ํฐ์ ๋ํ ๊ธฐ๋ณธ์ ๋ณด์ ์ ๋ฌํ ์ ๋ณด ๋ฐ ํ ํฐ์ด ๊ฒ์ฆ๋ฌ์์ ์ฆ๋ช ํ๋ ์๋ช ๋ฑ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์์ฒด์ ์ผ๋ก ์ง๋๊ณ ์๋ค. | 3. ํ ํฐ์ ํ๋ฒ ๋ฐ๊ธ ๋๋ฉด ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋ ๋ ๊ณ์ ์ฌ์ฉ๋์ด ํ์ทจ ๋นํ๊ฒ ๋๋ฉด ๋์ฒํ๊ธฐ ํ๋ค๋ค. |
- ์งง์ ๋ง๋ฃ๊ธฐํ ์ค์
- ํ ํฐ์ ๋ง๋ฃ์๊ฐ์ ์งง๊ฒ ์ค์ ํ์ฌ ํ์ทจ๋๋๋ผ๋ ํผํด๋ฅผ ์ต์ํํ ์ ์๋ค. -> ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์์ฃผ ํด์ผํ๋ค๋ ๋ถํธํจ์ด ์กด์ฌํ๋ค.
- Refresh Token
- ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๋ Access Token๊ณผ ํจ๊ป ๊ธด ๋ง๋ฃ ๊ธฐ๊ฐ์ ๊ฐ์ง Refresh Token์ ๋ฐ๊ธํ๋ ์ ๋ต์ ์ทจํ๋ค.
- ์ดํ Access Token์ด ๋ง๋ฃ๋์์ ๋, Refresh Token์ ์ฌ์ฉํ์ฌ Access Token์ ์ฌ๋ฐ๊ธ์ ์์ฒญํ๋ค.
- ์๋ฒ๋ DB์ ์ ์ฅ๋ Refresh Token๊ณผ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ Refresh Token์ ๋น๊ตํ์ฌ ์ ํจํ ๊ฒฝ์ฐ ์๋ก์ด Access Token์ ๋ฐ๊ธํด์ค๋ค.
- ์ดํ Access Token์ด ๋ง๋ฃ๋์์ ๋, Refresh Token์ ์ฌ์ฉํ์ฌ Access Token์ ์ฌ๋ฐ๊ธ์ ์์ฒญํ๋ค.
Refresh Token์ ํ์ฉํ๋ฉด Access Token์ ๋ง๋ฃ ๊ธฐํ์ ์งง๊ฒ ์ค์ ํ๋ฉด์, ์ฌ์ฉ์๊ฐ ์์ฃผ ๋ก๊ทธ์ธ ํ ํ์๊ฐ ์๋ค. ๋ํ ์๋ฒ๊ฐ ๊ฐ์ ๋ก Refresh Token์ ๋ง๋ฃ์ํฌ ์ ์๋ค.
๊ทธ๋ฌ๋ ์๋ฒ์ Statelessํจ์ ๊ฐ๊ฒ ํ๋ค๋ ์ ์์ ์ด์ ์ด ์๋ JWT์ ์ฅ์ ์ ์๋ฒฝํ๊ฒ ๋๋ฆด ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.






