๐Ÿšค ์„ฑ์žฅ์ผ์ง€ 7.0

์ฑ… ํ–‰๋ณตํ•œ ์ด๊ธฐ์ฃผ์˜์ž(์›จ์ธ ๋‹ค์ด์–ด)์˜ ๋‚ด์šฉ์— ์ž๊ทน๋ฐ›์•„ ์‹œ์ž‘ํ•˜๋Š” ์†Œ๋ฐ•ํ•œ ์„ฑ์žฅ๊ธฐ๋ก

์‚ด์•„์žˆ๋Š” ๊ฝƒ๊ณผ ์ฃฝ์€ ๊ฝƒ์€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š”๊ฐ€?
์„ฑ์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
์ƒ๋ช…์˜ ์œ ์ผํ•œ ์ฆ๊ฑฐ๋Š” ์„ฑ์žฅ์ด๋‹ค!

โš› (7.0)<์™„์ „ ๊ฐœํŽธ> ํŒŒ์ธ๋งŒ ํ•™์Šต๋ฒ•์„ ์•Œ๊ฒŒ ๋œ๋งŒํผ, ์„ฑ์žฅ์ผ์ง€๋Š” ์ •๋ง ๊ทธ ๋‚ ์˜ ํ‚ค์›Œ๋“œ ์ค‘์‹ฌ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค.

โš›๏ธ ํ‚ค์›Œ๋“œ: ์ง๊ด€์ ์ด๊ณ  ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑ

husky

  • git hook์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํŒจํ‚ค์ง€์ด๋‹ค.
  • git hook์€ git์˜ ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, pre-commit์ด๋ผ๋Š” git hook์€ commit์„ ํ•˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค.
  • ๋˜, pre-push๋ผ๋Š” git hook์€ push๋ฅผ ํ•˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค.

useEffect vs useLayoutEffect

  • useEffect๋Š” ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋œ ํ›„, ์ฆ‰ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ repaint๊นŒ์ง€ ์™„๋ฃŒ๋œ ํ›„์— ์‹คํ–‰๋œ๋‹ค.
  • useLayoutEffect๋Š” ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋œ ํ›„, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ repaintํ•˜๊ธฐ ์ „์— ์‹คํ–‰๋œ๋‹ค.
  • react ๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” useLayoutEffect๊ฐ€ ํผํฌ๋จผ์Šค๋ฅผ ์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ์— ๊ฐ€๋Šฅํ•˜๋ฉด useEffect๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ๊ถŒ์žฅํ•œ๋‹ค.
  • ์ฐธ๊ณ : https://react.dev/reference/react/useLayoutEffect

shebang

  • #!์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŠน๋ณ„ํ•œ ์ฃผ์„์ด๋‹ค.
  • ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์ด ์ฃผ์„์„ ํ†ตํ•ด ํ•ด๋‹น ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ๋•Œ ์–ด๋–ค ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, #!/usr/bin/env node๋ผ๊ณ  ์ ํ˜€์žˆ์œผ๋ฉด node๋กœ ์‹คํ–‰ํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
  • ํ™•์žฅ์ž๊ฐ€ ์—†์ด๋„ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

.bin

  • npm์œผ๋กœ ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€์˜ ์‹คํ–‰ํŒŒ์ผ์ด ์œ„์น˜ํ•˜๋Š” ํด๋”์ด๋‹ค.
  • npm์œผ๋กœ ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€์˜ ์‹คํ–‰ํŒŒ์ผ์€ node_modules/.bin์— ์œ„์น˜ํ•œ๋‹ค.
  • ํŠน์ • ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ง„ ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ์„ ๋•Œ, package.json์˜ bin ์†์„ฑ์— ๋ช…๋ น์–ด์™€ ์‹คํ–‰ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ globalํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๋“ค๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ์žˆ๋‹ค.
    • echo $PATH๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด๋ฉด, /usr/local/bin์— ๋งŽ์€ ๋ช…๋ น์–ด๋“ค์ด ์œ„์น˜ํ•ด์žˆ๋‹ค.

๐Ÿ“ ํšŒ๊ณ 

์›ํ‹ฐ๋“œ ์ธํ„ด์‹ญ ์ฒซ๋ฒˆ์งธ ์„ธ์…˜์„ ๋“ค์—ˆ๋‹ค. ๊ฐœ๋ฐœ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ๋ช‡๋ฒˆ ๋“ค์–ด๋ณธ ๋ถ„์ด ๋ฉ˜ํ† ๋‹˜์ด์…”์„œ ๋†€๋ž๋‹ค. ์ด๋ฆ„์„ ๋“ค์—ˆ๋˜๋งŒํผ ์„ธ์…˜ ์ง„ํ–‰์„ ๋„ˆ๋ฌด ์ž˜ํ•ด์ฃผ์…”์„œ ๋” ๋†€๋ž๋‹ค. ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ prettier, eslint, husky์— ๋Œ€ํ•ด์„œ ์–ด๋Š์ •๋„ ์•ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๋ถ€๋ถ„๋“ค์ด ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค.(ํŠนํžˆ husky๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด prettier์™€ eslint๋ฅผ cli๋กœ๋„ ๋‘์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ!)

๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ํ•ญ์ƒ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค๋Š” ๋ง์ด ๋„ˆ๋ฌด ์ธ์ƒ๊นŠ์—ˆ๋‹ค.(ํ‰์†Œ์— ๋‚˜๋Š” ์ˆ˜๋™์œผ๋กœ ํ•˜๋Š” ๊ฒƒ๋„ ๊พธ์—ญ๊พธ์—ญํ•˜๋Š” ์Šคํƒ€์ผ์ด๋ผโ€ฆ)

๋ชจ์ž์Šค๋ฅผ ์ฝ์ง€ ๋ชปํ•œ ๊ฑด ์•„์‰ฝ์ง€๋งŒ, ๊ทธ๋ž˜๋„ ๊ณ„ํšํ•œ๋Œ€๋กœ ๋งŽ์€ ๊ฒƒ๋“ค์„ ํ•ด์„œ ๋ฟŒ๋“ฏํ•œ ํ•˜๋ฃจ์˜€๋‹ค :)