๐ก ์๋ฒ(์ธ์ ) ๊ธฐ๋ฐ์ ์ธ์ฆ ์์คํ
์๋ฒ(์ธ์ )๊ธฐ๋ฐ์ ์ธ์ฆ ์์คํ ์ด๋?
์๋ฒ ๊ธฐ๋ฐ์ ์ธ์ฆ ๋ฐฉ์์ผ๋ก, ์๋ฒ ์ธก์์ ์ฌ์ฉ์๋ค์ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ๋ ๋ฐฉ์.
์ฌ์ฉ์๋ค์ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด์๋ ์ธ์
์ ์ ์งํด์ผ ํ๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ ํตํด ๊ด๋ฆฌํ๋ค.
stateful ์๋ฒ
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ผ๋ฉด, ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๊ณ์ํด์ ์ ์งํ๊ณ ์ด ์ ๋ณด๋ฅผ ์๋น์ค์ ์ด์ฉํ๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด, ์ธ์
์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํด๋๊ณ ์๋น์ค๋ฅผ ์ ๊ณตํ ๋ ์ฌ์ฉํ๋ค.
ํ๋ฆ

๋ฌธ์ ์
1. ๋ฉ๋ชจ๋ฆฌ ๊ณผ๋ถํ
์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ํ ๋, ์๋ฒ๋ ์ด๋ฌํ ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํ๊ณ ์ด๋ฅผ ์ธ์
(Session)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ธ์
์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋๋ฐ, ๋ก๊ทธ์ธ ์ค์ธ ์ฌ์ฉ์๊ฐ ๋์ด๋ ๊ฒฝ์ฐ์๋ ์๋ฒ์ RAM์ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด๋ฆฌ๋ฅผ ์ค ์ ์๋ค
2. ํ์ฅ์ฑ
์ฌ์ฉ์๊ฐ ๋์ด๋๊ฒ ๋๋ฉด ๋ ๋ง์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋ฒ๋ฅผ ํ์ฅํด์ผ ํ๋ค.
์ธ์
์ ์ฌ์ฉ์, ์ธ์
์ ๋ถ์ฐ์ํค๋ ์์คํ
์ ์ค๊ณํด์ผ ํ์ง๋ง ๊ทธ ๊ณผ์ ์ด ๋งค์ฐ ์ด๋ ต๊ณ ๋ณต์กํ๋ค.
3. CORS(Cross-Origin Resource Sharing)
์ธ์ ์ ๊ด๋ฆฌํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ ์ฟ ํค๋ ๋จ์ผ ๋๋ฉ์ธ ๋ฐ ์๋ธ ๋๋ฉ์ธ์์๋ง ์๋ํ๋๋ก ์ค๊ณ๋์ด์๊ธฐ ๋๋ฌธ์ ์ฟ ํค๋ฅผ ์ฌ๋ฌ ๋๋ฉ์ธ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋กญ๋ค.
ํ ํฐ ๊ธฐ๋ฐ์ ์ธ์ฆ ์์คํ
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ ์ด๋?
์ธ์ฆ๋ฐ์ ์ฌ์ฉ์๋ค์๊ฒ ํ ํฐ์ ๋ฐ๊ธํ๊ณ , ์๋ฒ์ ์์ฒญ์ ํ ๋ ํค๋์ ํ ํฐ์ ํจ๊ป ๋ณด๋ด๋๋ก ํ์ฌ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋ ๋ฐฉ๋ฒ.
stateless ๊ตฌ์กฐ
์ฌ์ฉ์์ ์ธ์ฆ์ ๋ณด๋ฅผ ์๋ฒ๋ ์ธ์ ์ ์ ์งํ์ง ์๊ณ , ํด๋ผ์ด์ธํธ ์ธก์์ ๋ค์ด์ค๋ ์์ฒญ๋ง์ผ๋ก ์์ ์ ์ฒ๋ฆฌํ๋ค.
ํ๋ฆ

