Skip to content

๐Ÿ—“๏ธ Calendar & DatePicker ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ โ€‹

๐Ÿค” ์™œ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”์ง€?

๋‹ฌ๋ ฅ UI์™€ DatePicker๋Š” ๋‹จ์ˆœํžˆ ๋‚ ์งœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋กœ์ง์„ ํฌํ•จํ•œ๋‹ค.

  • ์œค๋…„ ์ฒ˜๋ฆฌ
  • ์›”๋ณ„ ์ผ์ˆ˜ ๊ณ„์‚ฐ
  • ๋‚ ์งœ ๋ฒ”์œ„
  • ์›”/์ฃผ/์ผ ๋ทฐ ์ „ํ™˜
  • locale(ko) ์ฒ˜๋ฆฌ
  • ์‹œ๊ฐ์  ๊ฐ•์กฐ/๋น„ํ™œ์„ฑ ๋‚ ์งœ ๋ Œ๋”๋ง

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉด ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ ์ฆ๊ฐ€, ๊ฐœ๋ฐœ ์ผ์ • ์ง€์—ฐ ๋“ฑ์˜ ๋ฆฌ์Šคํฌ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
๊ฒ€์ฆ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

์Šค์ผ€์ค„ ์บ˜๋ฆฐ๋” - React Big Calendar โ€‹

๐Ÿ“Œ ์„ ํƒ ์ด์œ  โ€‹

  • ์›” ๋‹จ์œ„ ์ผ์ • ์‹œ๊ฐํ™”์— ์ตœ์ ํ™”๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • React ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์šฉ์ด
  • FullCalendar๋„ ๊ณ ๋ คํ–ˆ์œผ๋‚˜, JS ๊ธฐ๋ฐ˜์ด๋ผ React์šฉ ํŒจํ‚ค์ง€๊ฐ€ ๋ž˜ํผ ํ˜•ํƒœ๋ผ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žก
  • ์ž์ฒด์ ์œผ๋กœ ๋‚ ์งœ ๊ณ„์‚ฐ์„ ์ง€์›ํ•˜์ง€ ์•Š์•„์„œ, date-fns์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ (๊ณต์‹ ๋ฌธ์„œ ์ฐธ๊ณ )
    date-fns ์‚ฌ์šฉํ•œ ์ด์œ ์™€ ์ ์šฉ
    • ํ•จ์ˆ˜ ๋‹จ์œ„ import โ†’ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๋ฒˆ๋“ค๋จ
    • TypeScript ์ง€์› ์šฐ์ˆ˜
    • locale(ko) ์ง€์›
    • ์‹œ๊ฐ„ ๊ณ„์‚ฐ/ํฌ๋งทํŒ…์ด ์ง๊ด€์ 

    ์œ ํ‹ธ ๋ถ„๋ฆฌ:

    ts
    const locales = { ko };
    
    export const localizer = dateFnsLocalizer({
      format,
      parse,
      startOfWeek,
      getDay,
      locales,
    });

    localizer ์บ˜๋ฆฐ๋” ์ ์šฉ:

    tsx
    <Calendar
    localizer={localizer}
    ...
    />

๐Ÿ’ฉ ์•„์‰ฌ์šด ์  โ€‹

๐Ÿ“š Reference โ€‹


DatePicker - react-day-picker โ€‹

๐Ÿ“Œ ์„ ํƒ ์ด์œ  โ€‹

  • Caption, Chevron, Footer ๋“ฑ์„ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊ต์ฒด ๊ฐ€๋Šฅ โ†’ Tailwind ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ตœ์ 
  • Disabled ๋‚ ์งœ, ๋‚ ์งœ ์„ ํƒ, locale(ko) ๋“ฑ ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ ์ถฉ์กฑ

๐Ÿ“š Reference โ€‹


์š”์•ฝ โ€‹

