JavaScript๋ก ๋ ์ง์ ์๊ฐ์ ๋ค๋ค์ผ ํ ๋ ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋ง๋ Moment.js์ผ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ต๊ทผ ๋ช ๋ ์ฌ์ด, ๋ ๊ฐ๋ณ๊ณ ํ๋์ ์ธ ๋์์ธ date-fns๊ฐ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ต๋๋ค. ์ด ๊ธ์์๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๊ตํ๊ณ ์ด๋ค ์ํฉ์์ ์ด๋ค ๋๊ตฌ๋ฅผ ์ ํํ๋ฉด ์ข์์ง ์๋ดํด๋๋ฆฝ๋๋ค.
๐ฅ ์๊ฐ: Moment.js vs date-fns
ํญ๋ชฉ | Moment.js | date-fns |
์ด๊ธฐ ๋ฆด๋ฆฌ์ฆ | 2011 | 2014 |
์ ์ง ์ํ | ๋นํ์ฑ (Legacy) | ํ๋ฐํ ์ ์ง๋ณด์ ์ค |
๋ชจ๋ํ | ๋ถ๊ฐ๋ฅ (์ ์ฒด ๋ถ๋ฌ์ผ ํจ) | ๊ฐ๋ฅ (ํจ์๋ณ tree-shaking) |
๋ฒ๋ค ํฌ๊ธฐ | ์ฝ 300KB ์ด์ | ์ฝ 16~20KB (์ฌ์ฉ ํจ์๋ง) |
๋ถ๋ณ์ฑ ์ง์ | โ (๊ฐ์ฒด๊ฐ ๋ณํจ) | โ (๋ถ๋ณ ๋ฐฉ์) |
i18n ์ง์ | ๋ด์ฅ | ๋ด์ฅ, but ์ผ๋ถ ์๋ ์ค์ ํ์ |
๋ฌ๋ ์ปค๋ธ | ๋ฎ์ | ๋ฎ์ |
TypeScript ์ง์ | ๋ฏธํก (ํ์ฌ ํ์ ) | โ ๊ณต์ ์ ๊ณต |
โ๏ธ ์ฃผ์ ๋น๊ต ํฌ์ธํธ
1. ๋ฒ๋ค ํฌ๊ธฐ
Moment.js๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ๋์ ๋ฒ๋ค์ ํฌํจํ๊ณ ์์ด ํธ๋ฆฌ ์ ฐ์ดํน์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ฉด, date-fns๋ ํจ์ ๋จ์๋ก ๋ถ๋ฌ์ฌ ์ ์์ด ํ์ ์๋ ์ฝ๋๊ฐ ํฌํจ๋์ง ์์ต๋๋ค.
โ ํธ๋ฆฌ ์ ฐ์ดํน์ด ํ์ํ ํ๋ก ํธ์๋ ์ฑ์์๋ date-fns๊ฐ ๋ ์ ํฉํฉ๋๋ค.
2. ๋ถ๋ณ์ฑ(Immutability)
Moment.js๋ ๋ ์ง ๊ฐ์ฒด๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ ๋๋ค. ๋ฐ๋ฉด, date-fns๋ ์ ๋ ฅ ๊ฐ์ ๋ฐ๊พธ์ง ์๊ณ ์๋ก์ด ๊ฐ์ ๋ฆฌํดํ๋ ์์ ํจ์ ๋ฐฉ์์ผ๋ก, ์ฝ๋์ ์์ ์ฑ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
3. ๊ตญ์ ํ (i18n)
Moment๋ ๋ค๊ตญ์ด ์ง์์ด ๋ด์ฅ๋์ด ์์ง๋ง, ๋ชจ๋ ์ธ์ด ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ตฌ์กฐ๋ผ ์ฉ๋์ด ์ปค์ง๋๋ค. date-fns๋ ์ธ์ด๋ณ locale ๋ชจ๋์ ์ ํ์ ์ผ๋ก importํ ์ ์์ด ๋ ํจ์จ์ ์ ๋๋ค.
4. ์ง์ ํํฉ๊ณผ ์ปค๋ฎค๋ํฐ
- Moment.js: 2020๋ ์ดํ "legacy project"๋ก ์ ํ๋จ
- date-fns: ํ๋ฐํ๊ฒ ์ ์ง๋ณด์ ์ค, ํ๋ JS/TS์ ์ ํฉ
โ ๊ฒฐ๋ก : ์ธ์ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์จ์ผ ํ ๊น?
์ํฉ | ์ถ์ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
์ ๊ท ํ๋ก์ ํธ | date-fns โ |
๋ ๊ฑฐ์ ์ฝ๋ ์ ์ง | Moment.js (ํ์ ์) |
๋ถ๋ณ์ฑ / ํธ๋ฆฌ ์ ฐ์ดํน ์ค์ | date-fns โ |
๋น ๋ฅธ ํ๋กํ ํ์ดํ | Moment.js (์ต์ํ๋ค๋ฉด) |
๋ค๊ตญ์ด ํฌ๋งท, ๊ฒฝ๋ํ | date-fns โ |
โ๏ธ ๋ง๋ฌด๋ฆฌ
Moment.js๋ ํ๋ ๋ ์ง ์ฒ๋ฆฌ์ ์ฌ์ค์ ํ์ค์ด์์ง๋ง, ํธ๋ฆฌ ์ ฐ์ดํน, ๋ถ๋ณ์ฑ, ๋ชจ๋ํ ์ธก๋ฉด์์ ํ๋ ์น ๊ฐ๋ฐ๊ณผ๋ ๋ค์ ๋ง์ง ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. date-fns๋ ์ด๋ฅผ ๋ณด์ํ๋ ๋์ฒด์ ๋ก์, ๋ ์๊ณ , ๋ ๋น ๋ฅด๋ฉฐ, ํจ์ํ ๋ฐฉ์์ผ๋ก ๋ง์ ๊ฐ๋ฐ์์๊ฒ ์ฌ๋๋ฐ๊ณ ์์ต๋๋ค.
๋ฏธ๋๋ฅผ ์๊ฐํ๋ค๋ฉด date-fns๊ฐ ๋์ฑ ์ข์ ์ ํ์ด ๋ ๊ฒ์ ๋๋ค.