Y J S

๋ณต์žกํ•œ ํŽ˜์ด์ง€ ๋กœ์ง์„ Custom Hook์œผ๋กœ ๋ถ„๋ฆฌํ•œ ๋ฆฌํŒฉํ† ๋ง

๋ฌธ์ œ ์ƒํ™ฉ

  • ํ•œ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์— useState, useEffect๊ฐ€ ๋‚œ๋ฆฝํ•˜๊ณ  ๋ฐ์ดํ„ฐ ํŽ˜์นญ/์ƒํƒœ ํŒŒ์ƒ/์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ๋’ค์„ž์—ฌ UI ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ €ํ•˜๋จ.
  • ๋™์ผยท์œ ์‚ฌ ๋กœ์ง์ด ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋ฐ˜๋ณต๋˜์–ด ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ๊ธฐ๋Šฅ ํ™•์žฅ์ด ๋น„ํšจ์œจ์ ์ž„.

ํ™˜๊ฒฝ

  • ํ”„๋กœ์ ํŠธ: React ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • ์Šคํƒ: React, TypeScript, (Next.js ์‚ฌ์šฉ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ผ ์›์น™ ์ ์šฉ ๊ฐ€๋Šฅ)

์ฆ์ƒ/์ฝ”๋“œ ๋ƒ„์ƒˆ

๊ธด useEffect ์ฒด์ธ, ๋ณต์žกํ•œ ์˜์กด์„ฑ ๋ฐฐ์—ด, ๋ฐ์ดํ„ฐ ํŽ˜์นญ ์ค‘๋ณต, ํŒŒ์ƒ ์ƒํƒœ ๊ณ„์‚ฐ์ด UI ๋ ˆ์ด์–ด์™€ ๊ฒฐํ•ฉ
ํ…Œ์ŠคํŠธ ์–ด๋ ค์›€(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์ปดํฌ๋„ŒํŠธ ์ˆ˜๋ช…์ฃผ๊ธฐ์™€ ๊ฐ•๊ฒฐํ•ฉ), ์žฌ์‚ฌ์šฉ์„ฑ ๋‚ฎ์Œ

