๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Project: ๐Ÿšฉcodefoliol - ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ์ •

ยท ์•ฝ 5๋ถ„
Seung hyo, Lee
Front End Engineer @ Assistfit
๐ŸŽฏ๋ชฉ์ 

ํ”„๋กœ์ ํŠธ - ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฐ์ •์‚ฌํ•ญ ์ •๋ฆฌ


๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ์ •โ€‹

1. Text Editorโ€‹

๐Ÿ“Œ TOAST UI


2. Next.js ์ ์šฉ ์—ฌ๋ถ€โ€‹

๐Ÿ“Œ Next.js ์ ์šฉ

  • ๊ฒฐ์ • ๊ณผ์ •
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ„ฐ๋ ‰์…˜์„ ์ง„ํ–‰ํ•˜๋Š” ์‹œ๊ฐ„ ๋ณด๋‹ค, ์ •์ ์œผ๋กœ ํ…์ŠคํŠธ๋ฅผ ์ฝ๋Š” ์‹œ๊ฐ„์ด ๋” ๊ธธ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์˜๊ฒฌ.
    • SEO ์ ์šฉ์— ์œ ๋ฆฌํ•˜๋‹ค.
    • ์ •์ ์ธ ํŽ˜์ด์ง€์—์„œ ์†์‰ฝ๊ฒŒ SSR์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ฐ„ํŽธํ•œ Route ์„ค๊ณ„๋กœ ํ™•์žฅ์— ์œ ๋ฆฌํ•˜๋‹ค.

3. ์Šคํƒ€์ผ๋งโ€‹

๐Ÿ“Œ styled-components

  • ๊ฒฐ์ • ๊ณผ์ •
    • styled-components
      • ์žฅ์ 
        • ๊ฐœ๋ฐœํŒ€ ์ „์›์—๊ฒŒ ์ต์ˆ™ํ•œ ๋ฌธ๋ฒ•.
        • Sass๋ฌธ๋ฒ•์„ ์ง€์›ํ•จ.
        • ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด ๋…๋ฆฝ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑ ๊ฐ€๋Šฅ.
      • ๋‹จ์ 
        • ์Šคํƒ€์ผ๋ง์„ ์œ„ํ•ด์„œ๋Š” ์ปดํฌ๋„ŒํŠธํ™”๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค.
    • emotion
      • ์žฅ์ 
        • styled-componenets์™€ ๋™์ผ
      • ๋‹จ์ 
        • ๋กœ๊ณ ๊ฐ€ ๋ชป์ƒ๊ฒผ์–ด์š”
        • pragma line์„ ํŒŒ์ผ ์ตœ์ƒ๋‹จ์— ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•จ
    • tail-wind
      • ์žฅ์ 
        • ๊ฐ„ํŽธํ•œ ํผ๋ธ”๋ฆฌ์‹ฑ ๊ฐ€๋Šฅ
        • ๋ชจ๋“ˆ base css๋ผ ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ์šฐ์ˆ˜ํ•จ
      • ๋‹จ์ 
        • ์ธ๋ผ์ธ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง€๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง
        • ์‚ฌ์ „ ํ•™์Šต์ด ์–ด๋А์ •๋„ ํ•„์š”..
    • SCSS + CSS-Module
      • ์žฅ์ 
        • ์ง๊ด€์ ์ด๋‹ค.
      • ๋‹จ์ 
        • ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์ข‹์ง€ ๋ชปํ•˜๋‹ค.
          • ํŒŒ์ผ ํ•˜๋‚˜ ๋” ํŒŒ์•ผํ•จ ใ…Ž.ใ…Ž

4. DBโ€‹

๐Ÿ“Œ supabase

โ†’ ์œ ์ ธ์™€ ํฌํŠธํด๋ฆฌ์˜ค, ์œ ์ ธ์™€ ์œ ์ ธ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด SQL DB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

