/javascript-web-todo

๐Ÿ—“react hooks๋กœ ๊ตฌํ˜„ํ•œ Todo App

Primary LanguageJavaScript

Todo App with React hooks

React hooks๋กœ ๊ตฌํ˜„ํ•œ Todo App

์‚ฌ์šฉ ๊ธฐ์ˆ  : React hooks, styled-components, express, node.js, babel, webpack

Index


1. ๊ธฐ๋Šฅ

1-1. ํ• ์ผ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ

ํ• ์ผ๊ด€๋ฆฌ

โ€‹

  • ํ•  ์ผ ์ถ”๊ฐ€, ์‚ญ์ œ, ์ง„ํ–‰์ƒํƒœ ์—…๋ฐ์ดํŠธ, ์—…๋ฐ์ดํŠธ ์ทจ์†Œ ๊ธฐ๋Šฅ
  • ํ•  ์ผ ๋ชฉ๋ก ์ ‘๊ธฐ, ํŽผ์น˜๊ธฐ ๊ธฐ๋Šฅ
  • ์ง„ํ–‰ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ์‹œ ํ‘œ์‹œ๋ถ€๋ถ„ ํ•˜์ด๋ผ์ดํŒ…

1-2. ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ๋ผ์šฐํŒ…

๋ผ์šฐํ„ฐ

  • ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ์˜ Router, Switch, Route ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ผ์šฐํŒ…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Express์„œ๋ฒ„์—์„œ history-fallback ์ฒ˜๋ฆฌํ•˜์—ฌ url๋กœ ์ง์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ์น˜ํ•˜๋Š” url์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” Switch์˜ ๋งˆ์ง€๋ง‰ ์ปดํฌ๋„ŒํŠธ(NoMatch) ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

2. ์„ค๊ณ„

ํˆฌ๋‘ ์„ค๊ณ„

  • Context API์™€ Reducer๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๊ฐ„ ์ „๋‹ฌ์ด ํ•„์š” ์—†๋Š” state๋Š” useState๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.(todoInput ๋ฐ folded)

3. ๊ณ ๋ฏผํ•œ ์ 

3-1. ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” hooks์˜ ์ ์ ˆํ•œ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ

useState, useReducer, useContext์˜ 3๊ฐ€์ง€ hooks๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ, ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

3-1-1. Reducer๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • <๊ฐ ์ปดํฌ๋„ŒํŠธ ์—ญํ• >
    • reducer : ๋กœ์ง ๋ณด์œ  ํ•จ์ˆ˜
    • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ : state, dispatch๋ณด์œ , view์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง
    • view์ปดํฌ๋„ŒํŠธ : view๋ Œ๋”๋ง, ์•ก์…˜ ํŠธ๋ฆฌ๊ฑฐ
  • ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • props๋ฅผ ํ†ตํ•ด dispatch ๋ฉ”์„œ๋“œ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • useState๋งŒ ์‚ฌ์šฉํ•  ๋•Œ์— ๋น„ํ•ด state์™€ dispatch 2๊ฐ€์ง€๋งŒ ์ „๋‹ฌํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•ด์ง‘๋‹ˆ๋‹ค.
  • ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋Š” view์ปดํฌ๋„ŒํŠธ์— ์œ„์น˜ํ•˜๊ณ  dispatch๋ฅผ ํ•ธ๋“ค๋Ÿฌ ๋‚ด์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ view์ปดํฌ๋„ŒํŠธ์—์„œ ์–ด๋–ค action์„ ํŠธ๋ฆฌ๊ฑฐํ•ด์•ผํ•˜๋Š”์ง€๋Š” ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    (๋ฐ”๋‹๋ผ์—์„œ ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ ๋˜์—ˆ์„ ๋•Œ, model์— ์ด๋ฒคํŠธ ๋ฐœ์ƒ ๋‚ด์šฉ์„ ๋ฉ”์‹œ์ง€๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๋Š๋‚Œ)

3-1-2. Context๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

case1 : Provider๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  • <๊ฐ ์ปดํฌ๋„ŒํŠธ ์—ญํ• >
    • context : ๋‹จ์ˆœ ์ „์—ญ ๊ฐ์ฒด
    • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ : state๋ณด์œ , view์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง, (๋กœ์ง ๋ณด์œ )
    • view์ปดํฌ๋„ŒํŠธ : view๋ Œ๋”๋ง, (๋กœ์ง ๋ณด์œ )
  • context ์ž์ฒด๋Š” ๊ฑฐ์˜ ์•„๋ฌด ์—ญํ• ๋„ ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • state๋ฅผ ์†Œ์œ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ์ด ์ปค์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    (state๋ณด์œ , view๋ Œ๋”๋ง, ๋กœ์ง ๋ณด์œ -๋กœ์ง์€ ๋ทฐ์— ์œ„์น˜ํ•  ์ˆ˜๋„ ์žˆ์Œ)
  • ๋กœ์ง์ด view์— ์œ„์น˜ํ•˜๋Š” ๊ฒฝ์šฐ : setState๋ฅผ context์—์„œ ๋ฐ›์•„์„œ ์‚ฌ์šฉ
  • ๋กœ์ง์ด state์™€ ํ•จ๊ป˜ ์œ„์น˜ํ•˜๋Š” ๊ฒฝ์šฐ : ๋กœ์ง(ํ•ธ๋“ค๋Ÿฌํ•จ์ˆ˜)์„ context์—์„œ ๋ฐ›์•„์„œ ์‚ฌ์šฉ
  • state๋ฅผ provider๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ(๋ถ„๋ฆฌํ•˜๋Š”๊ฒŒ context์˜ ์—ญํ• ์„ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์ข‹์•„๋ณด์ž…๋‹ˆ๋‹ค)

case 2 : Provider ๋ถ„๋ฆฌํ•˜๊ณ  ๋กœ์ง์„ view์— ์œ„์น˜ํ•˜๋Š” ๊ฒฝ์šฐ

  • <๊ฐ ์ปดํฌ๋„ŒํŠธ ์—ญํ• >
    • context : ์ „์—ญ ๊ฐ์ฒด, state๋ณด์œ 
    • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ : view์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง
    • view์ปดํฌ๋„ŒํŠธ : view๋ Œ๋”๋ง, ๋กœ์ง ๋ณด์œ (setState๋ฅผ context์—์„œ ๋ฐ›์•„์„œ ์‚ฌ์šฉ)
  • ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์€ ๊ฐ view์— ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • setState๋ฅผ context๋กœ ๋„˜๊ฒจ์„œ ๊ฐ view์—์„œ ์ „๋‹ฌ๋ฐ›์•„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ํฌ๊ธฐ๊ฐ€ ์ ๋‹นํ•˜๊ฒŒ ๋‚˜๋ˆ ์ง‘๋‹ˆ๋‹ค.
  • context์˜ ์—ญํ• ์€ ์ž‘์•„์ง‘๋‹ˆ๋‹ค.(state๋งŒ ๋ณด์œ ํ•˜๊ณ  ๋กœ์ง์„ ๊ฐ–์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ)
  • view์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(๋กœ์ง์„ ๋ณด์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ)

case 3: Provider ๋ถ„๋ฆฌํ•˜๊ณ  ๋กœ์ง์„ Provider์— ์œ„์น˜ํ•˜๋Š” ๊ฒฝ์šฐ

  • <๊ฐ ์ปดํฌ๋„ŒํŠธ ์—ญํ• >

    • context : ์ „์—ญ ๊ฐ์ฒด, state๋ณด์œ , ๋กœ์ง(ํ•ธ๋“ค๋Ÿฌํ•จ์ˆ˜) ๋ณด์œ 
    • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ : view์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง
    • view์ปดํฌ๋„ŒํŠธ : view๋ Œ๋”๋ง, (ํ•ธ๋“ค๋Ÿฌํ•จ์ˆ˜๋ฅผ context์—์„œ ๋ฐ›์•„์„œ ์‚ฌ์šฉ)
  • context์˜ ์—ญํ• ์ด ์กฐ๊ธˆ ์ปค์ง‘๋‹ˆ๋‹ค.(state๋ณด์œ  + ๋กœ์ง ๋ณด์œ )

  • view์ปดํฌ๋„ŒํŠธ ์ž์ฒด์˜ ์žฌ์‚ฌ์šฉ์„ฑ์€ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.(๋กœ์ง์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๋Š” ๋Š๋‚Œ)

3-1-3. ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ(+ provider ๋ถ„๋ฆฌ)

  • <๊ฐ ์ปดํฌ๋„ŒํŠธ ์—ญํ• >

    • reducer : ๋กœ์ง ๋ณด์œ  ํ•จ์ˆ˜
    • context : ์ „์—ญ ๊ฐ์ฒด, state, dispatch๋ณด์œ 
    • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ : view์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง
    • view์ปดํฌ๋„ŒํŠธ : view๋ Œ๋”๋ง, ์•ก์…˜ ํŠธ๋ฆฌ๊ฑฐ
  • ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ์ด ์ž‘๊ฒŒ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค.

  • ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ์— ๊ฐ€์žฅ ์–ด์šธ๋ฆฌ๋Š” ์ผ€์ด์Šค๋ผ๊ณ  ์—ฌ๊ฒจ์ง‘๋‹ˆ๋‹ค.

    reducer
    reducer๋Š” ์˜ค๋กœ์ง€ ๋กœ์ง์—๋งŒ ์‹ ๊ฒฝ์“ฐ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.
    context
    context๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ„ ์ „๋‹ฌ์ด ํ•„์š”ํ•œ state์˜ ๊ด€๋ฆฌ์— ์ง‘์ค‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    App
    ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” ์ „์ฒด์ ์ธ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋ Œ๋”๋ง ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    view
    ๊ฐ๊ฐ์˜ view ์ปดํฌ๋„ŒํŠธ๋Š” '์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ค„ ์ง€'์™€ '์•ก์…˜์„ ํŠธ๋ฆฌ๊ฑฐ'ํ•˜๋Š” ๋ฐ์—๋งŒ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”์— ๋”ฐ๋ผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์ง€๋งŒ, ์ผ๋‹จ reducer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด dispatch ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ•์ œ ๋˜๊ณ , view์ปดํฌ๋„ŒํŠธ์—์„œ ์•ก์…˜์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์ผ๊ด€๋œ ๋ฉ”์‹œ์ง€ ํ๋ฆ„์„ ๊ฐ–๊ฒŒ๋˜์–ด ์ฝ”๋“œ๊ฐ€ ์ •๋ˆ๋˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. (dispatch๋ฉ”์„œ๋“œ๋ฅผ props๋กœ ์ „๋‹ฌํ•˜๊ณ , ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” view์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ํŒจํ„ด์œผ๋กœ ์ •๋ˆ๋จ)