- ์ฌ์ฉ์๊ฐ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธ์ ํ๋ค.
- ์๋ฒ ์ธก์์ ํด๋น ์ ๋ณด๋ฅผ ๊ฒ์ฆํ๋ค.
- ์ ๋ณด๊ฐ ์ ํํ๋ค๋ฉด, ์๋ฒ ์ธก์์ ์ฌ์ฉ์์๊ฒ signed ํ ํฐ์ ๋ฐ๊ธํ๋ค.
- ํด๋ผ์ด์ธํธ ์ธก์์ ์ ๋ฌ๋ฐ์ ํ ํฐ์ ์ ์ฅํด๋๊ณ , ์๋ฒ์ ์์ฒญ์ ํ ๋๋ง๋ค ํด๋น ํ ํฐ์ ์๋ฒ์ ํจ๊ป ์ ๋ฌํ๋ค.(Http ์์ฒญ ํค๋์ ํ ํฐ์ ํฌํจ)
- ์๋ฒ๋ ํ ํฐ์ ๊ฒ์ฆํ๊ณ , ์์ฒญ์ ์๋ตํ๋ค.
์ฅ์
- ๋ฌด์ํ์ฑ(Stateless) & ํ์ฅ์ฑ(Scalability)
ํ ํฐ์ ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ ์์ ํ Statelessํ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ฐ๊ฒฐ๊ณ ๋ฆฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ์ฅํ๊ธฐ์ ๋งค์ฐ ์ ํฉํ๋ค.
๋ง์ฝ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ์๋ฒ ์ธก ์ธ์ ์ ์ ์ฅ๋ ๊ฒฝ์ฐ์ ์๋ฒ๋ฅผ ํ์ฅํ์ฌ ๋ถ์ฐ์ฒ๋ฆฌ ํ๋ค๋ฉด, ํด๋น ์ฌ์ฉ์๋ ์ฒ์ ๋ก๊ทธ์ธ ํ์๋ ์๋ฒ์๋ง ์์ฒญ์ ๋ฐ๋๋ก ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
ํ์ง๋ง ํ ํฐ์ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ ํ ์๋ฒ๋ก ์์ฒญ์ด ์๋ ์๊ด์ด ์๋ค. - ํ์ฅ์ฑ(Extensibility)
์์คํ ์ ํ์ฅ์ฑ์ ์๋ฏธํ๋ Scalability์ ๋ฌ๋ฆฌ Extensibility๋ ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ์ฌ์ฉ๋๋ ๋ถ์ผ์ ํ์ ์ ์๋ฏธํ๋ค. ํ ํฐ ๊ธฐ๋ฐ์ ์ธ์ฆ ์์คํ ์์๋ ํ ํฐ์ ์ ํ์ ์ธ ๊ถํ๋ง ๋ถ์ฌํ์ฌ ๋ฐ๊ธํ ์ ์์ผ๋ฉฐ OAuth์ ๊ฒฝ์ฐ Facebook, Google ๋ฑ๊ณผ ๊ฐ์ ์์ ๊ณ์ ์ ์ด์ฉํ์ฌ ๋ค๋ฅธ ์น์๋น์ค์์๋ ๋ก๊ทธ์ธ์ ํ ์ ์๋ค. - ์ฌ๋ฌ ํ๋ซํผ ๋ฐ ๋๋ฉ์ธ
์๋ฒ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ ์ ๋ฌธ์ ์ ์ค ํ๋์ธ CORS๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
ํ ํฐ์ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ค ๋๋ฐ์ด์ค, ์ด๋ค ๋๋ฉ์ธ์์๋ ํ ํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์งํํ ํ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
JWT(JSON Web Token)
JWT ์ด๋?
- Json ํฌ๋งท์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ Claim ๊ธฐ๋ฐ์ ์น ํ ํฐ์ด๋ค.
- ํ ํฐ ์์ฒด์ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ Self-Contained ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ๋ค.
- ์ฃผ๋ก ํ์ ์ธ์ฆ์ด๋ ์ ๋ณด ์ ๋ฌ์ ์ฌ์ฉ๋๋ค.
๋ก์ง

- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋, JWT๋ฅผ static ๋ณ์์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๋ค.
static ๋ณ์์ ์ ์ฅ๋๋ ์ด์ ๋ HTTP ํต์ ์ ํ ๋๋ง๋ค JWT๋ฅผ HTTP ํค๋์ ๋ด์์ ๋ณด๋ด์ผ ํ๋๋ฐ, ์ด๋ฅผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ๊ณ์ ๋ถ๋ฌ์ค๋ฉด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ํด๋ผ์ด์ธํธ์์ JWT๋ฅผ ํฌํจํด ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ํ๊ฐ๋ JWT์ธ์ง๋ฅผ ๊ฒ์ฌํ๋ค. ๋ํ ๋ก๊ทธ์์์ ํ ๊ฒฝ์ฐ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ JWT ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ค. (์ค์ ์๋น์ค์ ๊ฒฝ์ฐ์๋ ๋ก๊ทธ์์ ์, ์ฌ์ฉํ๋ ํ ํฐ์ blacklist๋ผ๋ DB ํ ์ด๋ธ์ ๋ฃ์ด ํด๋น ํ ํฐ์ ์ ๊ทผ์ ๋ง๋ ์์ ์ ํด์ฃผ์ด์ผ ํ๋ค.)
JWT ๊ตฌ์กฐ