โ†’ Back-end๋‹จ์˜ ์ฝ”๋“œ ์ง‘์ค‘๋ณด๋‹ค, Front-end๋‹จ์˜ ์ฝ”๋“œ์— ๋” ์ง‘์ค‘ํ•˜๊ธฐ ์œ„ํ•ด BaaS์ธ Supabase ๋ฐ Supabase-Auth๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๊ฒฐ์ • ๊ณผ์ •
    • SQL
      • ์žฅ์ 
        • ์ •๊ทœํ™”๋ฅผ ํ•ด ๋†“์œผ๋ฉด ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
        • ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ๋‹จ์ 
        • ์—„๊ฒฉํ•˜๋‹ค.
        • ์‚ฌ์šฉ ๊ฒฝํ—˜์ด ์ ๋‹ค.
    • NoSQL
      • ์žฅ์ 
        • ๊ฒ€์ƒ‰
        • ์œ ์—ฐ์„ฑ
        • ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค.
        • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋“ค ์จ๋ด„
      • ๋‹จ์ 
        • ์œ ์—ฐ์„ฑ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ฒฐ์ •์„ ๋ฏธ๋ฃจ๊ฒŒ ๋  ์ˆ˜ ์žˆ์Œ
        • ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ๊ณ„์† ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•จ
        • ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์ปฌ๋ ‰์…˜์— ์ค‘๋ณต๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ • ์‹œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ (SQL์—์„œ๋Š” ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅ)
SQLNoSQL
BaaSSupabasefirebase
DBRDS(MySQL, Oracleโ€ฆ.)MongoDB, ElasticSearch

4.5. Authโ€‹

  • ๐Ÿ“Œ supabase-auth
    • OAuth
    • Next-Auth
    • Supabase-Auth โ†’ supabase๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ auth๋„ ์ž๋™์ ์œผ๋กœ ํ•ด๊ฒฐ๋จ!
    • Firebase-Auth

5. ๋กœ์ปฌ ์ƒํƒœ ๊ด€๋ฆฌโ€‹

๐Ÿ“Œ recoil

  • ๊ฒฐ์ • ๊ณผ์ •

    Context API

    • ์žฅ์  : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Œ
    • ๋‹จ์  : ๋ฆฌ๋•์Šค ๋‹ค์Œ์œผ๋กœ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

    Redux Tool Kit

    • ์žฅ์ 
      • ํšŒ์‚ฌ์—์„œ ๋งŽ์ด ์“ด๋‹ค. ๊ณต๊ฐœ๋œ ์ž๋ฃŒ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ๋””๋ฒ„๊น… ํˆด์ด ๊ฐ•๋ ฅํ•˜๋‹ค.
      • ํŒ€์›๋“ค ๋ชจ๋‘ ์‚ฌ์šฉ ํ•ด ๋ณด์•˜๋‹ค.
    • ๋‹จ์ 
      • ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋กœ ์ž‘์€ ์‹ค์ˆ˜๊ฐ€ ํฐ ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ์„ ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„ ๋””๋ฒ„๊น… ์ ˆ์ฐจ๊ฐ€ ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Recoil

    • ์žฅ์ 
      • ์‰ฝ๋‹ค!
      • ํšŒ์‚ฌ์—์„œ ๋งŽ์ด ์“ด๋‹ค. ๋ฆฌ๋•์Šค ๋‹ค์Œ์œผ๋กœ ๋งŽ์€ ์ž๋ฃŒ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • atom ๋‹จ์œ„๋กœ ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
    • ๋‹จ์ 
      • ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ์™„๋ฒฝํ•˜์ง€ ์•Š๋‹ค. ๋””๋ฒ„๊น… ๋ฐ ์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š”๋ฐ ์žˆ์–ด ์‹ ๋ขฐ์„ฑ์ด ๋ถ€์กฑํ•˜๋‹ค.
      • ๋ชจ๋“  API๋“ค์ด ๋†’์€ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
      • ๋””๋ฒ„๊น… ํˆด์ด ์—†๋‹ค.

    Jotai

    • ์žฅ์ 
    • ๋‹จ์ 
      • ์‹ ์ƒ ๊ธฐ์ˆ ์ด๋‹ค.
      • ํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋น„ํ•ด ์•„์ง ์ž๋ฃŒ๊ฐ€ ๋งŽ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

    Zustand

    • ์žฅ์ 
      • ์‰ฝ๋‹ค!
      • ๊ธฐ์กด ๋ฆฌ๋•์Šค ์ง€์‹์ด ์ผ๋ถ€ ์ ์šฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
      • ๋ฆฌ๋•์Šค์˜ ๋””๋ฒ„๊น…ํˆด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹จ์ 
      • Jotai ๋ฌธ์„œํ™”๊ฐ€ ๋œ ๋˜์–ด ์žˆ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๋„ ์ž‘์Šต๋‹ˆ๋‹ค.
      • ์‹ ์ƒ ๊ธฐ์ˆ ์ด๋‹ค.

    Xstate

    • ์žฅ์ 
      • https://xstate.js.org/
      • ๋ณต์žก์„ฑ์ด ๋†’์„ ๋•Œ ๋ฌดํ•œํ•œ ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹จ์ 
      • ๋ฆฌ๋•์Šค๋ณด๋‹ค ๋ณต์žก์„ฑ์ด ๋” ํฝ๋‹ˆ๋‹ค.

6. ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌโ€‹

๐Ÿ“Œ react-query

  • ๊ฒฐ์ • ๊ณผ์ •

    React-query

    • ์žฅ์ 
      • ์ปค๋ฎค๋‹ˆํ‹ฐ
      • ๋งŽ์€ ๊ธฐ๋Šฅ ์ง€์›
      • prefetching
    • ๋‹จ์ 
      • ๋ฌด๊ฑฐ์›€

    Redux-query

    SWR

    • ์žฅ์ 
      • Next.js์™€ ๋™์ผํ•œ ๊ณณ์—์„œ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. https://swr.vercel.app/ko/docs/with-nextjs
      • ๋ฒˆ๋“ค์‚ฌ์ด์ฆˆ ์ž‘์Šต๋‹ˆ๋‹ค.
      • pagination ์ง€์› (useSWRInfinite)
    • ๋‹จ์ 
      • ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ๋ณด๋‹ค ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ž‘์Šต๋‹ˆ๋‹ค.
      • ํ•™์Šต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

7. ๋ฐ์ดํŠธ ํ”ผ์ปคโ€‹

๐Ÿ“Œ react-datepicker

  • ๊ฒฐ์ • ๊ณผ์ •: ๋…„-๋‹ฌ ๊นŒ์ง€ ๋‚ ์งœ ํ”ฝ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
    1. react-datepicker (https://www.npmjs.com/package/react-datepicker) โ†’ date-fns ์‘์šฉ โ†’ ๋‹ค์–‘ํ•œ props์™€ ์ปค์Šคํ…€ ์Šคํƒ€์ผ ๊ฐ€๋Šฅ
      • โ†’ ํŒจํ‚ค์ง€ ์‚ฌ์ด์ฆˆ 526kb๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ํผ
      • โ†’ ๋‹ฌ๊นŒ์ง€ ํ”ฝ ๊ฐ€๋Šฅ. ์—ฌ๋Ÿฌ ์ข…๋ฅ˜ ๊ฐ€๋Šฅ. (https://reactdatepicker.com/)
    2. material ui date picker (https://mui.com/x/react-date-pickers/date-picker/) โ†’ input๋งŒ ์ „๋‹ฌ ๊ฐ€๋Šฅ(custom icon ์‚ฌ์šฉ ๋ถˆ๊ฐ€)
      • โ†’ UI๊ฐ€ ๋…์„ ์ 
    3. toast ui date picker (https://nhn.github.io/tui.date-picker/latest/)
      • โ†’ ์‚ฌ์šฉ ์ž๋ฃŒ๊ฐ€ ๋„ˆ๋ฌด ์ ์Œ

์ฐธ๊ณ  ์ž๋ฃŒ : React์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ DatePicker Library ์ •๋ฆฌ


8. ๊ธฐํƒ€โ€‹

  • axios ์‚ฌ์šฉ (๊นƒํ—™API, (+)ChatGPT(OpenAI))
  • lodash ์‚ฌ์šฉ
    • lodash date (+)date-fns ์‚ฌ์šฉ (๋‚ ์งœ ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅ. n์ผ ์ „ ์ง€์›. ์‹œ๊ฐ„ ์ฐจ์ด ๊ณ„์‚ฐ ๊ฐ€๋Šฅ)