-
Notifications
You must be signed in to change notification settings - Fork 5
JWT
JWT๋ JSON Web Token์ ์ฝ์๋ก, JSON ํฌ๋งท์ผ๋ก ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ ์ ์๋๋ก ํ๋ ์น ํ์ค์ด๋ค. (RFC 7519) ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํ ํฐ ์์ฒด์ ์ง๋๊ณ ์๊ธฐ์, ์๊ฐ ์์ฉ์ (self-contained)์ด๊ณ ์ค์ค๋ก ๋ฌด๊ฒฐํจ์ ์ ์ฆํ ์ ์๋ค.
ํ์ ์ธ์ฆ์ ๋ง์ด ์ฌ์ฉ๋๋๋ฐ, ์ฌ์ฉ์๊ฐ ์๋ฒ์ ๋ก๊ทธ์ธ ์์ฒญ์ ํ๋ฉด ์๋ฒ๋ ์ฌ์ฉ์ ์ ๋ณด์ ๊ธฐ๋ฐํ ํ ํฐ์ ์์ฑํ์ฌ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ค. ์ดํ์ ์ฌ์ฉ์๋ ์๋ฒ์ ์์ฒญ์ ํ ๋๋ง๋ค ํ ํฐ์ ์ค์ด๋ณด๋ด๊ณ , ์๋ฒ๋ ํ ํฐ์ด ์ ํจํ์ง ๊ฒ์ฆํ์ฌ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค. JWT๋ง์ ์ฌ์ฉํด ์ธ์ฆ์ ๊ตฌํํ๋ค๋ฉด ์๋ฒ๋ ์ธ์ ์ ๊ด๋ฆฌํ ํ์๊ฐ ์์ด ๋น์ฉ์ ์๋ ์ ์๋ค. ์๋์ ๊ฐ์ด HTTP ํค๋๋ก ์ ๋ฌํ ์ ์๋ค.
{
"Authorization": "Bearer {์์ฑ๋ ํ ํฐ ๊ฐ}"
}
JWT๋ Header, Payload, Signature ์ธ ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. ๊ฐ์ JSON ํฌ๋งท์ด์๋ค๊ฐ Base64๋ก ์ธ์ฝ๋ฉ๋์ด ํ ํฐ์ ํ์ฌ๋๊ณ , ์ฌ์ด์ .
๋ฌธ์๋ฅผ ํตํด ๊ตฌ๋ถ๋๋ค. ์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ! ์์๋๋ก ๋นจ๊ฐ ๋ถ๋ถ์ Header, ๋ณด๋ผ์์ Payload, ํธ๋ฅธ์์ Signature.
typ
: ํ ํฐ์ ํ์
์ ์ง์ ํ๋ค. ๊ฐ์ "JWT"
.
alg
: Signature ๋ถ๋ถ์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ํธํํ ๊ฒ์ธ์ง ์ง์ ํ๋ค. ๋ณดํต HMAC SHA256
์ด๋ RSA
๋ฅผ ์ฌ์ฉ.
ํ ํฐ์ ๋ด์ ์ ๋ณด๋ค์ด ๋ค์ด๊ฐ๋ ๋ถ๋ถ. ์ ๋ณด์ ํ ์กฐ๊ฐ์ ํด๋ ์(claim)์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, (name, value) ์์ ํํ๋ฅผ ๊ฐ๋๋ค. ํด๋ ์์ ์ข ๋ฅ๋ ๋ฑ๋ก๋ ํด๋ ์, ๊ณต๊ฐ ํด๋ ์, ๋น๊ณต๊ฐ ํด๋ ์ ์ธ ๊ฐ์ง๋ก ๋๋๋ค.
๋ฑ๋ก๋ ํด๋ ์์ด๋ ํ ํฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํด ์ด๋ฆ์ด ์ด๋ฏธ ์ ํด์ ธ ์๋ ์ ๋ณด๋ค์ ๋งํ๋ค. ํ์๋ก ์์ฑํด์ผํ๋ ์ ๋ณด๋ ์๋์ง๋ง ์ฌ์ฉํ ๊ฒ์ด ๊ถ์ฅ๋๋ค. ๋ค์ ์ผ๊ณฑ ๊ฐ์ง์ ์ด๋ฆ์ ๊ฐ๋๋ค.
-
iss
: ํ ํฐ ๋ฐ๊ธ์ (issuer) -
sub
: ํ ํฐ ์ ๋ชฉ (subject), ์ ๋ํฌํ ๊ฐ์ ์ฌ์ฉํ๋ฉฐ ์ฌ์ฉ์ ์ด๋ฉ์ผ์ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ๋ค. -
aud
: ํ ํฐ ๋์์ (audience) -
exp
: ํ ํฐ ๋ง๋ฃ ์๊ฐ (expiration), NumericDate ํ์ (ex. 1480849147370) -
nbf
: ํ ํฐ ํ์ฑ ๋ ์ง (not before), NumericDate ํ์ -
iat
: ํ ํฐ ๋ฐ๊ธ ์๊ฐ (issued at), ํ ํฐ์age
๋ฅผ ํ๋จํ ์ ์์. -
jti
: JWT ํ ํฐ ์๋ณ์ (JWT ID), ์ค๋ณต ๋ฐฉ์ง๋ฅผ ์ํด ์ฌ์ฉํ๋ฉฐ ์ผํ์ฉ ํ ํฐ์ ์ฌ์ฉํ๋ฉด ์ ์ฉ.
๊ณต๊ฐ ํด๋ ์์ ์ฌ์ฉ์ ์ ์ ํด๋ ์์ผ๋ก, ๋ง ๊ทธ๋๋ก ๊ณต๊ฐ์ฉ ์ ๋ณด๋ฅผ ์ํด ์ฌ์ฉ๋๋ค. ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ์๋์ ๊ฐ์ด URI ํ์์ ์ด๋ฆ์ ์ง๋๋ค.
{
"https://sajagachi.ga/jwt_claims/is_admin": true
}
๋น๊ณต๊ฐ ํด๋ ์์ ์ฌ์ฉ์ ์ ์ ํด๋ ์์ด์ง๋ง, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์์๋ก ์ง์ ํ ์ ๋ณด๋ค์ ์ ์ฅํ๋ค. ์ด๋ฆ์ด ์ค๋ณต๋์ด ์ถฉ๋ํ์ง ์๋๋ก ์ ์ํด์ผ ํ๋ค.
{
"username": "web19"
}
๋ฑ๋ก๋ ํด๋ ์, ๊ณต๊ฐ ํด๋ ์, ๋น๊ณต๊ฐ ํด๋ ์์ ํ๋์ JSON ํฌ๋งท์ ๋ด์ Base64 ์ธ์ฝ๋ฉํ์ฌ ํ ํฐ์ ํ์ฌํ๋ค.
Header๋ ๋ง์ฐฌ๊ฐ์ง์ง๋ง, Payload๋ Base64๋ก ์ธ์ฝ๋ฉ์ด ๋๋ ๊ฒ ๋ฟ์ด์ง ์ํธํ๋์ง ์๋๋ค. ๋ค์์ sajagach.ga
์์ ๋ฐ๊ธํ๋ user
ํ ํฐ์ jwt.io ์์ ๋์ฝ๋ฉํ ๊ฒ์ด๋ค.
ํ ํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํด ํ์ฌ๋๋ ํด์๊ฐ. ์์ฑ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Header์ Payload๋ฅผ ๊ฐ๊ฐ Base64 ์ธ์ฝ๋ฉ
- ๋ ๋ฌธ์์ด์
.
๋ฌธ์๋ฅผ ์ฌ์ด์ ๋๊ณ ํฉ์น๋ค. - ๋น๋ฐํค์ Header์์ ์ง์ ํ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์ํธํํ๋ค.
- ์ํธํ๋ ๊ฐ์ Base64๋ก ์ธ์ฝ๋ฉ
์ฆ Signature๋ Header์ Payload๋ฅผ ์ํธํํ ๊ฐ์ด๋ฏ๋ก, ๋น๋ฐํค๊ฐ ๋ ธ์ถ๋์ง ์๋ ํ ํ ํฐ์ ๋ด์ฉ์ ์์๋ก ์กฐ์ํ ์ ์๋ค.
- ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ฅผ ํ ํฐ ์์ฒด์ ๋ชจ๋ ์ ์ฅํ๊ธฐ์, ์๋ฒ ์ ์ฅ์์๋ ์ ๋ณด๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ํ์๊ฐ ์์ด ์๋ฒ ์์์ ์ค์ผ ์ ์๋ค.
- ๋ค์ค ์๋ฒ์ ๊ฒฝ์ฐ ์ธ์ ๋ฐฉ์์์๋ ์๋ก ๋ค๋ฅธ ์๋ฒ์ ์ ์ํด๋ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ๋๋ก ํ๊ธฐ ์ํด ๊ณตํต๋ ์ธ์ ์ ์ฅ์๋ฅผ ์ด์ํ์ง๋ง, ํ ํฐ ๋ฐฉ์์ ์ด๋ ์๋ฒ์ ์ ์ํ๋ ์ค์ค๋ก ๊ฒ์ฆ์ด ๊ฐ๋ฅํ๋ฏ๋ก ํธ๋ฆฌํ๋ค.
- ์ ๋ณด๊ฐ ๋ง์์ง์๋ก ํ ํฐ์ ๊ธธ์ด๊ฐ ๋์ด๋ ๋คํธ์ํฌ์ ๋ถํ๋ฅผ ์ค ์ ์๋ค.
- Payload๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํธํ๋์ด ์์ง ์์ผ๋ฏ๋ก, ํ ํฐ์ด ํ์ทจ๋๋ฉด ์ ๋ณด๊ฐ ๋ ธ์ถ๋ ์ ์๋ค. JWE(JSON Web Encryption)๋ก ์ํธํํ๊ฑฐ๋ Payload์ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ง ๋ง์์ผ ํ๋ค.
- ํ ๋ฒ ๋ฐ๊ธ๋๋ฉด ์ ํจ๊ธฐ๊ฐ์ด ์๋ฃ๋ ๋๊น์ง๋ ๊ณ์ ์ฌ์ฉํ ์ ์๋ค. ์ ํจ๊ธฐ๊ฐ์ด ๋๋๊ธฐ ์ ์ ์๋ฒ์์ ํ ํฐ์ ์์๋ก ๋ง๋ฃ์ํค๊ณ ์ถ๋ค๋ฉด ์๋ฒ์์ ๋ธ๋๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋๋ฐ, ๋งค ์์ฒญ๋ง๋ค ๋ธ๋๋ฆฌ์คํธ๋ฅผ ์กฐํํ๊ฒ ๋๋ฏ๋ก ์๋ฒ์ ๋ถํ๊ฐ ์ปค์ง๊ณ JWT์ ์ฅ์ ์ด ์ผ๋ถ ํฌ์๋์ด ๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์๋ค.
๊ธฐ์กด์ Access Token๋ง์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ํ ํฐ์ด ํ์ทจ๋นํ์ ๊ฒฝ์ฐ, ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋๊ธฐ ์ ๊น์ง ์ ๋ณด๊ฐ ํ์ทจ๋๋ ๊ฒ์ ๋ง์ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค. ์ด๋ฅผ ์ํด ๋จ์ํ ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ์ ์ค์ฌ๋ฒ๋ฆฌ๋ฉด ์ฌ์ฉ์๊ฐ Access Token์ ์ป๊ธฐ ์ํด ๋ ์์ฃผ ๋ก๊ทธ์ธ์ ํด์ผ ํ๋ฏ๋ก, ์ฌ์ฉ์๊ฐ ๋ถํธํด์ง๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ ํจ ๊ธฐ๊ฐ์ด ์งง์ Access Token๊ณผ ์ ํจ ๊ธฐ๊ฐ์ด ๋ ๊ธด Refresh Token ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ค. ์ต์ด ํ ํฐ ๋ฐ๊ธ์ ์๋ฒ์์ Access Token๊ณผ ํจ๊ป Refresh Token์ ๋ฐ๊ธํด ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๊ณ , Access Token์ด ๋ง๋ฃ๋๋ฉด ํด๋ผ์ด์ธํธ์์ Refresh Token์ ์ ์ถํด Access Token์ ์ฌ๋ฐ๊ธ ๋ฐ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋น ๋งํฌ์์ ๋งค์ฐ ์ ์ค๋ช ํ๊ณ ์๋ ๊ฒ ๊ฐ๊ณ , ๋ด ๊ธ์์๋ Refresh Token ๋ฐฉ์์ ๋ํ ๊ฐ์ธ์ ์ธ ๊ถ๊ธ์ฆ๊ณผ ์๊ตฌ์ฌ์ ๋ ์ด์ ์ ๋ง์ถ๊ณ ์ถ๋ค.
Access Token๊ณผ Refresh Token ์ ํจ ๊ธฐ๊ฐ์ ์ ์ ์ ์ ์ด๋์ผ๊น?
Access Token์ ์ ํจ ๊ธฐ๊ฐ์ ๋๋ฌด ์งง๊ฒ ์ก์ผ๋ฉด ์ฌ๋ฐ๊ธ์ด ์์ฃผ ๋ฐ์ํ์ฌ ์๋ฒ์ ๋ถ๋ด์ด ์ฆ๊ฐํ ๊ฒ์ด๋ค. ์๋ฒ๋ Access Token์ ์ฌ๋ฐ๊ธ์ ์ํด DB์ ์ ์ฅํด๋ Refresh Token์ ํ์ธํ๊ฑฐ๋, Token์ ์ํธํ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
Access Token์ ์ ํจ ๊ธฐ๊ฐ์ ๋๋ฌด ๊ธธ๊ฒ ์ก์ผ๋ฉด ํ ํฐ์ด ํ์ทจ๋นํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์์ ์ ๋ณด๊ฐ ๋ ์ค๋ซ๋์ ์ํ์ ๋ ธ์ถ๋๋ค. Refresh Token์ ์ฌ์ฉํ๋ ์๋ฏธ๊ฐ ํ๋ ค์ง๊ธฐ๋ ํ๊ณ ..
Refresh Token๋ ์ ์ ํ ์ ํจ ๊ธฐ๊ฐ์ด ํ์ํ ๊ฒ์ด๋ค. Refresh Token ์์ฒด๊ฐ ํ์ทจ๋นํ๋ ๊ฒฝ์ฐ๋ ๊ณ ๋ คํด์ผํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋จ ๋ช ๊ฐ์ง ์๋น์ค์ ํ ํฐ ์ ํจ ๊ธฐ๊ฐ์ ์กฐ์ฌํด๋ณด์๋ค. ์๋ฌด๋๋ ์์ฒด ๋ก๊ทธ์ธ๋ณด๋ค๋ OAuth ์ธ์ฆ์ ํ ํฐ ์ ํจ ๊ธฐ๊ฐ ์ ๋๋ง ์๋ด๊ฐ ๋์ด์๋ ๊ฒ ๊ฐ๋ค.
์๋น์ค | Access Token | Refresh Token |
---|---|---|
์นด์นด์ค OAuth | JavaScript 2์๊ฐ, REST API 6์๊ฐ | 2๋ฌ (์ ํจ๊ธฐ๊ฐ 1๋ฌ ๋จ์ ์์ ๋ถํฐ ๊ฐฑ์ ๊ฐ๋ฅ) |
๋ค์ด๋ฒ OAuth | 1์๊ฐ | ํ์ธ ๋ถ๊ฐ |
Facebook OAuth | ์ฝ(?) 1~2์๊ฐ | ์ฝ 60์ผ |
Google OAuth | 1์๊ฐ ์ถ์ | ์ต๋ 6๋ฌ |
๋๋ Refresh Token ๋ฐฉ์์ Access Token์ ์ ํจ ๊ธฐ๊ฐ์ ์ค์ด๊ธฐ ์ํ ๊ฒ์ผ๋ก ์ดํดํ๊ณ ์๋ค. ์ฆ, Refresh Token ๋ฐฉ์์ ํต์ฌ์ ํด์ปค๊ฐ Access Token์ผ๋ก ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋นผ๋ด๋๋ฐ ์ฌ์ฉํ ์ ์๋ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ ํจ ๊ธฐ๊ฐ์ ์ค์ธ๋ค๊ณ ํด์ ์ ๋ณด์ ์ ์ถ์ ๋ง์ ์ ์๋ ๊ฒ์ธ์ง ์๋ฌธ์ด ๋ค์๋ค. ๊ฐ๋ น Access Token์ ์ ํจ ๊ธฐ๊ฐ์ด 5๋ถ์ด๋ผ๊ณ ํด๋, 5๋ถ ์์ ์ ๋ณด๊ฐ ์ ์ถ๋ ์ ์๋ ๊ฒ ์๋๊น? Access Token์ ์ ํจ ๊ธฐ๊ฐ์ 5๋ถ๋ณด๋ค ๋ ์ค์ฌ๊ฐ๋ค๊ณ ํด๋, ํด์ปค์ ์ฌ์ ์๊ฐ์ ์ค์ด๋ค๊ฒ ์ง๋ง ๊ทธ Trade-off๋ก ์๋ฒ์ ๋ถ๋ด์ ์ฆ๊ฐํ๊ณ Access Token์ ์๋ฏธ๋ ํ๋ ค์ ธ๊ฐ๋ค.
ํด์ปค๊ฐ Refresh Token์ ํ์ทจํ๋ฉด ์๋ฒ์ Access Token์ ์ฌ๋ฐ๊ธ์ ์์ฒญํ ์ ์๊ธฐ ๋๋ฌธ์, Refresh Token ๋ฐฉ์ ์์ฒด๊ฐ ๋ฌด์ฉ์ง๋ฌผ์ด ๋ ๊ฒ์ด๋ค. ํด๋ผ์ด์ธํธ์์ Refresh Token์ ์์ ํ๊ฒ ๋ณด๊ดํ ์ ์๋ ๋ฐฉ๋ฒ์๋ ์ด๋ค ๊ฒ๋ค์ด ์์๊น? ์ถ๊ฐ๋ก, Refresh Token์ด ํ์ทจ๋นํ ๊ฒฝ์ฐ์ ์์ ๋์ฑ ์ด ์์๊น?
Refresh Token์ ์ ์ฅํ๋ ์์น์ ๋ํด ์กฐ์ฌํด๋ณด์๋ค. ์ฒซ ๋ฒ์งธ๋ ๋ธ๋ผ์ฐ์ ์ Local Storage์ ์ ์ฅํ๋ ๊ฒ์ธ๋ฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ก Local Storage์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ XSS ๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ค. ๋ ๋ฒ์งธ๋ ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค์ ์ ์ฅํ๋ ๊ฒ์ธ๋ฐ, HttpOnly
์ต์
์ ์ ์ฉํ๋ฉด XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ ์ ์๊ณ CSRF ๊ณต๊ฒฉ ๋ฐฉ์ง(Referrer ๊ฒ์ฆ, CSRF ํ ํฐ, Double Submit Cookie)๊น์ง ํด์ฃผ๋ฉด ๋๋ฆ ๊ด์ฐฎ์ ๋ฐฉ์์ผ๋ก ๋ณด์๋ค.
ํ์ง๋ง ๊ฒฐ๊ตญ ํด๋ผ์ด์ธํธ์ ์ ์ฅํ๋ ๊ฒ์ ํ๊ณ๊ฐ ์๋ ๊ฒ์ธ์ง ์ธ์ , DB์ ๊ฐ์ด ์๋ฒ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ๋ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋ฐฉ๋ฒ์ ๋๋ค์ ์๋์ ๊ฐ์ ๊ถ๊ธ์ฆ๋ค์ ๋ง๋ค์๋ค.
- ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค์ ์ ์ฅ๋ ์ธ์ ์์ด๋๊ฐ ํ์ทจ๋๋ฉด ์ํํ์ง ์์๊น?
- ๊ฒฐ๊ตญ ์๋ฒ์ ์ ์ฅํด์ผ ํ๋ค๋ฉด ๊ทธ๋ฅ ํ ํฐ์ ์ฌ์ฉํ์ง ์๊ณ ์ธ์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๋๊ฒ ๋ซ์ง ์๋?
- IntersectionObserver
- B-Tree
- Web Server & Web Application Server
- Query Optimization (1)
- Query Optimization (2)
- M1 Mac์์ link preview generator ์ค์น ์ค ๋ฐ์ํ๋ ์ค๋ฅ
- CORS
- react-router-dom
- Artillery: Performance testing tool
- JWT
- LinkPreview
- SWR
- ์ฟผ๋ฆฌ์ฑ๋ฅํฅ์&๋ฌดํ์คํฌ๋กค
- 10์ 26์ผ ํ์์ผ
- 10์ 27์ผ ์์์ผ
- 10์ 28์ผ ๋ชฉ์์ผ
- 11์ 1์ผ ์์์ผ
- 11์ 2์ผ ํ์์ผ
- 11์ 3์ผ ์์์ผ
- 11์ 4์ผ ๋ชฉ์์ผ
- 11์ 9์ผ ํ์์ผ
- 11์ 10์ผ ์์์ผ
- 11์ 11์ผ ๋ชฉ์์ผ
- 11์ 16์ผ ํ์์ผ
- 11์ 17์ผ ์์์ผ
- 11์ 18์ผ ๋ชฉ์์ผ
- 11์ 23์ผ ํ์์ผ
- 11์ 24์ผ ์์์ผ
- 11์ 25์ผ ๋ชฉ์์ผ
- 11์ 30์ผ ํ์์ผ
- 12์ 1์ผ ์์์ผ
- 12์ 2์ผ ๋ชฉ์์ผ