๊ธฐ์ค€React Big Calendarreact-day-picker
์—ญํ• ์Šค์ผ€์ค„ ์‹œ๊ฐํ™”๋‚ ์งœ ์„ ํƒ
์ ํ•ฉ์„ฑ์›”๊ฐ„ ์ผ์ • UI์ผ์ • ์ƒ์„ฑ ๋ชจ๋‹ฌ ์ž…๋ ฅํผ
์ปค์Šคํ„ฐ๋งˆ์ด์ง•Tailwind ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ๋ง ์šฉ์ดTailwind ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ตœ์ 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์ž… ์‹œ ๊ธฐ์ค€ (From. ๋ฉ˜ํ† ๋‹˜) โ€‹

  • ๋ฒˆ๋“ค ํฌ๊ธฐ
  • ํŠธ๋ฆฌ ์…ฐ์ดํ‚น ์ง€์› ์—ฌ๋ถ€
  • ํ•„์ˆ˜ ๊ธฐ๋Šฅ ์ถฉ์กฑ ์—ฌ๋ถ€
  • ์ปค์Šคํ„ฐ ๋งˆ์ด์ง• ๋‚œ์ด๋„

VS ๋‚˜์˜ ๊ธฐ์ค€..

  • ์ปค์Šคํ„ฐ ๋งˆ์ด์ง• ๋‚œ์ด๋„
  • ๊ณต์‹ ๋ฌธ์„œ ๊ฐ€๋…์„ฑ
  • ๊ตฌ๊ธ€๋ง ์ตœ์‹  ๋ธ”๋กœ๊ทธ ๋‚ ์งœ์™€ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ๊ตฌ๊ธ€๋ง์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ์ง€
  • ๊นƒํ—ˆ๋ธŒ ๊ฒ€์ƒ‰ ํƒ€ ๋ถ€ํŠธ์บ ํ”„ ํ”„๋กœ์ ํŠธ ์—ผํƒ

๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ ์  ๐Ÿ™‚๐Ÿ”ซ โ€‹

  • ์‹ค์ œ ๋ฒˆ๋“ค ํฌ๊ธฐ ๋น„๊ต ๋ถ€์žฌ
    ์„ ํƒ ์‹œ, ๊ฐ€๋ณ๋‹ค/๋ฌด๊ฒ๋‹ค๋Š” ์ •๋ณด๋ฅผ ๋ธ”๋กœ๊ทธ ๊ธฐ์ค€์œผ๋กœ๋งŒ ํŒ๋‹จํ–ˆ๋‹ค.
  • Tree-Shaking ์˜ํ–ฅ ํ™•์ธ ๋ถ€์กฑ
    ESM(๊ณต์‹ ๋ชจ๋“ˆ ๋ฐฉ์‹) ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๊ณ  ๋„˜์–ด๊ฐ”๊ณ , ๋‚ด๋ถ€ ๋ชจ๋“ˆ์ด ์‹ค์ œ๋กœ tree-shake๋˜๋Š” ๊ตฌ์กฐ์ธ์ง€๊นŒ์ง€๋Š” ํŒŒ์•…ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ์ด๋Š” ์žฅ๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๊ฐ€ ๋ฒˆ๋“ค์— ๋ˆ„์ ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผœ ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
  • ์ ‘๊ทผ์„ฑ ๊ฒ€ํ†  ๋ถ€์กฑ
    ํŠนํžˆ DatePicker๋Š” ํ‚ค๋ณด๋“œ ์กฐ์ž‘๊ณผ aria ์†์„ฑ์ด ์ค‘์š”ํ•œ๋ฐ, ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ ‘๊ทผ์„ฑ ์ˆ˜์ค€์„ ํ™•์ธํ•˜์ง€ ๋ชปํ•จ. ํ”„๋กœ์ ํŠธ์—์„œ ์ ‘๊ทผ์„ฑ์ด ์ค‘์š”ํ•ด์ง€๋ฉด ์ถ”๊ฐ€ ๊ฒ€ํ†  ํ•„์š”