HTTP ํน์ฑ
HTTP๋ stateless, connectionless ํน์ง์ ๊ฐ์ง๊ณ ์์ด ์์ฒญ์ ๋ํ ์๋ต์ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฐ๋ค.
๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ์ ๋ํ ์ด์ ์ ์ํ ์ ๋ณด ๋ฐ ํ์ฌ ํต์ ์ ์ํ๊ฐ ๋จ์์์ง ์๋ค.
์ฐ๊ฒฐ์ ๊ณ์ ์ ์งํ๋ค๋ฉด ์ด์ ๋ฐ๋ฅธ ์์ ๋ญ๋น๊ฐ ์ฌํด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ์ํ๊ฐ ๋จ์์์ง ์์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ ์ ์๋ ๋จ์ ์ด ์๋ค.
๋ก๊ทธ์ธ์ ํ๋๋ผ๋ ๋ค์ ์์ฒญ์์ ํด๋น ํด๋ผ์ด์ธํธ๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ฏ๋ก ๋ค์ ๋ก๊ทธ์ธ์ ํด์ผํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋น์ฐ๊ฒฐ์ฑ๊ณผ ๋ฌด์ํ์ฑ ํน์ง์ ๋ณด์ํ ๊ธฐ์ ์ด Cookie์ Session์ด๋ค.
Cookie
๐ ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ )์ ์ ์ฅ๋๋ ์์ ๋ฐ์ดํฐ ์กฐ๊ฐ
- Key-Valueํ์์ผ๋ก ์ ์ฅ๋๋ฉฐ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ๋งค๋ฒ ์ ์ฅ๋ ์ฟ ํค๋ฅผ ์์ฒญ ํค๋์ Cookie์ ๋ด์ ๋ณด๋
- ์๋ฒ๋ ์ฟ ํค์ ๋ด๊ธด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํด๋น ์์ฒญ์ ํด๋ผ์ด์ธํธ ์๋ณ
๐น ๋จ์
- ๋ณด์์ ์ทจ์ฝ
- ๋ธ๋ผ์ฐ์ ์์ ์ฟ ํค ๊ฐ์ ํ์ธํ ์ ์์ด ์ ์ถ ๋ฐ ์กฐ์ ์ํ ๋ฐ์
- ์ฉ๋ ์ ํ์ด ์์ด ๋ง์ ์ ๋ณด ๋ด์ง ๋ชปํจ
- ์น ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฟ ํค์ ๋ํ ์ง์ ํํ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณต์ ๋ถ๊ฐ๋ฅ
Session
๐ ์น ์๋ฒ ์ธก์ ์ฌ์ฉ์์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
์ฟ ํค๋ง์ ์ด์ฉํด ์ฌ์ฉ์ ์ธ์ฆ์ ๊ตฌํํ๋ค๋ฉด ์ฟ ํค๊ฐ ์ ์ถ, ์กฐ์๋ ์ ์๋ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
HTTP๋ก ๊ฐ์ธ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์ํํ๋ฉฐ ๋ค๋ฅธ ์ฌ๋๋ค๋ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฟ ํค์ ์ ์ฅ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
- Session์ ์ธ์ฆ์ ๋ณด๋ฅผ ์ฟ ํค์ ์ ์ฅํ์ง ์๊ณ ์ฌ์ฉ์์ ์๋ณ์์ธ JSESSIONID๋ฅผ ์ ์ฅ
- ์์ฑ๋ id๋ฅผ ์ฟ ํค์ ๋ด์์ ์ ๋ฌ
- ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ๋ฉด ์ ๋ณด๊ฐ ์ญ์ ๋จ
์ธ์ /์ฟ ํค ๊ธฐ๋ฐ ์ธ์ฆ๋ฐฉ์
- ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ์ ์ํด ํด๋น ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ๋ฌ
- ์๋ฒ๋ ์ ๋ณด๋ฅผ ์ฝ์ด ์ฌ์ฉ์๋ฅผ ํ์ธํ๊ณ ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ฌ์ฉ์๋ฅผ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ์ธ์
ID๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ DB์ ์ ์ฅ
๐ ์ ์ฅํ๋ ๊ณณ = ์ธ์ ์ ์ฅ์. ์ฃผ๋ก Redis๋ฅผ ๋ง์ด ์ฌ์ฉ - ์๋ฒ๋ ์์ฒญ์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ์ธ์
ID๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๋ฌ
- ์ธ์
ID๋ฅผ ์ ๋ฌ๋ฐ์ ์ฌ์ฉ์๋ ์ฟ ํค์ ํด๋น ๊ฐ์ ์ ์ฅ
- ์ดํ ๋ค๋ฅธ ํ์ด์ง ์ด๋์ด๋ ์ฌ์ฉ์ ์ธ์ฆ์ด ํ์ํ ๋ ํค๋์ ํด๋น ์ฟ ํค๋ฅผ ์ค์ด์ ์ ๋ฌ
- ์๋ฒ๋ ์ฟ ํค๋ฅผ ๋ฐ์์ ์ธ์
์ ์ฅ์์ ์ ์ฅ๋ ์ฟ ํค(์ธ์
ID)์ธ์ง ํ์ธ
- ์ ํจํ ์ฟ ํค(์ธ์ ID)์ผ ๊ฒฝ์ฐ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ ๋ฐํ
๐ id, pw๋ฅผ ์ฃผ๊ณ ๋ฐ์ง ๋ง๊ณ ์ธ์ฆ ์ ๋ณด ์์ฒด(=์ธ์ ID)๋ฅผ ํน์ ์ธ์ ์ ์ฅ์์ ์ ์ฅํ๊ณ , ์ด ๊ฐ์ ์ฟ ํค์ ๋ด์ ํด๋ผ์ด์ธํธ๊ฐ ์ฟ ํค๋ฅผ ์์ฒญํ ๋๋ง๋ค ์ธ์ ์ ์ฅ์์ ์๋ ์ ๋ณด์ ๋์ผํ์ง ํ์ธ
๐ ์ธ์ ์ฌ์ฉํ ๋์ ๋จ์
- ์ธ์ ์ ์ฅ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ ์ ์ธ์ฆ ๋ถ๊ฐ
- statefulํ๊ธฐ ๋๋ฌธ์ http์ ์ฅ์ ๋ฐํ ๋ชปํจ
- ์ธ์ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋น์ฉ ๋ฐ์
- ์ฌ์ฉ์๊ฐ ๋ง์์ง์๋ก ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ง ํผ
- ๋งค๋ฒ ์์ฒญ ์ ์ธ์ ์ ์ฅ์ ์กฐํ
JWT (JSON Web Token)
๐ ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ ํ ํฐ์ผ๋ก, JWT(Access Token)์ HTTP ํค๋์ ์ค์ด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์๋ณ
JWT = ์๋ช ๋ ํ ํฐ
- Header
- ํ ํฐ ํ์ ์ด๋ ์๋ช ์์ฑ์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋์๋์ง ์ ์ฅ
- Payload
- ํ ํฐ์ ํฌํจ๋ claim ์ ๋ณด๋ฅผ key-value ํํ๋ก ์ ์ฅ
- Signature
- header๋ฅผ ๋์ฝ๋ฉํ ๊ฐ + payload๋ฅผ ๋์ฝ๋ฉํ ๊ฐ ๐ ์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ธํค๋ก ์ํธํ
์ธ์ ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง JWT๋ ๋ณ๋์ ์ธ์ ์ ์ฅ์๋ฅผ ๊ฐ์ ํ์ง ์๊ธฐ ๋๋ฌธ์ statelessํจ.
signature๋ฅผ ํตํ ๋ณด์์ฑ์ ๊ฐ์ถ๊ณ ์์.
๐ JWT์ ํ๊ณ
- base64 ์ธ์ฝ๋ฉ์ ํตํ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ฏ๋ก ์ ๋ฌ๋์ด ๋ง์ ๐ ๋คํธ์ํฌ ์ ๋ฌ ์ ๋ง์ ๋ฐ์ดํฐ ์์ผ๋ก ๋ถํ ๋ฐ์ ๊ฐ๋ฅ
- payload์ ์ํธํ๊ฐ ๋์ด ์์ง ์์ ๋ฏผ๊ฐ ์ ๋ณด ์ ์ฅ X
- ํ ํฐ์ด ํ์ทจ๋นํ๋ฉด ๋ง๋ฃ๋ ๋๊น์ง ๋์ฒ ๋ถ๊ฐ๋ฅ ๐ Sliding Session ๋๋ Refresh Token์ผ๋ก ํด๊ฒฐ
๐น Sliding Session
- ์ฌ์ฉ์๊ฐ ํ๋ํ๋ ๋์ ์ธ์ ์ ์ง์์ ์ผ๋ก ์ฐ์ฅ
๐น Refresh Token
- Access Token์ด ๋ง๋ฃ๋๋ฉด Refresh Token์ผ๋ก ์๋ฒ์๊ฒ ์๋ก์ด Access Token์ ๋ฐ๊ธํ๋๋ก ์์ฒญ
- ์๋ฒ๋ Refresh Token์ ๋ฐ์ ์๋ฒ์ Refresh Token storage์ ํด๋น ํ ํฐ์ด ์๋์ง ํ์ธํ๊ณ , ์๋ค๋ฉด Access Token ์์ฑํ์ฌ ์ ๋ฌ
์ฐธ๊ณ ์๋ฃ
https://brunch.co.kr/@jinyoungchoi95/1
https://tecoble.techcourse.co.kr/post/2021-05-22-cookie-session-jwt/
'CS > ๐ ๋คํธ์ํฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๐ ๋คํธ์ํฌ] CORS & SOP (0) | 2024.03.20 |
---|