์ ๋์ค ํ์์คํฌํ๋?
์ ๋์ค ํ์์คํฌํ(์ํฌํฌ ์๊ฐ ๋๋ POSIX ์๊ฐ์ด๋ผ๊ณ ๋ ํฉ๋๋ค)๋ 1970๋
1์ 1์ผ 00:00:00 UTC๋ถํฐ ํ๋ฅธ ์ด(seconds)์ ๋์ ๊ฐ์ผ๋ก, ์ค์ด๋ ํฌํจํ์ง ์์ต๋๋ค. ์๊ฐ๋๋ ๋ฌ๋ ฅ ํ์๊ณผ ๋ฌด๊ดํ๊ฒ ํน์ ์๊ฐ์ ์ ์ฅํ๋, ์ปดํจํฐ์ ํ์ค์ ์ธ ์๊ฐ ํํ ๋ฐฉ์์ด์ฃ . ์ด ๊ณ์ฐ๊ธฐ๋ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ฐํํ๋ ๋จ์์ธ ๋ฐ๋ฆฌ์ด(์: ์๋ฐ์คํฌ๋ฆฝํธ์ Date.now()) ๊ฐ์ ์
๋ ฅ๋ฐ์, ์ํฌํฌ ๊ธฐ์ค ์ดยท๋ถยท์ผ๋ก ๋ณํํด ์ค๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
๋ฐ๋ฆฌ์ด ๋จ์์ ์ ๋์ค ์๊ฐ์ ์
๋ ฅ๋์ ๋ฃ๊ณ ์คํํ์ธ์. ์ด ๋๊ตฌ๋ ์
๋ ฅ๊ฐ์ 1000์ผ๋ก ๋๋ ๋ค ๋ด๋ฆผ(floor)ํ์ฌ ์ ์ ๋จ์์ ์ ๋์ค ์ด๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค, API, ๊ทธ๋ฆฌ๊ณ ๋ฆฌ๋
์ค์ date +%s ๋ช
๋ น์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ํํ์
๋๋ค. ๊ฒฐ๊ณผ ํ์๋ ์๋ ๋ฐ๋ฆฌ์ด ๊ฐ๊ณผ ํจ๊ป ๊ฒฝ๊ณผํ ๋ถยท์ผ๋ ํ์๋์ด ๊ฐ์ ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
๊ณต์ ํ์ด
ํต์ฌ ๋ณํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$\text{Seconds} = \left\lfloor \frac{\text{Time (ms)}}{1000} \right\rfloor$$1000์ผ๋ก ๋๋๋ฉด ๋ฐ๋ฆฌ์ด๊ฐ ์ด๋ก ๋ฐ๋๊ณ , ๋ด๋ฆผ(floor)์ผ๋ก ์์ ๋ถ๋ถ์ ์ ๊ฑฐํด ์ ์ ์ด ๋จ์์ ํ์์คํฌํ๋ฅผ ์ป์ต๋๋ค. ๋ถ์ \(\left\lfloor \frac{\text{now\_ms}}{60000} \right\rfloor\), ์ผ์ \(\left\lfloor \frac{\text{now\_ms}}{86{,}400{,}000} \right\rfloor\) ์ผ๋ก ๊ตฌํฉ๋๋ค. ํ๋ฃจ๋ 86,400์ด = 86,400,000๋ฐ๋ฆฌ์ด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ณ์ฐ ์์
\(\text{now\_ms} = 1{,}700{,}000{,}000{,}000\) ์ด๋ผ๊ณ ํด ๋ด ์๋ค. ๊ทธ๋ฌ๋ฉด
$$\text{epoch\_s} = \left\lfloor \frac{1{,}700{,}000{,}000{,}000}{1000} \right\rfloor = 1{,}700{,}000{,}000$$์ด๊ฐ ๋๋ฉฐ, ์ด๋ 2023๋ 11์ 14์ผ์ ํด๋นํฉ๋๋ค. ์ํฌํฌ ๊ธฐ์ค ๊ฒฝ๊ณผ ๋ถ์ \(\left\lfloor \frac{1{,}700{,}000{,}000{,}000}{60000} \right\rfloor = 28{,}333{,}333\), ๊ฒฝ๊ณผ ์ผ์ \(\left\lfloor \frac{1{,}700{,}000{,}000{,}000}{86{,}400{,}000} \right\rfloor = 19{,}675\) ์ ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์ ๋ชจ๋ ๊ณณ์์ ๋ฐ๋ฆฌ์ด๊ฐ ์๋๋ผ ์ด๋ฅผ ์ฐ๋์? ์ค๋๋ ์์คํ
๊ณผ ๋ง์ API(์ ๋์ค, PostgreSQL, JWT์ exp ํด๋ ์ ๋ฑ)๋ ์ด ๋จ์๋ก ์ ์ฅํ๋ ๋ฐ๋ฉด, ๋ธ๋ผ์ฐ์ ์ ์๋ฐ๋ ๋ฐ๋ฆฌ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ ์ฌ์ด์ ๋ณํ์ ๋จ์ํ 1000์ ๊ณฑํ๊ฑฐ๋ ๋๋๋ฉด ๋ฉ๋๋ค.
์ค์ด๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์? ์ ๋์ค ์๊ฐ์ ์ค์ด๋ฅผ ๋ฌด์ํ๋ฏ๋ก ๊น๋ํ ์ ํ ๊ฐ์ด ๋ฉ๋๋ค. ๊ณ์ฐํ๊ธฐ์๋ ํธ๋ฆฌํ์ง๋ง ์ฒ๋ฌธํ์ UTC์ ์๋ฒฝํ๊ฒ ์ผ์นํ์ง๋ ์์ต๋๋ค.
2038๋ ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋์? ์ด ๊ฐ์ ๋ถํธ ์๋ 32๋นํธ ์ ์์ ์ ์ฅํ๋ ์์คํ ์ 2038๋ 1์ 19์ผ์ ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ค๋ง ์ต์ 64๋นํธ ์์คํ ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.