Browser Storage โ
๐งฉ Reference
์ฟ ํค (Cookie)
- ์๋ฒ๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ฌ์ฉ์์ ๋ํ ์์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ์ ์ฅํด๋๋ ๋ฐฉ์.
- ๋ธ๋ผ์ฐ์ ๋ ์ดํ ๊ฐ์ ๋๋ฉ์ธ์ผ๋ก ์์ฒญ์ ๋ณด๋ผ ๋ ์ด ์ฟ ํค๋ฅผ ์๋์ผ๋ก ํจ๊ป ์ ์กํ๋ค.
์ธ์ (Session)
- ์๋ฒ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ด ์ฌ์ฉ์๋ ๋๊ตฌ์ธ์ง์ ๋ํ ์ํ(์ธ์ ๋ฐ์ดํฐ)๋ฅผ ๋ค๊ณ ์๊ณ ,
- ๋ธ๋ผ์ฐ์ ์๋ ๊ทธ ์ธ์ ์ ๊ฐ๋ฆฌํค๋ ์ธ์ ID๋ง ์ฟ ํค๋ก ์ ์ฅํ๋ ๋ฐฉ์์ ์ธ์ฆ ๋ชจ๋ธ.
ํ ํฐ (Token)
- ์๋ฒ๊ฐ ๋ฐ๊ธํ๋ โ์๋ช ๋ ์ธ์ฆ ์ ๋ณด ๋ญ์นโ.
- ๋ณดํต ์ด ํ ํฐ์ ๋ค๊ณ ๋ค๋๋ฉด์, ๋งค ์์ฒญ๋ง๋ค Authorization ํค๋ ๋ฑ์ ์ง์ ์ค์ด ๋ณด๋ด ์ธ์ฆํ๋ค.
JWT (JSON Web Token)
- ํ ํฐ ํฌ๋งท์ ํ ์ข
๋ฅ๋ก,
header.payload.signature ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง JSON ๊ธฐ๋ฐ ์๋ช ํ ํฐ. - payload ์์ ์ ์ ID, ๋ง๋ฃ ์๊ฐ ๊ฐ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ,
์๋ฒ๋ ์ด ํ ํฐ์ด ์์กฐ๋์ง ์์๋์ง๋ง ๊ฒ์ฆํ๊ณ ์ธ์ ์ ๋ฐ๋ก ๋ค๊ณ ์์ง ์์๋ ๋๋ค.
๐งฉ ์๋ ์ ๋ฆฌ๋ฅผ ํ๊ณ ๊นจ๋ฌ์ ์ !
- RefreshToken์ ์ localStorage์ ์ ์ฅํ๋ฉด ์ํํ์ง
โ localStorage๋ JS๋ก ์ฝํ์ XSS์ ๊ทธ๋๋ก ํธ๋ฆฌ๊ธฐ ๋๋ฌธ. - httpOnly ์ฟ ํค๊ฐ ์ XSS์ ์์ ํ์ง
โ JS ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํด ์คํฌ๋ฆฝํธ๊ฐ ๋ ๋ ์ฟ ํค ๊ฐ์ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ. - localStorage vs sessionStorage vs memory
โ ๋ชจ๋ JS ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง, ๋ณด์กด ๊ธฐ๊ฐยท๋ฒ์๊ฐ ๋ฌ๋ผ์ ์ฉ๋์ ๋ง๊ฒ ์ ํํด์ผ ํ๋ค. - AccessToken์ ์ Authorization ํค๋์ ์ค์ด์ผ ํ๋์ง โ ์ฟ ํค ์๋ ์ ์ก์ ํผํ๊ณ , ๋ช ์์ ์ผ๋ก ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ณด๋ด CSRF ์ํ์ ์ค์ด๊ธฐ ์ํด์.
- JWT ์ธ์ฆ์ HTTP/HTTPS ๊ท์ฝ ์์์ ์์ง์ธ๋ค๋ ์
โ ํ ํฐ ์ ๋ฌยท์ฟ ํค ์ ์ฅยท401 ์๋ตยท์ฌ๋ฐ๊ธ ํ๋ฆ์ ๋ชจ๋ HTTP ํ๋กํ ์ฝ ๊ท์น์ ๋ฐ๋ฅธ ๋์์ด๋ค.
์น ์ธ์ฆ์ ์ดํดํ๋ ค๋ฉด, ๋จผ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ค ์ ์ฅ์๋ค์ ์ ๊ณตํ๋์ง ํ์คํ ์์์ผ ํ๋ค!
๋ธ๋ผ์ฐ์ ์๋ ํฌ๊ฒ ๋ค ๊ฐ์ง ์ ์ฅ์๊ฐ ์๋ค:
- Memory (JS ๋ฉ๋ชจ๋ฆฌ)
- LocalStorage
- SessionStorage
- Cookie
Memory (์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ชจ๋ฆฌ) โ
๋ฉ๋ชจ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ํญ์ด ์ด๋ ค ์๋ ๋์, JS ๋ฐํ์์ด ๋ค๊ณ ์๋ ํ๋ฐ์ฑ ๋ฐ์ดํฐ ์์ญ์ด๋ค.
React state, Zustand, context ๋ฑ์ ์ ์ฅ๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ค.
ํน์ง โ
- ์๋ก๊ณ ์นจํ๋ฉด ์ฌ๋ผ์ง๋ค.
- XSS์ ์ทจ์ฝํ๋ค. (JS๊ฐ ์ฝ์ ์ ์์ผ๋ฏ๋ก)
- ์๋๋ ๊ฐ์ฅ ๋น ๋ฅด๋ค.
- ๋ธ๋ผ์ฐ์ ํญ์ ๋ซ์ผ๋ฉด ์ฌ๋ผ์ง๋ค.
- ์๋ฒ๋ก ์๋ ์ ์ก๋์ง ์๋๋ค. (์ฟ ํค์ ๋ค๋ฆ)
JWT์์ ์ด๋ป๊ฒ ์ธ๊น? โ
AccessToken์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฃ๋ ์๋น์ค๊ฐ ๋ง๋ค.
- AT๋ ์งง๊ฒ ์ด์์ ํธ๋ ค๋ ํผํด ์๋ค.
- JS์์ ๊ด๋ฆฌํด๋ ๋๋ค.
- ์๋ ์ ์ก๋์ง ์์ CSRF ์ํ์ด ์๋ค.
- ์๋ก๊ณ ์นจํด๋ RefreshToken์ด ์ฟ ํค์ ์์ผ๋ ์ฌ๋ฐ๊ธํ๋ฉด ๋๋ค.
์ฆ, AccessToken์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด๋ ๊ด์ฐฎ๋ค.
LocalStorage โ
๋๋ฉ์ธ๋ณ๋ก ํค-๊ฐ ์์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๋ ๋ธ๋ผ์ฐ์ ๋ด์ฅ ์ ์ฅ์์ด๋ค.
๋ธ๋ผ์ฐ์ ๋ฅผ ๊บผ๋ ๋จ์ ์๊ณ , JS์์ localStorage API๋ก ์ฝ๊ณ ์ธ ์ ์๋ค.
ํน์ง โ
- ๋ธ๋ผ์ฐ์ ๋ฅผ ๊บผ๋ ์ ์ง๋๋ค.(์๊ตฌ ์ ์ฅ)
- ์ ์ฅํ ์ ์๋ ์ฉ๋์ด ํฌ๋ค.
- JS๋ก ์ ๊ทผ ๊ฐ๋ฅ โ XSS ๊ณต๊ฒฉ์ ์ํด ๊ฐ์ด ๊ทธ๋๋ก ์ ์ถ๋ ์ ์๋ค.
- ์๋ฒ๋ก ์๋ ์ ์ก๋์ง ์์ (์ฟ ํค์ ๋ค๋ฆ)
์ธ์ ์ฌ์ฉํ ๊น? โ
- ์ฌ์ฉ์ ์ค์ (ํ ๋ง, ์ธ์ด, UI ์ํ)
- ๋ก๊ทธ์ธ ์ฌ๋ถ(Boolean๋ง)
- ๊ฐ๋จํ ์บ์ ๋ฑ
JWT์์๋? โ
AccessToken์ ์ฌ๊ธฐ์ ์ ์ฅํ๋ ์๋น์ค๋ ์์ง๋ง ๋ณด์ ๊ด์ ์์๋ ๋น์ถ์ฒ์ด๋ค.
- XSS ๊ณต๊ฒฉ์์ localStorage๋ ๋ฐ๋ก ํธ๋ฆฐ๋ค. = AccessToken ํ์ทจ
- ๋งค์ฐ ์ํํ์ง๋ ์์ง๋ง(AT๋ง ํธ๋ฆฌ๋ฉด ์ฌ๋ฐ๊ธ ๊ฐ๋ฅํ๋๊น) ๊ทธ๋๋ ์ข์ง๋ ์๋ค.
์ถ๊ฐ๋ก, localStorage๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๊บผ๋ ๊ณ์ ๋จ์ ์๋ ์๊ตฌ ์ ์ฅ์๋ผ์,
์๋ ์งง๊ฒ ์ฐ๊ณ ๋ฒ๋ ค์ผ ํ AccessToken์ด ๋ถํ์ํ๊ฒ ์ค๋ ์ด์๋จ๋๋ค๋ ์ ๋ ์ํ ์์๋ค.
โ ํ ํฐ์ด ์ ํจ ๊ธฐ๊ฐ ๋์ ๋ธ๋ผ์ฐ์ ์ ๊ณ์ ๋จ์ ์์ผ๋, ํ์ทจ ๊ฐ๋ฅ ๊ธฐ๊ฐ๋ ํจ๊ป ๊ธธ์ด์ง๋ค.
๐ก
AccessToken = localStorage ๊ฐ๋ฅํ๋ XSS ์ทจ์ฝ
RefreshToken = ์ ๋ localStorage ๊ธ์ง
SessionStorage โ
localStorage์ ๋น์ทํ์ง๋ง ๋ธ๋ผ์ฐ์ ํญ(์ธ์
) ๋จ์๋ก ์ ์ง๋๋ ํค-๊ฐ ์ ์ฅ์์ด๋ค.
๊ตฌ์กฐ๋ localStorage์ ๊ฐ์ง๋ง, ํญ์ ๋ซ์ผ๋ฉด ํจ๊ป ์ฌ๋ผ์ง๋ค.
ํน์ง โ
- ํญ ๋ซ์ผ๋ฉด ๋ ์๊ฐ๋ค.
- ์๋ก๊ณ ์นจํด๋ ์ ์ง๋๋ค.
- JS ์ ๊ทผ ๊ฐ๋ฅ โ XSS ์ทจ์ฝํ๋ค.
JWT์์ ์ด๋ป๊ฒ ์ธ๊น? โ
JWT์์๋ sessionStorage ๊ฑฐ์ ์ฐ์ง ์๋๋ค.
Cookie โ
HTTP ์์ฒญ/์๋ต ํค๋๋ฅผ ํตํด ์๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ์์ ํ
์คํธ ์กฐ๊ฐ์ด๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์ ์ฅยท๊ด๋ฆฌํ๋ฉฐ, ๊ฐ์ ๋๋ฉ์ธ์ผ๋ก ์์ฒญ์ ๋ณด๋ผ ๋ Cookie ํค๋์ ์๋์ผ๋ก ์ค์ด ๋ณด๋ธ๋ค.
์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ ๋ง์ ๋ฃ๊ณ ์ง์ ๊ด๋ฆฌํ๋ฏ๋ก ํ๋ก ํธ์์ ์ฟ ํค ์ ์ฅ์ ํ์ง ์์๋ ๋๋ค.
์๋ฒ๊ฐ ์ฟ ํค๋ฅผ ์ ์ฅํ๋ ๊ณผ์ โ
Set-Cookie: refresh_token=abc123; HttpOnly; Secure; SameSite=Strict์ด๋ ๊ฒ ์๋ฒ๊ฐ ์๋ต์ ๋ด๋ ค์ฃผ๋ฉด:
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค๋ฅผ ์๋์ผ๋ก ์ ์ฅํ๋ค.
- ๊ฐ์ ๋๋ฉ์ธ์ผ๋ก ์์ฒญ์ ๋ณด๋ผ ๋ ์๋์ผ๋ก Cookie ํค๋์ ์ค๋ ค ๋๊ฐ๋ค.
Cookie: refresh_token=abc123;์ฟ ํค ์์ฑ๋ค โ
| ์์ฑ | ๊ฐ | ์ค๋ช | ์์ |
|---|---|---|---|
| httpOnly | true/false | JS ์ ๊ทผ ์ฐจ๋จ โ XSS ๋ฐฉ์ด | HttpOnly |
| Secure | true/false | HTTPS์์๋ง ์ ์ก | Secure |
| SameSite | Strict/Lax/None | CSRF ๋ฐฉ์ง ์์ค ์กฐ์ | SameSite=Strict |
| Domain | ๋๋ฉ์ธ๋ช | ์ฟ ํค ์ ์ฉ ๋๋ฉ์ธ ๋ฒ์ | Domain=.example.com |
| Path | ๊ฒฝ๋ก | ์ฟ ํค ์ ์ฉ ๊ฒฝ๋ก ๋ฒ์ | Path=/api |
| Max-Age | ์ด | ์ฟ ํค ์๋ช (์ด ๋จ์) | Max-Age=604800 (7์ผ) |
| Expires | ๋ ์ง | ์ฟ ํค ๋ง๋ฃ ์ ๋ ์๊ฐ | Expires=Wed, 21 Oct 2025 |
ํนํ Path๋ฅผ /auth ๋ /api/auth์ฒ๋ผ ์ต๋ํ ์ข๊ฒ ์ค์ ํ๋ฉด,
์ฟ ํค๊ฐ ์ ์ก๋๋ ์์ฒญ ๋ฒ์๋ฅผ ์ค์ผ ์ ์์ด์ ๊ณต๊ฒฉ ํ๋ฉด์ ์ค์ด๋ ๋ฐ ๋์์ด ๋๋ค.
SameSite ์์ธ:
Strict: ์์ ๋์ผ ์ฌ์ดํธ๋ง โ ๊ฐ์ฅ ์์ , UX ๋ถํธLax: GET + ํ๋ ๋ฒจ ๋ค๋น๊ฒ์ด์ ํ์ฉ โ ๊ธฐ๋ณธ๊ฐ, ๊ท ํ์ None: ๋ชจ๋ ํฌ๋ก์ค์ฌ์ดํธ ํ์ฉ โ Secure ํ์
์ผ๋ฐ ์ฟ ํค vs httpOnly ์ฟ ํค ๋น๊ต โ
| ๊ตฌ๋ถ | Cookie (์ผ๋ฐ) | Cookie (httpOnly) |
|---|---|---|
| JS ์ ๊ทผ ๊ฐ๋ฅ ์ฌ๋ถ | O (document.cookie) | X (JS ์ ๊ทผ ๋ถ๊ฐ) |
| XSS ๊ณต๊ฒฉ | ๋งค์ฐ ์ทจ์ฝ | ์์ |
| CSRF ์ํ | ๋์ผ (๋ ๋ค ์๋ ์ ์ก) | ๋์ผ |
| JWT์ ์ ํฉ? | ๋ถ์ ํฉ | RefreshToken ์ ์ฅ ํ์ค ๋ฐฉ์ |
| ์๋ฒ ์ ์ด ๊ฐ๋ฅ? | O | O |
์ RefreshToken์ ์ฟ ํค์ฌ์ผ ํ ๊น? โ
1. ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ์ ์ก์ด ํ์ํ๋ค. โ
RefreshToken์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์ ์์ ํ์ธํ๋ ์ฉ๋๋ค.
์ด๊ฑธ ํ๋ก ํธ์์ ์ง์ ๊บผ๋ด์ ๋ถ์ด๋ ๊ตฌ์กฐ๋ก ๋ง๋ค๋ฉด ์๋๋ค.
์ฟ ํค๋ ์๋ ์ ์ฅ, ์๋ ์ ์ก, JS ์ ๊ทผ ๋ถ๊ฐ
์ด ํน์ง ๋๋ฌธ์ RefreshToken์ ๋ฃ๊ธฐ ์ต์ ํ๋ ์ ์ฅ ๊ณต๊ฐ์ด๋ค.
2. XSS๋ก๋ถํฐ ๋ณดํธํด์ผ ํ๋ค. โ
localStorage / sessionStorage / ๋ฉ๋ชจ๋ฆฌ๋ JS๋ก ์ ๊ทผ ๊ฐ๋ฅ โ XSS ๊ณต๊ฒฉ์ ์ทจ์ฝ
httpOnly ์ฟ ํค๋ JS๋ก ์ฝ์ ์ ์๋ค.
3. RefreshToken ํ์ทจ = ๊ณ์ ์๊ตฌ ์ฅ์ โ
RT๊ฐ ์ฌ๋ฐ๊ธ ํ ํฐ์ด๋ฏ๋ก ํธ๋ฆฌ๋ฉด ์ธ์
์๊ตฌ ์ฅ์
์ด๋ค.
โ RT๋ ์ ๋ ๋
ธ์ถ๋๋ฉด ์ ๋๋ฏ๋ก httpOnly + Secure + SameSite ์ฟ ํค๋ฅผ ์ฌ์ฉ.
Memory vs LocalStorage ์ ์ฅ ์ ๋ต โ
AccessToken ์ ์ฅ ์์น ์ ํ ๊ธฐ์ค:
| ๊ธฐ์ค | Memory | LocalStorage |
|---|---|---|
| ๋ณด์(XSS) | ์ํ | ๋งค์ฐ ์ํ |
| CSRF | ์์ | ์์ |
| ์๋ก๊ณ ์นจ | ์ฌ๋ผ์ง | ์ ์ง๋จ |
| UX ํธ์์ฑ | ๋ฎ์ | ๋์ |
| ๊ถ์ฅ ์ฌ๋ถ | ๊ถ์ฅ | ์กฐ๊ฑด๋ถ ๊ฐ๋ฅ |
์ ๋ฆฌ :
- ์ต๋ ๋ณด์ = Memory
- ํธ์์ฑ ์ค์ = LocalStorage
์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ vs JWT ์ธ์ฆ โ
| ๊ตฌ๋ถ | ์ธ์ ๊ธฐ๋ฐ | JWT ๊ธฐ๋ฐ |
|---|---|---|
| ์๋ฒ ์ ์ฅ์ | ์ธ์ ์ ์ฅ์ ํ์ | ๋ฌด์ํ(stateless) |
| ํ์ฅ์ฑ | ๋ฎ์ | ๋์ (๋ถ์ฐ ์๋ฒ์์ ์ข์) |
| ํ ํฐ ํฌ๊ธฐ | ์์ (์ธ์ ID) | ํผ (header+payload+signature) |
| RT ํ์ ์ฌ๋ถ | ํ์ ์์ | ํ์ (์ฌ๋ฐ๊ธ์ฉ) |
| ๋ณด์ ์์ค | ๋์ | ๊ตฌํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง |
๋ธ๋ผ์ฐ์ ์ ์ฅ์ ์ฉ๋ ์ ํ โ
| ์ ์ฅ์ | ์ฉ๋ ์ ํ | ์ถ๊ฐ ์ ํ์ฌํญ |
|---|---|---|
| Memory | ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ผ | ํญ ๋ซ์ผ๋ฉด ์ฌ๋ผ์ง |
| LocalStorage | 5-10MB (๋ธ๋ผ์ฐ์ ๋ณ ์์ด) | ๋๋ฉ์ธ๋น ์ ํ |
| SessionStorage | 5-10MB | ํญ๋ณ ๋ ๋ฆฝ์ |
| Cookie | 4KB/๊ฐ, 50๊ฐ/๋๋ฉ์ธ | ๋ชจ๋ ์์ฒญ์ ์๋ ์ ์ก |
JWT RefreshToken ์ฃผ์์ :
- JWT๊ฐ ๊ธธ๋ฉด ์ฟ ํค 4KB ์ด๊ณผ ๊ฐ๋ฅ
- ์ด๋๋ JWT ๋์ ์ธ์ ID ๋ฐฉ์ ๊ณ ๋ ค
์ ๋ฆฌ โ
| ๊ตฌ๋ถ | Memory | LocalStorage | SessionStorage | Cookie (httpOnly) |
|---|---|---|---|---|
| ์ ์ง ๊ธฐ๊ฐ | X (ํญ ์ข ๋ฃ ์ ์ญ์ ) | O (๋ธ๋ผ์ฐ์ ๊บผ๋ ์ ์ง) | X (ํญ ๋ซ์ผ๋ฉด ์ญ์ ) | O (๋ง๋ฃ ์๊ฐ๊น์ง ์ ์ง) |
| ์๋ก๊ณ ์นจ ์ํฅ | X (์ฌ๋ผ์ง) | O (์ ์ง๋จ) | O (์ ์ง๋จ) | O (์ ์ง๋จ) |
| ๋ธ๋ผ์ฐ์ ์๋ ์ ์ก | X | X | X | O (Cookie ํค๋๋ก ์๋ ์ ์ก) |
| JS ์ ๊ทผ ๊ฐ๋ฅ ์ฌ๋ถ | O (์ ๊ทผ ๊ฐ๋ฅ โ XSS ์ทจ์ฝ) | O (์ ๊ทผ ๊ฐ๋ฅ โ XSS ๋งค์ฐ ์ทจ์ฝ) | O (์ ๊ทผ ๊ฐ๋ฅ โ XSS ์ทจ์ฝ) | X (์ ๊ทผ ๋ถ๊ฐ โ XSS ์์ ) |
| ์ฌ์ฉ ์ฉ๋ | AccessToken, ์ฑ ์ํ | ์ฌ์ฉ์ ์ค์ , ์บ์, UI ์ํ | ํญ ๊ธฐ๋ฐ ์์ ๋ฐ์ดํฐ | RefreshToken, ์ธ์ฆ ์ ์ง |
| ๋ณด์ ์ํ ๋ชจ๋ธ | XSS ์ทจ์ฝ | XSS ๋งค์ฐ ์ทจ์ฝ | XSS ์ทจ์ฝ | XSS ์์ / CSRF ๊ณ ๋ ค ํ์ |
| ์๋ฒ๊ฐ ํต์ ๊ฐ๋ฅ? | X | X | X | O (์๋ฒ๊ฐ Set-Cookie๋ก ๊ด๋ฆฌ) |
| ์ ํฉํ JWT ์ญํ | AccessToken(์ถ์ฒ) | AccessToken(์กฐ๊ฑด๋ถ) | ๊ฑฐ์ ์ฌ์ฉ X | RefreshToken(ํ์ค) |
๐ก ์ ์ฅ์ ์ ํ ๊ธฐ์ค ์์ฝ
JWT ์ธ์ฆ์์ ์ ์ฅ์๋ฅผ ์ ํํ ๋ ํต์ฌ ๊ธฐ์ค์ ๋ค์ ๋ค ๊ฐ์ง๋ค:
XSS ๋ณดํธ๊ฐ ํ์ํ๊ฐ?
โ RefreshToken์ฒ๋ผ ์ ๋ ๋ ธ์ถ๋๋ฉด ์ ๋๋ ๊ฐ์ httpOnly Cookie์๋ ์ ์ก์ด ํ์ํ๊ฐ?
โ ์๋ฒ๊ฐ ์์์ ํ์ธํด์ผ ํ๋ ๊ฐ์ Cookie์๋ก๊ณ ์นจํด๋ ์ ์งํด์ผ ํ๋?
โ ์ค๋ ์ด์์ผ ํ๋ ๊ฐ์ LocalStorage,
โ ์งง๊ฒ๋ง ์ ์งํด๋ ๋๋ ๊ฐ์ MemoryCSRF ๋ณดํธ๊ฐ ํ์ํ๊ฐ?
โ Cookie ์ฐ๋ฉด SameSite/CSRF ํ ํฐ์ ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํจ
๊ฒฐ๋ก :
- AccessToken โ Memory(๊ถ์ฅ) / LocalStorage(์กฐ๊ฑด๋ถ)
- RefreshToken โ ๋ฐ๋์ httpOnly Cookie