์›์ธ ๋ถ„์„

  • ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(๋ฐ์ดํ„ฐ/๋น„์ฆˆ๋‹ˆ์Šค vs. ํ‘œํ˜„/UI)๊ฐ€ ์ด๋ค„์ง€์ง€ ์•Š์•„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ณผ๋„ํ•œ ์ฑ…์ž„์„ ๊ฐ€์ง.
  • ๋น„๋™๊ธฐ ํŽ˜์นญยท์—๋Ÿฌยท๋กœ๋”ฉยทํŒŒ์ƒ ์ƒํƒœ ๊ณ„์‚ฐ์ด ์ปดํฌ๋„ŒํŠธ ๊ณณ๊ณณ์— ์‚ฐ์žฌํ•˜๋ฉฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ์™€ ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ ์ œ์–ด๊ฐ€ ์–ด๋ ค์›€.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. ์ถ”์ถœ ๊ธฐ์ค€ ์ •์˜
    • ๋ฐ์ดํ„ฐ ํŽ˜์นญ, ํŒŒ์ƒ ์ƒํƒœ ๊ณ„์‚ฐ, ํผ/์ƒํƒœ ์ „์ด ๋กœ์ง์„ ์šฐ์„  ์ถ”์ถœ ๋Œ€์ƒ๋กœ ์„ ์ •.
    • ์ปดํฌ๋„ŒํŠธ๋Š” DOMยท์Šคํƒ€์ผยท์ด๋ฒคํŠธ ๋ฐ”์ธ๋”ฉ ๋“ฑ ํ‘œํ˜„ ๋กœ์ง์— ์ง‘์ค‘ํ•˜๋„๋ก ์—ญํ•  ์ถ•์†Œ.
  2. Custom Hook ์„ค๊ณ„
    • ์ž…๋ ฅ: ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ/์ดˆ๊นƒ๊ฐ’/์˜ต์…˜(๋””๋ฐ”์šด์Šค, ์บ์‹ฑ ํ‚ค ๋“ฑ).
    • ์ถœ๋ ฅ: ๋ฐ์ดํ„ฐ, ๋กœ๋”ฉ/์—๋Ÿฌ, ํŒŒ์ƒ ์ƒํƒœ, ์•ก์…˜ ํ•ธ๋“ค๋Ÿฌ(๋ฆฌํ”„๋ ˆ์‹œ/๋ฎคํ…Œ์ด์…˜ ๋“ฑ).
    • ๊ณ„์•ฝ(์ž…์ถœ๋ ฅ ํƒ€์ž…)์„ ๋ช…ํ™•ํžˆ ํ•˜์—ฌ ํ˜ธ์ถœํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„.
  3. ๋ถ€์ž‘์šฉ ๊ด€๋ฆฌ ๊ฐ•ํ™”
    • ์š”์ฒญ ์ทจ์†Œ(AbortController)๋กœ ๊ฒฝ์Ÿ ์ƒํƒœ(race) ๋ฐฉ์ง€, ์˜์กด์„ฑ ๋ณ€๊ฒฝ ์‹œ ์ •๋ฆฌ(cleanup) ์ฒ ์ €.
    • ์—๋Ÿฌ ๋ถ„๋ฅ˜(๋„คํŠธ์›Œํฌ/๊ฒ€์ฆ/์„œ๋ฒ„) ๋ฐ ์žฌ์‹œ๋„/๋ฐฑ์˜คํ”„ ์ •์ฑ… ์˜ต์…˜ํ™”.
  4. ์„ฑ๋Šฅ/๊ฒฝํ—˜ ๊ฐœ์„ 
    • ๋””๋ฐ”์šด์Šค/์Šค๋กœํ‹€, ๊ฒฐ๊ณผ ์บ์‹ฑ(ํ‚ค ๊ธฐ๋ฐ˜ ๋ฉ”๋ชจ์ด์ œ์ด์…˜) ์ ์šฉ.
    • ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฐ˜ํ™˜ ๊ฐ์ฒด๋Š” useMemo, ์ฝœ๋ฐฑ์€ useCallback์œผ๋กœ ์•ˆ์ •ํ™”.
  5. ํƒ€์ดํ•‘/ํ…Œ์ŠคํŠธ
    • ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ๋ฅผ ํ‘œํ˜„, ์˜ค๋ฅ˜ ์ „ํŒŒ ํƒ€์ž… ๋ช…์‹œ.
    • ํ›… ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋กœ ํŽ˜์นญ ์„ฑ๊ณต/์‹คํŒจ, ์˜์กด์„ฑ ๋ณ€๊ฒฝ, ์•ก์…˜ ํ˜ธ์ถœ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒ€์ฆ.
  6. ์ปดํฌ๋„ŒํŠธ ๋‹จ์ˆœํ™”
    • ์ปดํฌ๋„ŒํŠธ๋Š” ํ›…์„ ํ˜ธ์ถœํ•ด ๊ฐ’๊ณผ ํ•ธ๋“ค๋Ÿฌ๋งŒ ๋ฐ›์•„ UI๋ฅผ ๋ Œ๋”.

๊ฒ€์ฆ

  • ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ LOC ๊ฐ์†Œ, ๋กœ์ง ์‘์ง‘๋„ ์ฆ๊ฐ€, UI/๋น„์ฆˆ๋‹ˆ์Šค ์ฝ”๋“œ ๋ถ„๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•ด์ง.
  • ๋™์ผ ํ›…์„ ๋‹ค์ˆ˜ ํ™”๋ฉด์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด ์ˆ˜์ • ๋น„์šฉ ๊ฐ์†Œ.
  • ์˜์กด์„ฑ ๋ณ€๊ฒฝ ์‹œ ์žฌํŽ˜์นญยท์บ์‹ฑ ๋™์ž‘์ด ๊ธฐ๋Œ€๋Œ€๋กœ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ.

๋ฐฐ์šด ์ 

  • ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ๋Š” UI์— ์ง‘์ค‘ํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ํ›…์œผ๋กœ ํ‘œ์ค€ํ™”ํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋ช…ํ™•ํ•œ ๊ณ„์•ฝ(์ž…์ถœ๋ ฅ ํƒ€์ž…)๊ณผ ๋ถ€์ž‘์šฉ ์ œ์–ด๊ฐ€ ๋ฆฌํŒฉํ† ๋ง ์ดํ›„์˜ ์•ˆ์ •์„ฑ์„ ๋‹ด๋ณดํ•จ.
  • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ›…์€ ํ–ฅํ›„ ๊ธฐ๋Šฅ ํ™•์žฅ๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ๊ธฐ๋ฐ˜์ด ๋จ.

์ฐธ๊ณ 

  • React ๊ณต์‹ ๋ฌธ์„œ: Hooks, Custom Hooks ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค