
๐ To Do List
โ๏ธ ์ฝํ - 2์ฃผ์ฐจ ์์ ๋ณต์ต (๋งํฌ๋ ๋ฆฌ์คํธ, set,์ฌ๊ทํจ์)
โ๏ธ ์ฌ์ด๋ ํ๋ก์ ํธ - ํ ํฐ ๋ง๋ฃ ์ฌ๋ถ ์ฒดํฌ ๋ก์ง ๊ตฌํ
๐ฉ๐ป๐ป Today I Learned ...
Duration์ผ๋ก ํ ํฐ ๋ง๋ฃ ์๋ฐ ์ฌ๋ถ ์ฒดํฌ
๋ฐฐ๊ฒฝ
JWT refresh token์ด ๋ง๋ฃ๋๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๊ฐฑ์ ํ๊ธฐ ์ํด N์ผ ์ด๋ด ๋ง๋ฃ ์์ ์ธ์ง ํ์ธํ๋ ๋ก์ง์ด ํ์ํ๊ณ ,
์๋์ ๊ฐ์ ๋ก์ง์ jwt provider์ ๊ตฌํํ๋ค.
fun shouldRefreshToken(refreshToken: String, baseDays: Long = 7): Boolean {
val expiration = getExpiration(refreshToken).toInstant()
val now = Instant.now()
val duration = Duration.between(now, expiration)
return duration.toDays() in 0..baseDays
}
Date → Instant ๋ณํ
`JWT`์ `exp(Expiration Time)` `Date`ํด๋์ค ์ด๊ธฐ ๋๋ฌธ์, `Duration.between()`์ ์ฌ์ฉํ๋ ค๋ฉด `Instant`๋ก ๋ณํ์ด ํ์ํ๋ค.
Instant vs LocalDateTime
// Instant
val instant = date.toInstant()
// LocalDateTime
val localDateTime = date.toInstant()
.atZone(ZoneId.of("UTC"))
.toLocalDateTime()
์ผ ๋จ์๋ก ๋น๊ตํ๋ ๋ก์ง์ด๋ผ, ์ฒ์์ `LocalDateTime`์ผ๋ก ๋ณํํ๋ ค๊ณ ํ์๋ค.
ํ์ง๋ง `LocalDateTime`์ ๊ฒฝ์ฐ ํ์์กด ์ค์ ๋ ํ์ํ๊ณ , `Instant`์ ๋นํด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค๋ ์๊ฐ์ด ๋ค์ด์,
`Instant`๋ก ๋ณํํ๋ค.
๐ก `Instant`๋ `UTC`๋ก ํํ๋๊ธฐ ๋๋ฌธ์, ํ์์กด ๊ฑฑ์ ์ด ์๋ค.
Duration.between()์ผ๋ก ์๊ฐ ์ฐจ์ด ๊ณ์ฐ
public static Duration between(Temporal startInclusive, Temporal endExclusive) {
`between()` ๋ฉ์๋๋ ๋ ๊ฐ์ฒด์ ์๊ฐ ์ฐจ์ด๋ฅผ ์ด์ฉํด์ `Duration` ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ค๋ค.
๋จ, ํ๋ผ๋ฏธํฐ ๊ฐ์ฒด๋ค์ด `Instant`, `LocalDateTime`์ฒ๋ผ ์ด์ ๋ํ ์ ๋ณด๊ฐ ์์ด์ผ ํ๋ค.
์ฐธ๊ณ >
[Kotlin Duration Class] ์๊ฐ์ ๊ตฌ๊ฐ์ ํํํ๋ ํด๋์ค
๋ชฉํ Duration Class๋ ์๊ฐ์ ๊ตฌ๊ฐ์ ํํํ๋ค๋ ๊ฒ์ ์ดํดํ๋ค. ๊ฐ์ Duration Class๋ ๋ ์๊ฐ ๊ฐ์ฒด ์ฌ์ด์ ์ง์์๊ฐ(duration)์ ๋ง๋๋ ํด๋์ค์ด๋ค. ์ง์์๊ฐ์ด๋ฏ๋ก, ๋ ์ง๋ง์ผ๋ก๋ ๊ตฌ์ฑ์ด ๋ถ๊ฐ๋ฅํ๋ค.
kotlinworld.com
Duration.toDays() ๋ด๋ฆผ ์ฒ๋ฆฌ
`toDays()`๋ 24์๊ฐ ๋จ์๋ก ๋ด๋ฆผ ์ฒ๋ฆฌ๋๋ค.
6์ผ 23์๊ฐ 59๋ถ ๋จ์ → toDays() = 6
7์ผ 0์๊ฐ 0๋ถ ๋จ์ → toDays() = 7
7์ผ 23์๊ฐ 59๋ถ ๋จ์ → toDays() = 7
8์ผ 1์๊ฐ ๋จ์ → toDays() = 8
์ผ ๋จ์๋ก ๋น๊ต๋ฅผ ํ๊ณ ์ถ์ด์ `toDays()`๋ก ๊ตฌํ์ ํ๋๋ฐ,
ํ
์คํธ ๊ฒฐ๊ณผ๊ฐ ์ผ์ ํ์ง ์๋ค๋ฉด `toHours()`๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, `Instant`๋ก ์ง์ ๋น๊ตํ๋ ๋ฐฉ์๋ ๊ณ ๋ คํด๋ด์ผ๊ฒ ๋ค. ๐ค
Range(in)๋ก ๊ฒฝ๊ณ ์กฐ๊ฑด ์ฒ๋ฆฌ
duration.toDays() in 0..baseDays
- ๋ง๋ฃ์ผ ๋น์ผ์๋ duration ๊ฐ์ด 0์ด๊ธฐ ๋๋ฌธ์, 0์ ํฌํจ์์ผฐ๋ค.
- ๋ง๋ฃ๋๊ธฐ N์ผ ์ ๋ ํฌํจ์์ผ์ผ ํ๊ธฐ ๋๋ฌธ์, baseDays๋ ํฌํจ์์ผฐ๋ค.
- ์ด๋ฏธ ๋ง๋ฃ๋ ํ ํฐ์ ๋ก๊ทธ์ธ์ด ํ์ํ ์ํฉ์ด๊ธฐ ๋๋ฌธ์, duration์ด ์์๊ฐ ๋๋ ์กฐ๊ฑด์ ์ ์ธ์์ผฐ๋ค.