- Header, Payload, Signature์ 3๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
- JSON ํํ์ธ ๊ฐ ๋ถ๋ถ์ Base64Url๋ก ์ธ์ฝ๋ฉ ๋์ด ํํ๋๋ค.
- ํ ํฐ์ ๊ฐ ๋ถ๋ถ์ .์ ๊ตฌ๋ถ์๋ก ์ฌ์ฉํ๋ค.
Header(ํค๋)
- typ๊ณผ alg ๋ ๊ฐ์ง ์ ๋ณด๋ก ๊ตฌ์ฑ๋๋ค. alg๋ ํค๋(Header)๋ฅผ ์ํธํ ํ๋ ๊ฒ์ด ์๋๊ณ , Signature๋ฅผ ํด์ฑํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ํ๋ ๊ฒ์ด๋ค.
- typ: ํ ํฐ์ ํ์ ์ ์ง์ .
- alg: ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ ์ง์ ํ๋ฉฐ, ์๋ช (Signature) ๋ฐ ํ ํฐ ๊ฒ์ฆ์ ์ฌ์ฉ
{
"alg": "HS256",
"typ": JWT
}
Payload(ํ์ด๋ก๋)
ํ ํฐ์์ ์ฌ์ฉํ ์ ๋ณด์ ์กฐ๊ฐ๋ค์ธ ํด๋ ์(Claim)์ด ๋ด๊ฒจ ์๋ค.
Claim์ ๊ฒฝ์ฐ ์ด 3๊ฐ์ง๋ก ๋๋๋ค.
- Registered Claim(๋ฑ๋ก๋ ํด๋ ์)
๋ฏธ๋ฆฌ ์ ํด์ ธ์๋ ํค๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ค๋ก ๊ฐ ํค์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
iss(ํ ํฐ ๋ฐ๊ธ์), sub(ํ ํฐ ์ ๋ชฉ, uniqueํ ๊ฐ์ ์ฌ์ฉ), aud(ํ ํฐ ๋์), exp(ํ ํฐ ๋ง๋ฃ์๊ฐ, NumericDate ํ์), nbf(ํ ํฐ ํ์ฑํ ์๊ฐ, ์ด ๋ ์ด ์ง๋๊ธฐ ์ ์ ํ ํฐ์ ํ์ฑํ ๋์ง ์์), iat(ํ ํฐ ๋ฐ๊ธ์๊ฐ, ํ ํฐ ๋ฐ๊ธ ์ดํ์ ๊ฒฝ๊ณผ ์๊ฐ์ ์ ์ ์์), jti(ํ ํฐ ๊ณ ์ ์๋ณ์, ์ค๋ณต ๋ฐฉ์ง๋ฅผ ์ํด ์ฌ์ฉํ๋ฉฐ ์ผํ์ฉ ํ ํฐ(Access Token) ๋ฑ์ ์ฌ์ฉ)
- Public Claim(๊ณต๊ฐ ํด๋ ์)
์ฌ์ฉ์ ์ ์ ํด๋ ์์ผ๋ก ๊ณต๊ฐ์ฉ ์ ๋ณด๋ฅผ ์ํด ์ฌ์ฉํ๋ค. ์ถฉ๋ ๋ฐฉ์ง๋ฅผ ์ํด์ URI ํฌ๋งท์ ์ฌ์ฉํ๋ค.
ex)
{
"https://yeeeh.tistory.com": true
}
- Private Claim(๋น๊ณต๊ฐ ํด๋ ์)
์ฌ์ฉ์ ์ ์ ํด๋ ์์ผ๋ก, ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์ ์์๋ก ์ง์ ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
๊ณต๊ฐ ํด๋ ์๊ณผ๋ ๋ค๋ฅด๊ฒ ์ผ๋ฐ์ ์ธ Key:Value ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ์ฌ ์ฌ์ฉ์ ์ ์ํด์ผ ํ๋ค.
์ฌ์ฉ์ ์ธ์ฆ์ ์ฌ์ฉ๋๋ ํ ํฐ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ํน์ ์ ์ํ ์ค์ง์ ์ธ ์ ๋ณด๋ก ๊ตฌ์ฑ๋๋ค.
Header์ ๊ฐ์ด ์ํธํ๊ฐ ์งํ๋์ง ์๋๋ค.
ex)
{
"token_type": access
}
Signature(์๋ช )
์๋ช (Signature)์ ํ ํฐ์ ์ธ์ฝ๋ฉํ๊ฑฐ๋ ์ ํจ์ฑ ๊ฒ์ฆ์ ํ ๋ ์ฌ์ฉํ๋ ๊ณ ์ ํ ์ํธํ ์ฝ๋์ด๋ค.
์์ฑ ์ ์ฐจ
- ํค๋(Header)์ ํ์ด๋ก๋(Payload)์ ๊ฐ์ ๊ฐ๊ฐ BASE64Url๋ก ์ธ์ฝ๋ฉํ๋ค.
- ์ธ์ฝ๋ฉํ ๊ฐ์ ๋น๋ฐ ํค๋ฅผ ์ด์ฉํด ํค๋(Header)์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด์ฑ์ ํ๋ค.
- ์ด ๊ฐ์ ๋ค์ BASE64Url๋ก ์ธ์ฝ๋ฉํ์ฌ ์์ฑํ๋ค.
- ์์ฑ๋ ํ ํฐ์ HTTP ํต์ ์ ํ ๋, Authorization์ด๋ผ๋ key์ value๋ก ์ฌ์ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก value์๋ Bearer์ด ์์ ๋ถ์ฌ์ง๋ค.
{
"Authorization" : "Bearer {์์ฑ๋ ํ ํฐ ๊ฐ}",
}
JWT ์ฅ๋จ์
์ฅ์
- Self-Contained ์ ํน์ฑ์ ๋ฐ๋ผ์ ๋ณ๋์ ์ธ์ฆ ์ ์ฅ์๋ฅผ ํ์๋ก ํ์ง ์๋๋ค.
- MSA ํ๊ฒฝ์์ ์ค์ ์ง์ค์ ์ธ์ฆ ์๋ฒ์ DB์ ์์กดํ์ง ์๋ ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
- ์ ํจ์ฑ ๊ฒ์ฌ ๊ณผ์ ์์ IO ๋๋ ๋คํธ์ํฌ ์ก์ธ์ค๋ฅผ ํ์๋ก ํ์ง ์๊ณ ์ต์ ์น ์๋ฒ HW์์ ํ์ฅ์ด ์ฉ์ดํ๋ค.
- ํธ๋ํฝ ๋ํ ๋ถ๋ด์ด ๋ฎ์
- REST ์๋น์ค๋ก ์ ๊ณต ๊ฐ๋ฅ
๋จ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
- ํ ํฐ ๊ธธ์ด: ํ ํฐ์ ํ์ด๋ก๋(Payload)์ 3์ข ๋ฅ์ ํด๋ ์์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์, ์ ๋ณด๊ฐ ๋ง์์ง์๋ก ํ ํฐ์ ๊ธธ์ด๊ฐ ๋์ด๋ ๋คํธ์ํฌ์ ๋ถํ๋ฅผ ์ค ์ ์๋ค.
- Payload ์ธ์ฝ๋ฉ: ์ค์ํ ๋ถ๋ถ์ธ Payload ํํธ๊ฐ ์ํธํ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ์ํธํ ๋ฐฉ์์ ๊ณ ๋ คํ๊ฑฐ๋, Payload์ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ง ์๊ณ ์ด์ํด์ผ ํ๋ค.
- Stateless: ํ ํฐ ์์ฒด์์ ์ํ๋ฅผ ๊ด๋ฆฌํ์ง ์๊ธฐ๋๋ฌธ์ ํ ํฐ ๋ง๋ฃ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ์ฌ์ฉํด์ผ ํ๋ค.
Access Token, Refresh Token
Access Token ๋ง์ ํตํ ์ธ์ฆ ๋ฐฉ์์ ์ 3์์๊ฒ ํ์ทจ๋นํ ๊ฒฝ์ฐ ๋ณด์์ ์ทจ์ฝํ๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
Access Token์ ์ ํจ๊ธฐ๊ฐ์ ์งง๊ฒ ํ๊ณ , Refresh Token์ ์ ํจ๊ธฐ๊ฐ์ ๊ธธ๊ฒํ๋ ๋ฐฉ์์ ์ด์ฉํ๋ค.
- ์์