3-2. context๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ƒํƒœ์™€ ๊ด€๋ จํ•œ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ๊ธฐ๋ณธ์ ์œผ๋กœ useCallback()๊ณผ React.memo()๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ตœ์ ํ™”๋ฅผ ์‹œ๋„ํ•˜์˜€๋Š”๋ฐ์š”,
    context๋กœ ๊ด€๋ฆฌ๋˜๋Š” ์ƒํƒœ๋Š” React.memo()๋กœ ์ตœ์ ํ™”๋˜์ง€ ์•Š์•„์„œ ๋ฐฉ๋ฒ•์ด ์—†๋‚˜ ๋งŽ์ด ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฒฐ๋ก ์ ์œผ๋กœ๋Š” context๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.


  1. context์— ํ•  ์ผ ๋ชฉ๋ก(todos)๊ณผ todos๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” dispatchํ•จ์ˆ˜๋ฅผ ๋‘๊ณ  view์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  2. TodoInput ์ปดํฌ๋„ŒํŠธ : ์ƒˆ๋กœ์šด ํ•  ์ผ์„ ์ž…๋ ฅ๋ฐ›์•„์„œ todos๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด dispatchํ•จ์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ์šฉ
    TodoList ์ปดํฌ๋„ŒํŠธ : ํ•  ์ผ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๊ณ  ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด todos์™€ dispatch๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ์šฉ

  3. ๋ฌธ์ œ๋Š”, TodoList์—์„œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ, TodoInput์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. view

  4. TodoInput์€ props๋กœ ๋ฐ›๋Š” ์ƒํƒœ๋Š” ์—†์ด context๋กœ ๋ถ€ํ„ฐ ๊ฐ์ฒดํ˜•ํƒœ์˜ value๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ์š”,
    context๊ฐ€ ๋ Œ๋”๋ง๋˜๋ฉด์„œ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ '๊ฐ์ฒด'๊ฐ€ ์•„๋‹Œ '๊ฐ’'์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

แ„‡แ…งแ†ซแ„€แ…งแ†ผแ„Œแ…ฅแ†ซ แ„‡แ…งแ†ซแ„€แ…งแ†ผแ„’แ…ฎ

  1. ์ฒ˜์Œ์—๋Š” dispatchํ•จ์ˆ˜๋ฅผ useCallback์œผ๋กœ ๊ฐ์‹ธ์„œ ๋ฆฌํ„ดํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    ํ•˜์ง€๋งŒ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ useReducer๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” dispatchํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ๊ฐ™์€ ํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  dispatchํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ context์˜ value๋กœ ์ „๋‹ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  2. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์•„๋ž˜ ํ”„๋กœํŒŒ์ผ๋ง ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ todos ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋”๋ผ๋„ TodoInput์€ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋„๋ก ์ตœ์ ํ™”์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

view

3-3. useMemo์™€ useEffect์˜ ์ฐจ์ด

  • ์ฒ˜์Œ์— useMemo๋ฅผ ์ ‘ํ–ˆ์„ ๋•Œ๋Š” ๋‹จ์ˆœํžˆ useCallback์€ ํ•จ์ˆ˜์— ์‚ฌ์šฉํ•˜๊ณ  useMemo๋Š” ๊ฐ’์— ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜ hooks์ด๋‹ค! ๋ผ๊ณ  ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ๊ฐ™์ด ๊ณต๋ถ€ํ•˜๋Š” ์นœ๊ตฌ ํ•˜๋‚˜๊ฐ€ useMemo๋ž‘ useEffect๋ž‘ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™์ง€ ์•Š์•„์š”? ๋ผ๋Š” ์งˆ๋ฌธ์„ ๋˜์กŒ๊ณ  useMemo๋ฅผ ์ž˜๋ชป ์ดํ•ดํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.
    ๊ทธ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์‹๋ฌธ์„œ ๋“ฑ ์—ฌ๋Ÿฌ ์ž๋ฃŒ๋„ ์ฐพ์•„๋ณด๊ณ  ์˜ˆ์ œ์ฝ”๋“œ๋„ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ๊ธ€์„ ํ•˜๋‚˜ ์จ๋ดค์Šต๋‹ˆ๋‹ค.(useMemo vs. useEffect)
  • ๋‘ hooks์˜ ๋™์ž‘์„ ์‚ดํŽด๋ณด๋ฉด์„œ useEffect์˜ ์ฝœ๋ฐฑ์€ ๋ Œ๋”๋ง ์ดํ›„์— ์‹คํ–‰๋˜๊ณ  useMemo์˜ ์ฝœ๋ฐฑ์€ ๋ Œ๋”๋ง ๋„์ค‘์— ์‹คํ–‰๋œ๋‹ค๋Š” ์ , useEffect์˜ ์ฝœ๋ฐฑ์—์„œ state๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ์ถ”๊ฐ€์ ์ธ ๋ Œ๋”๋ง์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๋Š” ์  ๋“ฑ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

4. ๋Š๋‚€ ์ 

๋ฐฐ์šด ์ 

babel๊ณผ webpack์„ ์ด์šฉํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์ •

๋ฆฌ์•กํŠธ ์•ฑ์„ ๋งŒ๋“ค๋ฉด์„œ CRA๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  babel๊ณผ webpack์„ ์ด์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์ •์„ ์ง์ ‘ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐพ์•„๊ฐ€๋ฉด์„œ configํŒŒ์ผ ์ž‘์„ฑ๋ฒ•, ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์‚ฌ์šฉ๋ฒ• ๋“ฑ์„ ์ตํ˜”์Šต๋‹ˆ๋‹ค.

webpack.config ๋ถ„๋ฆฌํ•˜๊ณ  ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ ์šฉํ•˜๋Š” ๋ฒ•

์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ webpack.config๋ฅผ ๊ฐœ๋ฐœ์šฉ๊ณผ ๋ฐฐํฌ์šฉ 2๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๋ฐฐํฌ์šฉ config๋Š” splitChunks๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ํ™œ์šฉํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์‹œ๋„ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๊ฐ€์ง€ React hooks ํ™œ์šฉ๋ฒ•

์ƒํƒœ ๊ด€๋ฆฌ์— ํ•„์š”ํ•œ hooks ๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ ํŠน์ง•์„ ๋Š๊ปด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
์ปค์Šคํ…€ hooks๋„ ๋ช‡๊ฐœ ๋งŒ๋“ค์–ด๋ณด์•˜๋Š”๋ฐ, ๋กœ์ง์„ hooks๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฑธ ์ž๊พธ ์‹œ๋„ํ•ด๋ณด์•„์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์•„์‰ฌ์šด ์  & ๊ฐœ์„ ํ•  ์ 

๋ ˆ์ด์ง€๋กœ๋”ฉ ์ ์šฉํ•˜๊ธฐ

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ์˜ switch ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ดˆ๊ธฐํ™”๋ฉด ์ง„์ž… ์‹œ์— ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง์„ ๋ง‰๊ธฐ๋Š” ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ chunk๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ์ž์ฒด๋ฅผ ๋‚˜์ค‘์— ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ํ•˜๋”๊ตฐ์š”!
๊ทœ๋ชจ๊ฐ€ ํฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋ณด๋‹ค ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•ด ๊ผญ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ผ ์ƒ๊ฐ๋˜์–ด ์ถ”ํ›„์— ์ ์šฉํ•ด๋ณผ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

atomic design์˜ ์ ์šฉ์ด ์–ด์„คํŽ๋˜ ์ 

์‹œ์ž‘ํ•  ๋•Œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์žก์•„์•ผํ•˜๋‚˜ ๊ณ ๋ฏผํ•˜๋˜ ์ค‘ atomic design์„ ์ ‘ํ–ˆ๋Š”๋ฐ์š”, ๋ฆฌ์•กํŠธ์— ๋”ฑ ์•Œ๋งž์ง€ ์•Š์„๊นŒ? ์‹ถ์–ด์„œ ๋‚˜๋ฆ„ ๋”ฐ๋ผํ•ด๋ณด๋ ค ํ–ˆ์ง€๋งŒ ์•ˆ ํ•œ๊ฒƒ๋งŒ ๋ชปํ•˜๊ฒŒ ๋˜์–ด๋ฒ„๋ฆฐ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ตฌ์กฐ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ฐœ๋ฐœ์ด ๋”๋ŽŒ์ง€๋Š” ๊ฒฝํ—˜์„ ํ–ˆ๋Š”๋ฐ์š”, ๋‹ค์Œ์—๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๋ คํ•˜์ง€ ๋ง๊ณ  ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋ฉด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์€ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณผ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.