1. ์ฒ์์ ๋ก๊ทธ์ธ์ ํ ๋, ์๋ฒ๋ ๋ก๊ทธ์ธ ์ฑ๊ณต๊ณผ ํจ๊ป ํด๋ผ์ด์ธํธ์๊ฒ Access Token๊ณผ Refresh Token์ ๋์์ ๋ฐ๊ธํ๋ค.
2. ์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Refresh Token์ ์ ์ฅํ๊ณ , ํด๋ผ์ด์ธํธ๋ Access Token๊ณผ Refresh Token์ ์ ์ฅํ๊ณ , ์์ฒญ์ ํ ๋๋ง๋ค ๋ ํ ํฐ์ ํค๋์ ๋ด์์ ๋ณด๋ธ๋ค.
์ฌ์ฉ์๊ฐ ์ธ์ฆ์ด ํ์ํ API์ ์ ๊ทผํ๊ณ ์ ํ๋ฉด, ๊ฐ์ฅ ๋จผ์ ํ ํฐ์ ๊ฒ์ฌํ๋ค.
์ด๋, ํ ํฐ์ ๊ฒ์ฌํจ๊ณผ ๋์์ ๊ฐ ๊ฒฝ์ฐ์ ๋ํด์ ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ์ ํ์ธํ์ฌ ์ฌ๋ฐ๊ธ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
case1 : access token๊ณผ refresh token ๋ชจ๋ ๋ง๋ฃ
→ ์๋ฌ ๋ฐ์ (์ฌ ๋ก๊ทธ์ธํ์ฌ ๋๋ค ์๋ก ๋ฐ๊ธ)
case2 : access token์ ๋ง๋ฃ, refresh token์ ์ ํจ
→ refresh token์ ๊ฒ์ฆํ์ฌ access token ์ฌ๋ฐ๊ธ
case3 : access token์ ์ ํจ, refresh token์ ๋ง๋ฃ
→ access token์ ๊ฒ์ฆํ์ฌ refresh token ์ฌ๋ฐ๊ธ
case4 : accesss token๊ณผ refresh token ๋ชจ๋๊ฐ ์ ํจ
→ ์ ์ ์ฒ๋ฆฌ
3. ๋ก๊ทธ์์์ ํ๋ฉด Acces Token๊ณผ Refresh Token์ ๋ชจ๋ ๋ง๋ฃ์ํจ๋ค.
๋๊ธ