์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

React ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 2 - ๋ฏธ์…˜์œผ๋กœ ์™„์„ฑํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ํ›…๊ณผ ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜

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

(5.0) ์ˆ˜๊ฐ•ํ‰ 2๊ฐœ

์ˆ˜๊ฐ•์ƒ 214๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ

์ˆ˜๊ฐ• ํ›„ ์ด๋Ÿฐ๊ฑธ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”

  • ์ˆ˜๋งŒ ๊ฐœ์˜ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์Ÿ์•„์ ธ๋„ 60ํ”„๋ ˆ์ž„์˜ ๋ถ€๋“œ๋Ÿฌ์›€์„ ์œ ์ง€ํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ์•ฑ์„ ์™„์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์—๋„ ์‚ฌ์šฉ์ž์˜ ํด๋ฆญ๊ณผ ์ž…๋ ฅ์— ์ฆ‰๊ฐ ๋ฐ˜์‘ํ•˜๋Š” ํ•˜์ด์—”๋“œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹จ์ˆœํ•œ ๊ฐ์ด ์•„๋‹ˆ๋ผ ๋ Œ๋”๋ง ๋น„์šฉ์„ ์น˜๋ฐ€ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ์ ํ™” ํฌ์ธํŠธ๋ฅผ ์ •ํ™•ํžˆ ์งš์–ด๋‚ด๋Š” ์•ˆ๋ชฉ์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ํŒ์—…์ด๋‚˜ ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฏธ์„ธํ•œ ๋ฒˆ์ฉ์ž„๊ณผ ๋ ˆ์ด์•„์›ƒ ํ”๋“ค๋ฆผ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๋ฟŒ๋ฆฌ ๋ฝ‘์•„ ์„œ๋น„์Šค์˜ ์•ˆ์ •์„ฑ์„ ์‹ค๋ฌด ์ตœ๊ณ  ์ˆ˜์ค€์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

  • ๋Œ€๊ทœ๋ชจ ๊ธฐ์—…์šฉ ์„œ๋น„์Šค์— ์ฆ‰์‹œ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€ ๋†’์€ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„๋ฒ•์„ ์™„๋ฒฝํžˆ ์ตํž™๋‹ˆ๋‹ค.

  • ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์„œ๋น„์Šค ์ „์ฒด๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š๋„๋ก ์šฐ์•„ํ•˜๊ฒŒ ๊ฒฉ๋ฆฌํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • ๋ฆฌ์•กํŠธ ์—”์ง„์˜ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ถ”์ ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ์‹ค์ „ ์‹ค๋ ฅ์„ ์–ป์Šต๋‹ˆ๋‹ค.

  • ์ˆ˜๋งŒ ๊ฐœ ํ•ญ๋ชฉ ์ค‘ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ 0.1์ดˆ ๋งŒ์— ์ฐพ์•„์ฃผ๋Š” ์ง€๋Šฅํ˜• ๊ฒ€์ƒ‰ ๋ฐ ํ•„ํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ์ง์ ‘ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฃผ๋‹ˆ์–ด ์ˆ˜์ค€์„ ์••๋„ํ•˜๋Š” ๊ธ€๋กœ๋ฒŒ ๊ด€์ œ ๋Œ€์‹œ๋ณด๋“œ๊ธ‰์˜ ๊ณ ๋‚œ๋„ ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ์„ ํฌํŠธํด๋ฆฌ์˜ค์— ๋‹ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ๋‹จ์ˆœํžˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋„˜์–ด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ํผํฌ๋จผ์Šค๋ฅผ ์ฑ…์ž„์ง€๋Š” ์—”์ง€๋‹ˆ์–ด์˜ ์‚ฌ๊ณ ๋ฐฉ์‹์„ ๊ฐ–์ถฅ๋‹ˆ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ์ฐฐ๋‚˜์˜ ์‹œ๊ฐ„์„ ์ง€๋ฐฐํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์˜ ๋””ํ…Œ์ผ์„ ์™„์„ฑํ•˜๋Š” ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ํ™˜๊ฒฝ์—์„œ๋„ ๊นจ์ง€์ง€ ์•Š๋Š” ๊ฒฌ๊ณ ํ•œ ์ปดํฌ๋„ŒํŠธ ์ •์ฒด์„ฑ ๋ถ€์—ฌ ์ „๋žต์„ ์‹ค๋ฌด์— ์ ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ์ตœ์‹  ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ™œ์šฉํ•ด ๋ณต์žกํ•œ ํŽ˜์ด์ง€ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์„ ์–ธ์ ์œผ๋กœ ์™„๋ฒฝํžˆ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ๊ณผ ์„œ๋ฒ„ ์ƒํƒœ ๋™๊ธฐํ™”๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ๋งž๋ฌผ๋ ค ๋Œ์•„๊ฐ€๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์‹œ์Šคํ…œ์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ํ˜„์—…์—์„œ ๋งˆ์ฃผํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ€ํ˜นํ•˜๊ณ  ๊นŒ๋‹ค๋กœ์šด ์„ฑ๋Šฅ ๋ฌธ์ œ๋“ค์„ ๊ธฐ์ˆ ์ ์œผ๋กœ ์ •๋ฉด ๋ŒํŒŒํ•˜๋Š” ๊ฐ•ํ•œ ์ž์‹ ๊ฐ์„ ์–ป์Šต๋‹ˆ๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์—ฐ์‚ฐ ๋น„์šฉ ์‚ฌ์ด์˜ ์ „๋žต์  ์„ ํƒ์„ ํ†ตํ•ด ์ตœ์ ์˜ ์‹คํ–‰ ํšจ์œจ์„ ๋ฝ‘์•„๋‚ด๋Š” ์„ค๊ณ„ ์—ญ๋Ÿ‰์„ ํ‚ค์›๋‹ˆ๋‹ค.

  • ์‹ค์ œ ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒช๋Š” ์ง€๋…ํ•œ ์‹ค๋ฌด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ฏธ์…˜์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ฉฐ ์‹ค์ „ ๊ฐ๊ฐ์„ ๊ทนํ•œ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

  • ์‚ฌ์†Œํ•œ ๋””ํ…Œ์ผ์˜ ์ฐจ์ด๊ฐ€ ๋งŒ๋“œ๋Š” ๋ช…ํ’ˆ UI์™€ ์ผ๋ฐ˜ UI์˜ ๊ฐ„๊ทน์„ ๊ธฐ์ˆ ์  ์™„์„ฑ๋„๋กœ ๋ฉ”์šฐ๋Š” ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

  • ๊ฐ•์˜๊ฐ€ ๋๋‚˜๋ฉด ๋ฆฌ์•กํŠธ์˜ ์ •์ ์—์„œ ์„œ๋น„์Šค๋ฅผ ๋ฆฌ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์••๋„์ ์ธ ๊ธฐ์ˆ ์  ๊ฒฝ์Ÿ๋ ฅ์„ ํ™•๋ณดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๐ŸŽ“React ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 2 ๋ฏธ์…˜์œผ๋กœ ์™„์„ฑํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ํ›…๊ณผ ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜

React์˜ ๊ธฐ์ดˆ๋ฅผ ๋„˜์–ด์„  ๋‹จ๊ณ„๋Š” ๋‹จ์ˆœํžˆ ํ™”๋ฉด์„ '๊ทธ๋ฆฌ๋Š” ๊ฒƒ'์ด ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅด๋Š” '์—”์ง„์˜ ์„ฑ๋Šฅ๊ณผ ๊ตฌ์กฐ'๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜๋Š” React์˜ ๋ณด๋‹›์„ ์—ด๊ณ  ๋‚ด๋ถ€ ๋ Œ๋”๋ง ์—”์ง„์„ ํŠœ๋‹ํ•˜๋Š” ํ•˜์ด์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋ง ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋‚˜ ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋งˆ์ฃผํ•  ๋•Œ ๋ง‰์—ฐํ•œ ์ถ”์ธก์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€๋งŒ,

์ด ๊ฐ•์˜๋Š” โ€œ์™œ ์ด ํ›…์ด ํƒ„์ƒํ–ˆ๋Š”๊ฐ€โ€๋ผ๋Š” ๊ณตํ•™์  ์งˆ๋ฌธ์—์„œ ์ถœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

์ฐธ์กฐ ๋™์ผ์„ฑ โ†’ ๋ Œ๋”๋ง ํญ๋ฐœ ๋ฐ˜๊ฒฝ โ†’ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง โ†’ ๋ฐ์ดํ„ฐ ๋กœ๋”๋กœ ์ด์–ด์ง€๋Š” ๊ณ ๊ธ‰ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์™„๋ฒฝํžˆ ์ •๋ณตํ•˜๋ฉฐ, 0.1์ดˆ์˜ ๋ ‰๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š” ์ „์—ญ ์ƒํƒœ ์—”์ง„์„ 37๊ฐœ์˜ ์‹ค๋ฌด ๋ฏธ์…˜์„ ํ†ตํ•ด ์†๋์œผ๋กœ ์ฒด๋“ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงฑ ๊ฐ•์˜ ๊ตฌ์„ฑ์˜ ํ•ต์‹ฌ ์ฒ ํ•™

๐Ÿ“Œ โ€œ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์ปดํฌ๋„ŒํŠธ์˜ ์‚ฌ์ƒํ™œ์ด ์•„๋‹ˆ๋‹ค.โ€
โ†’ useState๋กœ ํŒŒํŽธํ™”๋œ ๋กœ์ง์€ ๋ฒ„๊ทธ์˜ ์˜จ์ƒ์ด ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ƒํƒœ ์ „์ด๋Š” '๋ฆฌ๋“€์„œ(Reducer)'๋ผ๋Š” ๋…๋ฆฝ๋œ ๋‘๋‡Œ์—์„œ ์›์ž์ (Atomic)์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. UI์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์—„๊ฒฉํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ, ํ™”๋ฉด ์—†์ด๋„ ๋กœ์ง ๊ทธ ์ž์ฒด๋กœ ์™„๋ฒฝํžˆ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ '๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›(SSOT)' ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ์ง์ž‘ํ•˜์ง€ ๋ง๊ณ  ๋ฐ์ดํ„ฐ๋กœ ์ฆ๋ช…ํ•˜๋ผ.โ€
โ†’ "๋А๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค"๋Š” ์ฃผ๊ด€์ ์ธ ๋А๋‚Œ์„ ๋ฒ„๋ฆฌ๊ณ , ํ”„๋กœํŒŒ์ผ๋Ÿฌ(Profiler)๋ฅผ ํ†ตํ•ด ๋ฐ€๋ฆฌ์ดˆ(ms) ๋‹จ์œ„์˜ ๊ฐ๊ด€์  ์ง€ํ‘œ๋กœ ์†Œํ†ตํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ ์œ ํ•˜๋Š” ๋ฒ”์ธ์„ ๋ฐ์ดํ„ฐ๋กœ ๊ฒ€๊ฑฐํ•˜๊ณ , 60fps์˜ ๋ถ€๋“œ๋Ÿฌ์›€์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ '16ms์˜ ๋ฒ•์น™'์„ ์‚ฌ์ˆ˜ํ•˜๋Š” ์ˆ˜์ˆ ์  ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ๊ตฌ์กฐ์  ์„ค๊ณ„๊ฐ€ ํ›…(Hook)๋ณด๋‹ค ๊ฐ•๋ ฅํ•˜๋‹ค.โ€
โ†’ ์„ฑ๋Šฅ ์ตœ์ ํ™” ํ›…(useMemo, useCallback)์€ ๋งŒ๋Šฅ ์•ฝ์ด ์•„๋‹ˆ๋ฉฐ, ๊ทธ ์ž์ฒด๋กœ ๋น„์šฉ์ž…๋‹ˆ๋‹ค. ํ›…์„ ํˆฌ์ž…ํ•˜๊ธฐ ์ „, ์ƒํƒœ ๋ฐ€์–ด๋‚ด๊ธฐ(State Push-down)์™€ ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ(Composition)์„ ํ†ตํ•ด '๋ Œ๋”๋ง ํญ๋ฐœ ๋ฐ˜๊ฒฝ(Render Blast Radius)'์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์•„ํ‚คํ…์ฒ˜ ์ฒด์งˆ ๊ฐœ์„ ์„ ํ†ตํ•ด ํ›… ์—†์ด๋„ ๋ฐœ์ƒํ•˜๋Š” '์ž๋™ ๋ฒ ์ผ์•„์›ƒ(Bail-out)'์˜ ํž˜์„ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜, ์ค‘๋‹จ ๊ฐ€๋Šฅํ•œ ๋ Œ๋”๋ง.โ€
โ†’ ๋ฆฌ์•กํŠธ 18์˜ ๋™์‹œ์„ฑ ๋ชจ๋ธ(Concurrency)์€ ํ˜„๋Œ€ ์›น์˜ ๊ฒŒ์ž„ ์ฒด์ธ์ €์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž‘์—…์„ '๊ธ‰ํ•œ ์ผ'๋กœ ์ทจ๊ธ‰ํ•˜๋˜ ๊ณผ๊ฑฐ์—์„œ ๋ฒ—์–ด๋‚˜, ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋ฐ€์–ด๋‚ด๊ณ  ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ตœ์šฐ์„ ์œผ๋กœ ์‘๋Œ€ํ•˜๋Š” '์šฐ์„ ์ˆœ์œ„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜'์„ ํ†ตํ•ด ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋„ ์–ผ์–ด๋ถ™์ง€ ์•Š๋Š” ํ•˜์ด์—”๋“œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œ0.1%์˜ ์‹œ๊ฐ์  ๊ฒฐํ•จ์ด ๋ธŒ๋žœ๋“œ์˜ ๊ธ‰์„ ๊ฒฐ์ •ํ•œ๋‹ค.โ€
โ†’ ๋กœ์ง์€ ๋งž์ง€๋งŒ ํ™”๋ฉด์ด ๋ฏธ์„ธํ•˜๊ฒŒ ํŠ€๋Š” '๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ(Jank)'๋Š” ์ „๋ฌธ์„ฑ์„ ํ•ด์นฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฒซ ํ”ฝ์…€์„ ์ฐ๊ธฐ ์ „ ์ฐฐ๋‚˜์˜ ์‹œ๊ฐ„์„ ์ง€๋ฐฐํ•˜๋Š” useLayoutEffect์™€ ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ์˜ ์ •์ฒด์„ฑ์„ ํ†ตํ•ฉํ•˜๋Š” useId ์ „๋žต์„ ํ†ตํ•ด, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹จ 1ํ”„๋ ˆ์ž„์˜ ์˜ค์ฐจ๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์™„๋ฒฝํ•œ ์‹œ๊ฐ์  ์—ฐ์†์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ โ€œURL์€ ๊ฐ€์žฅ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ „์—ญ ์ƒํƒœ๋‹ค.โ€
โ†’ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌ ์† ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ, ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ๋ฐ•์ œ๋œ 'URL ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜'๋ฅผ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค. React Router v7์˜ ๋ฐ์ดํ„ฐ ๋กœ๋”๋ฅผ ํ™œ์šฉํ•ด ๋ Œ๋”๋ง ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์ (Pre-fetching)ํ•˜๊ณ , ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋กœ ์žฅ์• ๋ฅผ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์–ด๋–ค ๊ฒฝ๋กœ์—์„œ๋„ ๋Š๊น€ ์—†์ด ์ด์–ด์ง€๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋‚ด๋น„๊ฒŒ์ด์…˜์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.


โœจ ์ด ๊ฐ•์˜์˜ ํŠน์ง•

  1. โ€˜๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธโ€™์„ ์™„๋ฒฝํžˆ ํ†ต์ œํ•˜๋Š” ํ•˜์ด์—”๋“œ ํด๋ž˜์Šค
    โ†’ ๋ธŒ๋ผ์šฐ์ € ํŽ˜์ธํŒ… ์ „ ๋‹จ๊ณ„๋ฅผ ์žฅ์•…ํ•˜๋Š” useLayoutEffect๋กœ ์‹œ๊ฐ์  ๊ฒฐํ•จ์„ 0ms๋กœ ์ค„์ž…๋‹ˆ๋‹ค.

  2. ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ โ€˜๋‘๋‡Œ(Reducer)โ€™๋กœ ๋ถ„๋ฆฌ
    โ†’ UI์™€ ๋กœ์ง์„ ์™„๋ฒฝํžˆ ์บก์Аํ™”ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

  3. ์ฐธ์กฐ ๋™์ผ์„ฑ(Referential Equality)์˜ ๋ณธ์งˆ ์ •๋ณต
    โ†’ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์ณ useCallback๊ณผ memo์˜ ์‹œ๋„ˆ์ง€๋ฅผ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

  4. ๋‹ค์ค‘ ์ „์—ญ ์ƒํƒœ ์—”์ง„ ๊ตฌ์ถ• ์ „๋žต
    โ†’ ์ธ์ฆ, ํ…Œ๋งˆ, ์—…๋ฌด ๊ด€๋ฆฌ ๋“ฑ ์—ฌ๋Ÿฌ ์—”์ง„์ด ์กฐํ™”๋กญ๊ฒŒ ๊ณต์กดํ•˜๋Š” ๋ฉ€ํ‹ฐ ์—”์ง„ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

  5. ๋ฆฌ์•กํŠธ 18 ๋™์‹œ์„ฑ ๋ชจ๋ธ ์‹ค์ „ ์ ์šฉ
    โ†’ useTransition๊ณผ useDeferredValue๋กœ ๋ฐ์ดํ„ฐ ํญ์ฃผ ์†์—์„œ๋„ ๋ฐ˜์‘์„ฑ์„ ์‚ฌ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

  6. React Router v7 ๊ธฐ๋ฐ˜์˜ ํ˜„๋Œ€์  ๋‚ด๋น„๊ฒŒ์ด์…˜
    โ†’ ๋ฐ์ดํ„ฐ ๋กœ๋”(Loader)๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์ ํ•˜๋Š” ํ”„๋ฆฌํŽ˜์นญ ๊ธฐ์ˆ ์„ ๋งˆ์Šคํ„ฐํ•ฉ๋‹ˆ๋‹ค.

  7. 37๊ฐœ์˜ ๊ณ ๋‚œ๋„ ์‹ค๋ฌด ๋ฏธ์…˜ ์—ฐ๊ณ„
    โ†’ ์ฃผ์‹ ๋ถ„์„๊ธฐ, 1๋งŒ ๋ช… ํ•„ํ„ฐ๋ง, ๋ณด์•ˆ ๊ฒฐ์ œ์ฐฝ ๋“ฑ ์‹ค์ œ ํ˜„์žฅ์˜ ๋‚œ์ œ๋ฅผ ์ฝ”๋“œ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  8. ์‹œ๋‹ˆ์–ด์˜ ๊ณจ๋“  ๋ฃฐ๊ณผ ์„ค๊ณ„ ์ฒ ํ•™ ์ „์ˆ˜
    โ†’ ๋‹จ์ˆœ ์ฝ”๋”ฉ์„ ๋„˜์–ด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋Š” ์•„ํ‚คํ…ํŠธ์˜ ์‹œ์•ผ๋ฅผ ๊ฐ–์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


1๏ธโƒฃ ๊ตฌ์กฐ์  ์ƒํƒœ ๊ด€๋ฆฌ ๋งˆ์Šคํ„ฐ: useReducer๋กœ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ด ๋‹ด๊ธด ์šด์˜ ๋งค๋‰ด์–ผ์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ์ „์—ญ ์ƒํƒœ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜: Context API๋ฅผ '์ „์‚ฌ ์ธํŠธ๋ผ๋„ท'์œผ๋กœ ํ™œ์šฉํ•ด Props Drilling์„ ์˜์›ํžˆ ์ข…๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ์‹ค์ „ ์ธ์ฆ ๋ฐ ๋ณด์•ˆ ์‹œ์Šคํ…œ: LOGIN_START๋ถ€ํ„ฐ SUCCESS๊นŒ์ง€ ์ด์–ด์ง€๋Š” ์ •๊ตํ•œ ์ธ์ฆ ํšŒ๋กœ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

5๏ธโƒฃ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ๋ฒ ์ผ์•„์›ƒ: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฃผ์†Œ๊ฐ’์„ ๊ณ ์ •ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์œ ๋ น ๋ Œ๋”๋ง์„ ์›์ฒœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ ๋ Œ๋”๋ง ๋น„์šฉ๊ณผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜: O(2^n) ์—ฐ์‚ฐ์„ O(n)์œผ๋กœ ์ค„์ด๋Š” ๋น„๋ฐ€ ์žฅ๋ถ€ ๊ธฐ์ˆ ๋กœ CPU ๋ถ€ํ•˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

6๏ธโƒฃ ๋ฌผ๋ฆฌ์  DOM ๋ฐ ์บก์Аํ™”: forwardRef์™€ useImperativeHandle๋กœ ์ž์‹์˜ ์ž์กด์‹ฌ์„ ์ง€ํ‚ค๋Š” ์ œ์–ด๊ถŒ์„ ํ–‰์‚ฌํ•ฉ๋‹ˆ๋‹ค.

7๏ธโƒฃ ๋น„์ฃผ์–ผ ์ตœ์ ํ™”์˜ ์ •์ : useLayoutEffect๋กœ ํŒ์—… ์œ„์น˜ ๋ณด์ • ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์ž‘์ ์„ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.

8๏ธโƒฃ SSR๊ณผ ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์ „๋žต: ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์ •์ฒด์„ฑ์„ ํ†ตํ•ฉํ•˜๋Š” useId ๊ณ ์œ  ์‹๋ณ„์ž ์ „๋žต์„ ์ˆ˜๋ฆฝํ•ฉ๋‹ˆ๋‹ค.

9๏ธโƒฃ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง(Concurrency): ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ ์ค‘์—๋„ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ตœ์šฐ์„ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉˆ์ถ”์ง€ ์•Š๋Š” UI๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.


๐Ÿ”Ÿ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋‚ด๋น„๊ฒŒ์ด์…˜: React Router v7 ๋ฐ์ดํ„ฐ ๋กœ๋”์™€ ๋ณด์•ˆ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋กœ ์ดˆ๊ณ ์† ์•„ํ‚คํ…์ฒ˜๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค

๋‹จ์ˆœ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋„˜์–ด "์™œ ๋‚ด ์•ฑ์ด ๋А๋ฆฐ์ง€" ๊ณตํ•™์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

React 18 ๋™์‹œ์„ฑ ๋ชจ๋ธ๊ณผ Router v7์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์‹ค๋ฌด์— ์ฆ‰์‹œ ์ ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ถ„


0.1์ดˆ์˜ ์‹œ๊ฐ์  ๊ฒฐํ•จ๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ํ•˜์ด์—”๋“œ UI๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๋ถ„

Props Drilling์— ๊ณ ํ†ต๋ฐ›์œผ๋ฉฐ ์ „์—ญ ์ƒํƒœ์˜ ์˜ฌ๋ฐ”๋ฅธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ณ ๋ฏผํ•˜๋Š” ๋ถ„

๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ(Render-Commit-Paint)์„ ์žฅ์•…ํ•˜๊ณ  ์‹ถ์€ ๋ถ„


์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋…๋ฆฝ์„ฑ์„ ์ง€ํ‚ค๋ฉด์„œ๋„ ํ•„์š”ํ•œ ์ œ์–ด๊ถŒ์„ ์šฐ์•„ํ•˜๊ฒŒ ์ฃผ๊ณ ๋ฐ›๊ณ  ์‹ถ์€ ๋ถ„

useMemo, useCallback์„ ์“ฐ๋Š”๋ฐ ์™œ ์—ฌ์ „ํžˆ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์˜๋ฌธ์ธ ๋ถ„


๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๋ฌด๋„ˆ์ง€์ง€ ์•Š๋Š” 'ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํด๋” ๊ตฌ์กฐ'๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„


"๋‹จ์ˆœ ์ฝ”๋”"์—์„œ "๋ฆฌ์•กํŠธ ์•„ํ‚คํ…ํŠธ"๋กœ ํ•œ ๋‹จ๊ณ„ ๋„์•ฝํ•˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

๐Ÿ‘ฅ ์ด๋Ÿฐ ๋ถ„๋“ค์—๊ฒŒ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค

  • ํ™”๋ฉด์ด ์™œ ๋ฒ„๋ฒ…์ด๋Š”์ง€ ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๋ฐ์ดํ„ฐ๋กœ ์ฆ‰์‹œ ์ง€๋ชฉํ•˜๊ณ  ์ˆ˜์ˆ ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ฆฌ๋“€์„œ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ๊ฒฝ๋Ÿ‰ํ™”ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ์ž์œ ์ž์žฌ๋กœ ํ†ต์ œํ•˜์—ฌ ๋ฆฌ๋ Œ๋”๋ง ํญ์ฃผ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • 1๋งŒ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ์ค‘์—๋„ ์‚ฌ์šฉ์ž์˜ ํƒ€์ดํ•‘์ด ๋Š๊ธฐ์ง€ ์•Š๋Š” ๋™์‹œ์„ฑ UI๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ํŒ์—…์ด๋‚˜ ํˆดํŒ์ด ์—‰๋šฑํ•œ ๊ณณ์— ์ƒ๊ฒผ๋‹ค ์ ํ”„ํ•˜๋Š” '์‹œ๊ฐ์  ๊ฒฐํ•จ'์„ 0ms๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ์ธ์ฆ, ํ…Œ๋งˆ, ๋ฐ์ดํ„ฐ ์—”์ง„์ด ๊ณ„์ธต์ ์œผ๋กœ ๊ณต์กดํ•˜๋Š” ๋ฉ€ํ‹ฐ ์—”์ง„ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฆฌ์•กํŠธ์˜ ์›์น™์— ๋งž๊ฒŒ ์šฐ์•„ํ•œ ๋ช…๋ นํ˜• API๋กœ ํฌ์žฅํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ๋‹จ์ˆœ ์ฝ”๋”ฉ์ด ์•„๋‹Œ, ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์•„ํ‚คํ…ํŠธ๊ฐ€ ๋˜๊ณ  ์‹ถ์€ ๋ถ„

  • React Router v7์˜ ๋ฐ์ดํ„ฐ ๋กœ๋”๋ฅผ ํ™œ์šฉํ•ด '๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ ์—†๋Š”' ์ดˆ๊ณ ์† ์ „ํ™˜์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์ด ๊นจ์ ธ ๋ฐœ์ƒํ•˜๋Š” '์œ ๋ น ๋ Œ๋”๋ง'์˜ ๊ทผ๋ณธ ์›์ธ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ๊ด€์ ์—์„œ ํŒŒํ—ค์น  ๋ถ„

  • ์„ฑ๋Šฅ ์ตœ์ ํ™” ํ›…(useMemo, useCallback)์„ ์–ธ์ œ ์“ฐ๊ณ  ์–ธ์ œ ๋ฉˆ์ถฐ์•ผ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•œ ๊ธฐ์ค€์„ ์„ธ์šฐ๊ณ  ์‹ถ์€ ๋ถ„

  • SSR ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ์˜ค๋ฅ˜๋ฅผ useId ์ „๋žต์œผ๋กœ ์™„๋ฒฝํžˆ ๋ฐฉ์–ดํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • '์˜ค๋ž˜๋œ ํด๋กœ์ €(Stale Closure)'๋กœ ์ธํ•œ ๋‚œํ•ดํ•œ ๋ฒ„๊ทธ๋ฅผ ์›๋ฆฌ์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ  ๊ฒ€๊ฑฐํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ํ›…์„ ์“ฐ๊ธฐ ์ „, ๊ตฌ์กฐ์  ์ตœ์ ํ™”(์ƒํƒœ ๋ฐ€์–ด๋‚ด๊ธฐ, ํ•ฉ์„ฑ)๋กœ ์•ฑ์˜ ์ฒด์งˆ์„ ๋จผ์ € ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ธฐ์ค€์„ ๋ฐฐ์šฐ๊ณ , ํŒ€์›๋“ค์—๊ฒŒ ๊ณตํ•™์  ๊ทผ๊ฑฐ๋กœ ์ตœ์ ํ™”๋ฅผ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์€ ๋ถ„


๐ŸŽ“ ์ˆ˜๊ฐ• ํ›„์—๋Š”

  • "ํ™”๋ฉด์ด ์™œ ๋ฒ„๋ฒ…์ด๋Š”์ง€" ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒํƒœ ์ „์ด ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ๋ณต์žกํ•œ ๋กœ์ง์—์„œ๋„ ๋ฐ์ดํ„ฐ ์‹ฑํฌ๊ฐ€ ๊นจ์ง€์ง€ ์•Š๋Š” ์•ฑ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • ์ฐธ์กฐ ๋™์ผ์„ฑ์˜ ์›๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๋Œ€๊ทœ๋ชจ ๋ฆฌ์ŠคํŠธ์—์„œ๋„ ํ•„์š”ํ•œ ์ตœ์†Œ ๋‹จ์œ„๋งŒ ๋ Œ๋”๋ง์‹œํ‚ต๋‹ˆ๋‹ค.

  • useTransition์„ ํ™œ์šฉํ•ด ๋ฌด๊ฑฐ์šด ์ž‘์—… ์ค‘์—๋„ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ 0.1์ดˆ ์•ˆ์— ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • React Router v7์˜ Loader๋ฅผ ํ™œ์šฉํ•ด ํŽ˜์ด์ง€ ์ง„์ž… ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•๋ณดํ•˜๋Š” ํ•˜์ด์—”๋“œ UX๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ๋กœ ํŠน์ • ์žฅ์• ๊ฐ€ ์•ฑ ์ „์ฒด๋กœ ๋ฒˆ์ง€๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒฉ๋ฆฌ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

  • useLayoutEffect๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ € ํŽ˜์ธํŒ… ์ „ ๋ ˆ์ด์•„์›ƒ์„ ๋ณด์ •ํ•˜์—ฌ ์‹œ๊ฐ์  ๋ฌด๊ฒฐ์„ฑ์„ ์‚ฌ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

  • useImperativeHandle๋กœ ์ž์‹์˜ ๋‚ด๋ถ€ DOM์„ ๋ณดํ˜ธํ•˜๋ฉด์„œ ์ •๊ตํ•œ ์ œ์–ด๊ถŒ๋งŒ ๋ถ€๋ชจ์—๊ฒŒ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

  • useDeferredValue๋ฅผ ์ ์šฉํ•ด ์Ÿ์•„์ง€๋Š” ๋ฐ์ดํ„ฐ ํญ์ฃผ ์†์—์„œ๋„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ๋ฐ˜์‘์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ ๊ธฐ๋ฒ•์„ ๋งˆ์Šคํ„ฐํ•˜์—ฌ ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ๋น„์šฐ๋ฉด์„œ๋„ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • ๋„๋ฉ”์ธ๋ณ„ ์—”์ง„ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์ˆ˜๋งŒ ์ค„์˜ ์ฝ”๋“œ ์†์—์„œ๋„ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค.

  • useId ์ ‘๋ฏธ์‚ฌ ์ „๋žต์œผ๋กœ ๋Œ€๊ทœ๋ชจ ํผ(Form) ์‹œ์Šคํ…œ์˜ ์›น ์ ‘๊ทผ์„ฑ๊ณผ ์‹๋ณ„์ž ๊ณ ์œ ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋ Œ๋”๋ง ํญ๋ฐœ ๋ฐ˜๊ฒฝ(Render Blast Radius)์„ ๊ณ„์‚ฐํ•˜์—ฌ ํ›… ์—†์ด๋„ ์„ฑ๋Šฅ์„ ์ง€ํ‚ค๋Š” ์„ค๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณ ๋‚œ๋„ 12๊ฐ€์ง€ ํ›…์„ ์ ์žฌ์ ์†Œ์— ์กฐํ•ฉํ•˜์—ฌ ์–ด๋–ค ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ๋„ ๋ฆฌ์•กํŠธ๋‹ต๊ฒŒ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • "๋‹จ์ˆœ ์ฝ”๋”"์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด, ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๋ขฐ์˜ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” "๋ฆฌ์•กํŠธ ์—”์ง€๋‹ˆ์–ด"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ React Part 2 โ€“ 37๊ฐœ ํ•ต์‹ฌ ๋ฏธ์…˜ ์ •๋ฆฌํ‘œ


๐ŸŸฉ ๊ธ‰์‹์‹ค ์žฌ๊ณ  ๊ด€๋ฆฌ ์‹œ์Šคํ…œ โ€” useReducer ๊ธฐ์ดˆ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™(์žฌ๊ณ  0 ๋ฏธ๋งŒ ๋ฐฉ์ง€)์ด ๋‹ด๊ธด ์šด์˜ ๋งค๋‰ด์–ผ์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. UI์™€ ๋กœ์ง์„ ์™„๋ฒฝํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒํƒœ ์ „์ด์˜ ์ธ๊ณผ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

๐ŸŸฅ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ์—”์ง„ ๊ตฌ์ถ• โ€” FETCH Action Flow ์ธ์ฆ ์‹œ์Šคํ…œ์˜ ํ๋ฆ„(START-SUCCESS-FAILURE)์„ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ์— ์ด์‹ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ ์‹ฑํฌ๋ฅผ ๋งž์ถ”๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ๋ฐ์ดํ„ฐ ํ†ต์ œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๐ŸŸง ๋ฆฌ๋ Œ๋”๋ง ์ง€์˜ฅ ํƒˆ์ถœ โ€” State/Dispatch ์ฑ„๋„ ๋ถ„๋ฆฌ 10,000๊ฐœ์˜ ์ƒํ’ˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ํŠน์ • ๋ฒ„ํŠผ๋งŒ ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณ ๋‚œ๋„ ์ตœ์ ํ™”์ž…๋‹ˆ๋‹ค. Context๋ฅผ ์ด์ค‘์œผ๋กœ ์„ค๊ณ„ํ•˜์—ฌ ๋ช…๋ น ์ฑ„๋„๊ณผ ๋ฐ์ดํ„ฐ ์ฑ„๋„์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋…๋ฆฝ์‹œํ‚ต๋‹ˆ๋‹ค.

๐ŸŸช ์ƒ๋‹ด ์ฑ„ํŒ…๋ฃธ "๋ƒ‰๋™ ๋ฐ์ดํ„ฐ" ๊ฒ€๊ฑฐ โ€” ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ํ•จ์ • ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋ฐ•์ œํ•œ ํ•จ์ˆ˜๊ฐ€ ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์— ๊ฐ‡ํžˆ๋Š” โ€˜Stale Closureโ€™ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ ํ™”์™€ ๋ฐ์ดํ„ฐ ์ตœ์‹ ์„ฑ ์‚ฌ์ด์˜ ์ •๊ตํ•œ ๊ท ํ˜•์„ ์žก๋Š” ์„ค๊ณ„ ๊ทผ์œก์„ ํ‚ค์›๋‹ˆ๋‹ค.


๐ŸŸฆ ๋งค์ง ์„œ์น˜ ์‹œ์Šคํ…œ โ€” ๋ฌผ๋ฆฌ์  ํฌ์ปค์Šค & useRef ํ†ต์ œ ๋ฆฌ์•กํŠธ์˜ ์„ ์–ธ์  ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ์‹ค์ œ HTML ๋…ธ๋“œ์— ํฌ์ปค์Šค๋ฅผ ์ฃผ๊ณ  ๋ฐฐ๊ฒฝ์ƒ‰์„ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ Œ๋”๋ง์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๋Š” '๋น„๋ฐ€ ์ˆ˜์ฒฉ'์œผ๋กœ ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์กฐ์šฉํžˆ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸฉ ํ™˜์œจ ํƒ€์ž„๋จธ์‹  โ€” ๋ฆฌ์•กํŠธ๊ฐ€ ์žŠ์–ด๋ฒ„๋ฆฐ ๊ณผ๊ฑฐ ์ถ”์  ์ง์ „ ํ™˜์œจ๊ณผ ํ˜„์žฌ ํ™˜์œจ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋น„๊ตํ•˜์—ฌ โ–ฒ/โ–ผ ์‹ ํ˜ธ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋ผ์ง„ ๊ณผ๊ฑฐ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด Ref๋ฅผ ํƒ€์ž„๋จธ์‹  ๊ธฐ๋ก ์žฅ์น˜๋กœ ํ™œ์šฉํ•˜๋Š” ์ •์„์„ ๋ฐฐ์›๋‹ˆ๋‹ค.


๐ŸŸช ํ”„๋ฆฌ๋ฏธ์—„ ๋น„๋””์˜ค ํ”Œ๋ ˆ์ด์–ด โ€” ๊ณ ์„ฑ๋Šฅ ํŠธ๋ž˜ํ‚น & ์˜์—ญ ๋ฐ– ํด๋ฆญ 0.1์ดˆ ๋‹จ์œ„์˜ ์žฌ์ƒ ์‹œ๊ฐ„ ๊ธฐ๋ก์„ ๋ Œ๋”๋ง ๋ถ€ํ•˜ ์—†์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. contains() API์™€ Ref๋ฅผ ๊ฒฐํ•ฉํ•ด ๋ชจ๋‹ฌ/๋“œ๋กญ๋‹ค์šด ๋ฐ– ํด๋ฆญ ์‹œ ์ž๋™์œผ๋กœ ๋‹ซํžˆ๋Š” UX๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸง 1๋งŒ ๋ช… ์‚ฌ์› ๋ช…๋ถ€ "์ œ๋กœ ๋ ‰" ํ•„ํ„ฐ๋ง โ€” useMemo ์‹ค์ „ ๋‹จ์ˆœํžˆ ํ…Œ๋งˆ๋งŒ ๋ฐ”๊ฟจ๋Š”๋ฐ 1๋งŒ ๋ช…์„ ๋‹ค์‹œ ํ›‘๋Š” ๋น„ํšจ์œจ์„ useMemo ๋ฌดํ’์ง€๋Œ€๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” '์ˆœ์ˆ˜ ์žฌ๋ฃŒ'๋งŒ ๊ณจ๋ผ๋‚ด๋Š” ์„ค๊ณ„ ๋Šฅ๋ ฅ์„ ๊ธฐ๋ฆ…๋‹ˆ๋‹ค.


๐ŸŸซ ์œ ๋ น ๋ Œ๋”๋ง ์™„์ „ ์†Œํƒ• โ€” useCallback & memo ํ˜‘๋ ฅ ๋ถ€๋ชจ(์‹œ๊ณ„)๊ฐ€ ๋ณ€ํ•  ๋•Œ ์•„๋ฌด ์ฃ„ ์—†๋Š” ์ž์‹(์‚ฌ์› ์นด๋“œ)์ด ๋‹ค์‹œ ๊ทธ๋ ค์ง€๋Š” ํญ์ฃผ๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค. ์—ด์‡ (์ฃผ์†Œ ๊ณ ์ •)์™€ ์ž๋ฌผ์‡ (์ฃผ์†Œ ๊ฒ€์‚ฌ)๊ฐ€ ๋งž๋ฌผ๋ฆฌ๋Š” ์ตœ์ ํ™” ์‚ผ๊ฐ ํŽธ๋Œ€๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸฅ ๋ณด์•ˆ ๊ฒฐ์ œ์ฐฝ "๋น„๋ฐ€ ํ†ต๋กœ" ์„ค๊ณ„ โ€” useImperativeHandle ๋ถ€๋ชจ์—๊ฒŒ ์ž์‹์˜ ๋ชจ๋“  ์†์‚ด์„ ๋…ธ์ถœํ•˜๋Š” ๋Œ€์‹ , ํ—ˆ๋ฝ๋œ '์ดˆ๊ธฐํ™”' ๋ฒ„ํŠผ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์บก์Аํ™”(Encapsulation)๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋…๋ฆฝ์„ฑ์„ ์ง€ํ‚ค๋Š” ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์„ ์ตํž™๋‹ˆ๋‹ค.


๐ŸŸง ํ•˜์ด์—”๋“œ ํˆดํŒ ์‹œ์Šคํ…œ โ€” useLayoutEffect ์‹œ๊ฐ์  ๊ฒฐํ•จ ์ฐจ๋‹จ ํˆดํŒ์ด ์—‰๋šฑํ•œ ๊ณณ์— ์ƒ๊ฒผ๋‹ค ์ œ์ž๋ฆฌ๋กœ ์ด๋™ํ•˜๋Š” '์ˆœ๊ฐ„์ด๋™ ํ˜„์ƒ'์„ 0ms๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ํŽ˜์ธํŒ… ์ „ ๋‹จ๊ณ„๋ฅผ ์žฅ์•…ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆˆ์น˜์ฑ„๊ธฐ ์ „ ๋ฐฐ์น˜๋ฅผ ๋๋‚ด๋Š” ๋น„๊ธฐ๋ฅผ ๋ฐฐ์›๋‹ˆ๋‹ค.


๐ŸŸช ์ ‘๊ทผ์„ฑ ์ค€์ˆ˜ ์•„์ฝ”๋””์–ธ โ€” useId ์ƒํ˜ธ ์ฐธ์กฐ ์ „๋žต aria-controls์™€ aria-labelledby๋ฅผ 1:1๋กœ ๋ฌถ์–ด ์‹œ๊ฐ ์žฅ์• ์ธ๋„ ํŽธ๋ฆฌํ•œ UI๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ ‘๋ฏธ์‚ฌ(Suffix) ์ „๋žต์„ ํ™œ์šฉํ•ด ์ˆ˜๋งŒ ๊ฐœ์˜ ID ์ถฉ๋Œ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸฆ ์…ฐํ”„์˜ ๋ฌผ ํ•œ ์ž” โ€” useTransition ๋™์‹œ์„ฑ ์ œ์–ด ๋ฌด๊ฑฐ์šด ์š”๋ฆฌ(์—ฐ์‚ฐ) ์ค‘์—๋„ ์†๋‹˜์˜ ๋ฌผ ์š”์ฒญ(์ž…๋ ฅ)์— ์ฆ‰์‹œ ์‘๋‹ตํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. startTransition์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ•๋“ฑ์‹œ์ผœ ๋ธŒ๋ผ์šฐ์ € ๋ธ”๋กœํ‚น ํ˜„์ƒ์„ ํƒˆ์ถœํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸฉ ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ์„œ์ŠคํŽœ์…˜ โ€” useDeferredValue ์™„๊ธ‰ ์กฐ์ ˆ ์ž…๋ ฅ ์†๋„๋ฅผ ๋”ฐ๋ผ๊ฐ€์ง€ ๋ชปํ•˜๋Š” ๋ฌด๊ฑฐ์šด ๋ฆฌ์ŠคํŠธ์— '์™„์ถฉ ์žฅ์น˜'๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํƒ€์ดํ•‘์„ ๋ฉˆ์ถ”๋Š” ์ฐฐ๋‚˜์˜ ์ˆœ๊ฐ„์— ๊ฒฐ๊ณผ๋ฌผ์„ ๋ชฐ์•„์„œ ๊ฐฑ์‹ ํ•˜๋Š” ์ง€๋Šฅํ˜• ํ๋ฆ„์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸฆ ๋ฒจ๋ณด์ด(Loader) ์‚ฌ์ „ ์ฃผ๋ฌธ โ€” Router v7 ๋ฐ์ดํ„ฐ ๋กœ๋” ์‹๋‹น์— ๋„์ฐฉํ•ด์„œ ์ฃผ๋ฌธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ถœ๋ฐœํ•  ๋•Œ ์ด๋ฏธ ์Œ์‹์„ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. createBrowserRouter๋กœ ์—”์ง„์„ ๊ต์ฒดํ•˜๊ณ , ์ด๋™ ์ฆ‰์‹œ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๋Š” ์ „์œจ์„ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŸฉ ๋นŒ๋”ฉ ๋ฐฉํ™”์…”ํ„ฐ ์„ค๊ณ„ โ€” Error Boundary & Redirect ํŠน์ • ํŽ˜์ด์ง€์˜ ์žฅ์• ๊ฐ€ ์•ฑ ์ „์ฒด์˜ ํฌ๋ž˜์‹œ๋กœ ๋ฒˆ์ง€์ง€ ์•Š๊ฒŒ ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ์ธ์ฆ ์‚ฌ์šฉ์ž๋ฅผ ๋ Œ๋”๋ง ์ „ ๋‹จ๊ณ„์—์„œ ํŠ•๊ฒจ๋‚ด๋Š” ๋ฐฉ์–ด์  ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ป ์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

์‹ค์Šต ํ™˜๊ฒฝ

  • ๐Ÿ’ป Node.js (v18 ์ด์ƒ) ๋ฐ React 18+ ๋™์‹œ์„ฑ ๋ชจ๋ธ ํ™˜๊ฒฝ ํ•„์ˆ˜

  • ๐ŸŒ React DevTools (Profiler) ๋ฐ ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ ์ธก์ • ๋„๊ตฌ ํ™œ์šฉ

  • ๐Ÿชถ React ๊ธฐ์ดˆ ๋ฌธ๋ฒ•(Part 1 ์ˆ˜์ค€) ๋ฐ JS ES6+

  • ๐Ÿงฉ ๋ชจ๋“  ์„น์…˜์€ โ€œ๊ฐœ๋… โ†’ ์—”์ง„ ๋ถ„์„ โ†’ ์ตœ์ ํ™” ์‹ค์Šต โ†’ ํ•˜์ด์—”๋“œ ๋ฏธ์…˜โ€ ์ˆœ์„œ

  • ๐Ÿ“˜ 61๊ฐ• ์ „์ฒด PDF ํ•™์Šต ๊ฐ€์ด๋“œ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋„์‹ํ™” ์ž๋ฃŒ ์ œ๊ณต

  • ๐Ÿง  ์ด๋ก ๋ณด๋‹ค โ€œ๋ธŒ๋ผ์šฐ์ € ํŒŒ์ดํ”„๋ผ์ธ์— ๊ฐœ์ž…ํ•˜๋Š” ๊ณผ์ •โ€์— ์ง‘์ค‘

  • ๐Ÿงฐ Vite / React Router v7 / React DevTools ๊ธฐ์ค€ ์˜ˆ์ œ ํฌํ•จ

  • โšก React์˜ โ€œ๋ณด๋‹› ์† ์—”์ง„โ€์„ ์ง์ ‘ ์กฐ์ข…ํ•˜๋Š” ์›๋ฆฌ ์ค‘์‹ฌ ์„ค๋ช…


ํ•™์Šต ์ž๋ฃŒ

  • ๐Ÿงพ ๊ณ ๊ธ‰ ์•„ํ‚คํ…์ฒ˜ PDF ๊ต์žฌ

    • ์„น์…˜๋ณ„ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ณจ๋“  ๋ฃฐ ์š”์•ฝ

    • ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ, ๋ Œ๋”๋ง ํญ๋ฐœ ๋ฐ˜๊ฒฝ ๋“ฑ ์‹œ๊ฐ์  ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ

    • Profiler ๋ถˆ๊ฝƒ ์ฐจํŠธ ํ•ด์„ ๊ฐ€์ด๋“œ ๋ฐ ๋ณ‘๋ชฉ ์ง€์  ๊ฒ€๊ฑฐ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

    • ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ "์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ธฐ์ค€" ๋ฐ ๋ณด์•ˆ ์„ค๊ณ„ ๊ฐ€์ด๋“œ ์ˆ˜๋ก

  • ๐Ÿ’ป ์ „์„ค์˜ ๋งˆ์Šคํ„ฐ ์ฝ”๋“œ (ZIP)

    • Section 1~61 ์ „์ฒด ์˜ˆ์ œ + 37๊ฐœ ๊ณ ๋‚œ๋„ ๋ฏธ์…˜ ์ •๋‹ต ์ฝ”๋“œ

    • State/Dispatch ๋ถ„๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ๋กœ๋” ํŒจํ„ด์ด ์ ์šฉ๋œ ์™„์„ฑํ˜• ์†Œ์Šค


์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ๋ฆฌ์•กํŠธ์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ๋‹ค ์ตํ˜”์ง€๋งŒ, ์‹ค์ „์—์„œ ์ˆ˜์ฒœ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์†์ˆ˜๋ฌด์ฑ…์œผ๋กœ ๋А๋ ค์ง€๋Š” ์•ฑ ๋•Œ๋ฌธ์— ์ž๊ดด๊ฐ์„ ๋А๋ผ๋Š” ๊ฐœ๋ฐœ์ž

  • ๋กœ์ง์€ ์™„๋ฒฝํ•œ๋ฐ ํ™”๋ฉด์ด ์ฐฐ๋‚˜์˜ ์ˆœ๊ฐ„๋งˆ๋‹ค ๋ฒˆ์ฉ๊ฑฐ๋ฆฌ๊ฑฐ๋‚˜ ์š”์†Œ๋“ค์ด ํŠ€์–ด ์˜ค๋ฅด๋Š” '์‹œ๊ฐ์  ๋ถˆ์พŒ๊ฐ'์„ ๋„์ €ํžˆ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋Š” ๋ถ„

  • useMemo์™€ useCallback์„ ์“ฐ๊ณ ๋Š” ์žˆ์ง€๋งŒ, ์ •๋ง ์„ฑ๋Šฅ์ด ์ข‹์•„์ง€๊ณ  ์žˆ๋Š” ๊ฑด์ง€ ์•„๋‹ˆ๋ฉด ์˜คํžˆ๋ ค ๋ฉ”๋ชจ๋ฆฌ๋งŒ ๋‚ญ๋น„ํ•˜๊ณ  ์žˆ๋Š” ๊ฑด์ง€ ํ™•์‹ ์ด ์—†๋Š” ๋ถ„

  • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR) ๋„์ž… ํ›„ ๋ˆ์งˆ๊ธฐ๊ฒŒ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋Š” 'Hydration Error'์™€ 'ID ๋ถˆ์ผ์น˜' ๋ฌธ์ œ์˜ ๋Šช์—์„œ ํ—ˆ์šฐ์ ๊ฑฐ๋ฆฌ๊ณ  ์žˆ๋Š” ๋ถ„

  • ๋ฆฌ์•กํŠธ 18, 19์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์“ฐ๊ณ  ์‹ถ์–ด๋„ ์‹ค๋ฌด ์‹œ๋‚˜๋ฆฌ์˜ค์— ์–ด๋–ป๊ฒŒ ์ ์šฉํ•ด์•ผ ํ• ์ง€ ๋ชฐ๋ผ ๊ณต์‹ ๋ฌธ์„œ๋งŒ ๋ฌดํ•œ ๋ฐ˜๋ณตํ•ด์„œ ์ฝ๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ์ž

  • 5๋งŒ ๊ฐœ ์ด์ƒ์˜ ํ–‰(Row)์„ ๊ฐ€์ง„ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๋“œ๋‚˜ ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๋ Œ๋”๋ง ์ตœ์ ํ™”์˜ ์ฒซ ๋‹จ์ถ”๋ฅผ ๋ชป ๋ผ์šฐ๊ณ  ์žˆ๋Š” ๋ถ„

  • useEffect๋งŒ์œผ๋กœ ๋ชจ๋“  ์ดํŽ™ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋‹ค๊ฐ€ ๋ฌดํ•œ ๋ฃจํ”„๋‚˜ ์—‰ํ‚จ ๋ ˆ์ด์•„์›ƒ ์ธก์ • ๊ฐ’ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค ์˜คํ”ˆ ์ง์ „์— ๋จธ๋ฆฌ๋ฅผ ์ฅ์–ด๋œฏ๊ณ  ์žˆ๋Š” ๋ถ„

  • 0.1์ดˆ์˜ ์ž…๋ ฅ ์ง€์—ฐ(Input Lag)์ด ์‚ฌ์šฉ์ž ์ดํƒˆ๋กœ ์ด์–ด์ง€๋Š” ๊ณ ๊ฐ๋„ ์ปค๋จธ์Šค๋‚˜ ์‹ค์‹œ๊ฐ„ ์ฐจํŠธ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋ฉฐ ํ”ผ๊ฐ€ ๋งˆ๋ฅด๋Š” ๊ฒฝํ—˜์„ ํ•˜๊ณ  ์žˆ๋Š” ๋ถ„

  • ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ์˜ ์ตœ์‹  ๋ฒ„์ „(v7)์„ ์‚ฌ์šฉํ•ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ํŠœํ† ๋ฆฌ์–ผ ์ˆ˜์ค€์˜ ์ž๋ฃŒ๋งŒ ๋„˜์ณ๋‚˜ ๋‹ต๋‹ตํ•จ์„ ๋А๋ผ๋Š” ๋ถ„

  • ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์•ฑ ์ „์ฒด๊ฐ€ ํ•˜์–—๊ฒŒ ์ฃฝ์–ด๋ฒ„๋ฆฌ๋Š” ํ˜„์ƒ์„ ๋ง‰๊ณ  ์‹ถ์–ด 'Error Boundary'๋ฅผ ๋„์ž…ํ•˜๋ ค ํ•˜๋‚˜, ๋ณต๊ตฌ ์ „๋žต์„ ์–ด๋–ป๊ฒŒ ์งค์ง€ ๋ง‰๋ง‰ํ•œ ๊ฐœ๋ฐœ์ž

  • ์Šค์Šค๋กœ '์ฃผ๋‹ˆ์–ด'๋ผ๋Š” ํƒ€์ดํ‹€์„ ๋–ผ๊ณ  ์‹ถ์ง€๋งŒ, ๊ธฐ์ˆ ์  ๊นŠ์ด(Deep Dive)๊ฐ€ ๋ถ€์กฑํ•ด ์‹œ๋‹ˆ์–ด์™€์˜ ๋Œ€ํ™”์—์„œ ๋Š˜ ์œ„์ถ•๋˜๋Š” ์„ฑ์žฅ์˜ ์ •์ฒด๊ธฐ๋ฅผ ๊ฒช๋Š” ๋ถ„

  • ์ตœ์ ํ™” ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์ฐพ์•„๋‚ด๊ณ  ์‹ถ์ง€๋งŒ, ์„ฑ๋Šฅ ์ธก์ • ๋„๊ตฌ์˜ ๋ณต์žกํ•œ ๊ทธ๋ž˜ํ”„์™€ ์ˆ˜์น˜๋“ค์„ ํ•ด์„ํ•˜๋Š” ๋Šฅ๋ ฅ์ด ๋ถ€์กฑํ•ด ํฌ๊ธฐํ–ˆ๋˜ ๋ถ„

  • ํŒ€ ๋‚ด์—์„œ ๋ฆฌ์•กํŠธ ๊ธฐ์ˆ  ํ‘œ์ค€๊ณผ ์ตœ์ ํ™” ๊ฐ€์ด๋“œ๋ฅผ ์ œ์‹œํ•ด์•ผ ํ•˜๋Š” ์œ„์น˜์— ์žˆ์ง€๋งŒ, ์Šค์Šค๋กœ ๋…ผ๋ฆฌ์  ๊ทผ๊ฑฐ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๋А๊ปด์ง€๋Š” ํ…Œํฌ ๋ฆฌ๋“œ

  • ๋ฉด์ ‘์ด๋‚˜ ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ "๋ฆฌ์•กํŠธ ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?"๋ผ๋Š” ์งˆ๋ฌธ์— useMemo ์™ธ์— ๋” ๊นŠ์ด ์žˆ๋Š” ๋Œ€๋‹ต์„ ๋ชป ํ•ด ์•„์‰ฌ์› ๋˜ ์ทจ์ค€์ƒ

  • ๋‹จ์ˆœํ•œ ๊ฒŒ์‹œํŒ ๊ตฌํ˜„์„ ๋„˜์–ด, ๊ธ€๋กœ๋ฒŒ ๋ฌผ๋ฅ˜ ๊ด€์ œ๋‚˜ ๊ธˆ์œต ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ๊ทนํ•œ์˜ ์„ฑ๋Šฅ์„ ์š”๊ตฌํ•˜๋Š” '์ง„์งœ ํ”„๋กœ์ ํŠธ'์— ๋„์ „ํ•ด๋ณด๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

  • "์ฝ”๋“œ๊ฐ€ ๋Œ์•„๊ฐ€๋ฉด ๋"์ด๋ผ๋Š” ๋งˆ์ธ๋“œ์—์„œ ๋ฒ—์–ด๋‚˜, 1ms์˜ ์‹คํ–‰ ์‹œ๊ฐ„๊ณผ ๋‹จ ํ•œ ๋ฒˆ์˜ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง๊นŒ์ง€ ํ†ต์ œํ•˜๊ณ  ์‹ถ์€ ์™„๋ฒฝ์ฃผ์˜์ž

  • ๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ์†์—์„œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ์–ด๋””์„œ ๊ผฌ์˜€๋Š”์ง€ ๋ชฐ๋ผ ๋ฐค์ƒ˜ ๋””๋ฒ„๊น…์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ์ดˆ๋ณด์ž

  • ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๋Šฅ์„ ํš๊ธฐ์ ์œผ๋กœ ๊ฐœ์„ ํ•ด์•ผ ํ•˜๋Š” ๋ฏธ์…˜์„ ๋ฐ›์•˜์ง€๋งŒ, ์–ด๋””์„œ๋ถ€ํ„ฐ ์†์„ ๋Œ€์•ผ ํ• ์ง€ ๊ฐ€์ด๋“œ๋ผ์ธ์ด ์ „ํ˜€ ์—†๋Š” ๋ฆฌํŒฉํ† ๋ง ๋‹ด๋‹น์ž

  • ๋ฆฌ์•กํŠธ์˜ ๋™์ž‘ ์›๋ฆฌ(Reconciliation, Fiber ๋“ฑ)๋Š” ์ด๋ก ์œผ๋กœ ์•Œ์ง€๋งŒ, ์ด๋ฅผ ์‹ค์ œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด ์„ฑ๊ณผ๋ฅผ ๋‚ธ ๊ฒฝํ—˜์ด ์—†๋Š” ์ด๋ก ํ˜• ๊ฐœ๋ฐœ์ž

  • ๋‚จ๋“ค์ด ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ธฐ๋งŒ ํ•˜๋Š” ์ˆ˜์ค€์„ ๋„˜์–ด, ์ง์ ‘ ํ•˜์ด์—”๋“œ ํ›…์„ ์„ค๊ณ„ํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” '๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘์ž'๊ธ‰ ์‹ค๋ ฅ์„ ์›ํ•˜๋Š” ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • ๋ฆฌ์•กํŠธ ๊ธฐ๋ณธ๊ธฐ: ์ปดํฌ๋„ŒํŠธ, Props, State์˜ ๊ฐœ๋…์„ ์•Œ๊ณ  ์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€

  • ๊ธฐ๋ณธ ํ›… ๊ฒฝํ—˜: useState, useEffect๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋ณธ ๊ฒฝํ—˜

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ: ES6+ ๋ฌธ๋ฒ•๊ณผ ๋น„๋™๊ธฐ(async/await) ์ฒ˜๋ฆฌ์— ์ต์ˆ™ํ•˜์‹  ๋ถ„

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ: Node.js๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๊ณ , ์—๋””ํ„ฐ์™€ ํ„ฐ๋ฏธ๋„์„ ๋‹ค๋ฃจ๋Š” ๋ฐ ๊ฑฐ๋ถ€๊ฐ์ด ์—†๋Š” ๋ถ„

์•ˆ๋…•ํ•˜์„ธ์š”
nhcodingstudio์ž…๋‹ˆ๋‹ค.

1,178

๋ช…

์ˆ˜๊ฐ•์ƒ

59

๊ฐœ

์ˆ˜๊ฐ•ํ‰

27

๊ฐœ

๋‹ต๋ณ€

4.8

์ 

๊ฐ•์˜ ํ‰์ 

16

๊ฐœ

๊ฐ•์˜

์•ˆ๋…•ํ•˜์„ธ์š”, ์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค๋Š” ์นด๋„ค๊ธฐ ๋ฉœ๋ก , ์›Œ์‹ฑํ„ด, ํ† ๋ก ํ† , ์›Œํ„ฐ๋ฃจ ๋“ฑ ๋ถ๋ฏธ์˜ ์ฃผ์š” ๋Œ€ํ•™์—์„œ ์ปดํ“จํ„ฐ๊ณตํ•™์„ ์ „๊ณตํ•˜๊ณ , Google, Microsoft, Meta ๋“ฑ ๊ธ€๋กœ๋ฒŒ IT ๊ธฐ์—…์—์„œ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ์Œ“์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ•จ๊ป˜ ๋งŒ๋“  ๊ต์œก ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค.

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

โ€œ์šฐ๋ฆฌ๊ฐ€ ๊ณต๋ถ€ํ•˜๋˜ ์ด ๋ฐฉ์‹, ๊ทธ๋Œ€๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋„ ์ „ํ•˜๋ฉด ์–ด๋–จ๊นŒ?โ€

๊ทธ ๋ฌผ์Œ์ด ๋ฐ”๋กœ ์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค์˜ ์ถœ๋ฐœ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

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

โ€œ์ง„์งœ ๊ฐœ๋ฐœ์ž๋Š”, ์ง„์งœ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.โ€

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

๐ŸŽฏ ์šฐ๋ฆฌ์˜ ์ฒ ํ•™์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.
"์ง„์ •ํ•œ ๋ฐฐ์›€์€ ์‹ค์ฒœ์—์„œ ์˜ค๊ณ , ์„ฑ์žฅ์€ ํ•จ๊ป˜ํ•  ๋•Œ ์™„์„ฑ๋œ๋‹ค."

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

์ด์ œ, ํ˜ผ์ž ๊ณ ๋ฏผํ•˜์ง€ ๋งˆ์„ธ์š”.
์šฐ๋ฆฌ๋™๋„ค์ฝ”๋”ฉ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ์„ฑ์žฅ์„ ํ•จ๊ป˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


Welcome to Neighborhood Coding Studio!

Neighborhood Coding Studio was founded by a team of developers who studied computer science at top North American universities such as Carnegie Mellon, the University of Washington, the University of Toronto, and the University of Waterloo, and went on to gain hands-on experience at global tech companies like Google, Microsoft, and Meta.

It all began as a study group formed by computer science students across the U.S. and Canada, created to grow together by sharing knowledge, solving problems, and learning from one another.
Though we were attending different schools in different time zones, the experience was so meaningful that it led us to one simple thought:

โ€œWhat if we shared this way of learning with others?โ€

That thought became the foundation of Neighborhood Coding Studio.

Today, we are a team of around 30 active developers and computer science students, each taking responsibility for their area of expertiseโ€”designing and delivering a curriculum that spans from foundational knowledge to real-world development.
Weโ€™re not just here to teachโ€”weโ€™re here to help you see through the lens of real developers and grow together.

โ€œTo become a real developer, you must learn from real developers.โ€

Our courses take you through the entire web development journeyโ€”from start to finishโ€”focused on hands-on practice, real-world projects, and practical feedback.
We care deeply about each learnerโ€™s growth and are committed to supporting your path every step of the way.

๐ŸŽฏ Our philosophy is simple but powerful:
"True learning comes from doing, and true growth happens together."

Whether you're just getting started, preparing for your first job, or exploring your future in tech,
Neighborhood Coding Studio is here to be your launchpadโ€”and your trusted companion on the journey.

You donโ€™t have to do it alone.
Let Neighborhood Coding Studio walk with you toward your future in development.

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

161๊ฐœ โˆ™ (6์‹œ๊ฐ„ 13๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

2๊ฐœ

5.0

2๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • ๋ฐ•์ง„ํ˜๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ๋ฐ•์ง„ํ˜

    ์ˆ˜๊ฐ•ํ‰ 2

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    52% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ๊ฐ•์˜ ์ข‹์•„์š”. ์ธ์ •.

    • nhcodingstudio
      ์ง€์‹๊ณต์œ ์ž

      ์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฐ•์ง„ํ˜๋‹˜. ์ง€์‹๊ณต์œ ์ž์ž…๋‹ˆ๋‹ค. ์šฐ์„  <React ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 2 - ๋ฏธ์…˜์œผ๋กœ ์™„์„ฑํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ํ›…๊ณผ ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜> ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•ด ์ฃผ์‹œ๊ณ , ์†Œ์ค‘ํ•œ ์ˆ˜๊ฐ•ํ‰์„ ๋‚จ๊ฒจ์ฃผ์…”์„œ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ฐ•์ง„ํ˜๋‹˜๊ป˜์„œ ๋‚จ๊ฒจ์ฃผ์‹  "์ธ์ •"ํ•œ๋‹ค๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ ๋„ ๊ฐ•๋ ฅํ•œ ์นญ์ฐฌ ๋•๋ถ„์— ์ •๋ง ํฐ ๋ณด๋žŒ๊ณผ ํž˜์„ ์–ป์Šต๋‹ˆ๋‹ค. Part 1์— ์ด์–ด Part 2์˜ ๊ณ ์„ฑ๋Šฅ ํ›…๊ณผ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋‚ด์šฉ๊นŒ์ง€ ๋ฐ•์ง„ํ˜๋‹˜์˜ ์‹ค๋ ฅ ํ–ฅ์ƒ์— ์‹ค์งˆ์ ์ธ ๋„์›€์ด ๋œ ๊ฒƒ ๊ฐ™์•„ ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฐ•์˜์—์„œ ๋‹ค๋ฃฌ ๊นŠ์ด ์žˆ๋Š” ๊ณ ๋ฏผ๋“ค์ด ์‹ค๋ฌด์—์„œ๋„ ๋น›์„ ๋ฐœํ•˜๊ธฐ๋ฅผ ์ง„์‹ฌ์œผ๋กœ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ฐ•์ง„ํ˜๋‹˜์˜ ์—ด์ •์ ์ธ ํ•™์Šต์„ ์‘์›ํ•˜๋Š” ๋งˆ์Œ์„ ๋‹ด์•„ ์ž‘์€ ํ˜œํƒ์„ ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ํ˜น์‹œ ์ €ํฌ ๊ต์œก ๊ณผ์ • ์ค‘ ์ถ”๊ฐ€์ ์œผ๋กœ ์ˆ˜๊ฐ•์„ ํฌ๋งํ•˜์‹œ๋Š” ๊ฐ•์˜๊ฐ€ ์žˆ์œผ์‹œ๋‹ค๋ฉด, ์•„๋ž˜ ์ด๋ฉ”์ผ๋กœ ํŽธํ•˜๊ฒŒ ์—ฐ๋ฝํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ํ™•์ธ ํ›„ ์ฆ‰์‹œ ํ• ์ธ ์ฟ ํฐ์„ ์ „๋‹ฌํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์˜ ์ด๋ฉ”์ผ: jeony0535@naver.com ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ท€ํ•œ ์‹œ๊ฐ„ ๋‚ด์–ด ๋”ฐ๋œปํ•œ ๋ง์”€ ๋‚จ๊ฒจ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ•์ง„ํ˜๋‹˜์˜ ์„ฑ์žฅ์„ ์ง„์‹ฌ์œผ๋กœ ์‘์›ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :D

  • ๋ง๊ณ ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ๋ง๊ณ 

    ์ˆ˜๊ฐ•ํ‰ 46

    โˆ™

    ํ‰๊ท  ํ‰์  4.7

    5

    27% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ๊ทธ๋™์•ˆ ์ƒ๊ฐ์—†์ด ์ผ๋˜ ํ›…๋“ค์˜ ๊ฐœ๋…์„ ๋‹ค์‹œ ์ตํžˆ๊ธฐ ์ข‹์•˜์Šต๋‹ˆ๋‹ค

    • nhcodingstudio
      ์ง€์‹๊ณต์œ ์ž

      ์•ˆ๋…•ํ•˜์„ธ์š”, ๋ง๊ณ ๋‹˜. ์ง€์‹๊ณต์œ ์ž์ž…๋‹ˆ๋‹ค. ์šฐ์„  <React ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค: Part 2 - ๋ฏธ์…˜์œผ๋กœ ์™„์„ฑํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ํ›…๊ณผ ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜> ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•ด ์ฃผ์‹œ๊ณ , ์†Œ์ค‘ํ•œ ์ˆ˜๊ฐ•ํ‰์„ ๋‚จ๊ฒจ์ฃผ์…”์„œ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ง๊ณ ๋‹˜๊ป˜์„œ ๋‚จ๊ฒจ์ฃผ์‹  ์ •์„ฑ์Šค๋Ÿฌ์šด ํ”ผ๋“œ๋ฐฑ์€ ์ €์—๊ฒŒ ์ •๋ง ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ์ต์ˆ™ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด ์˜ค์…จ๋˜ Hook๋“ค์˜ ๊ฐœ๋…์„ ์ด๋ฒˆ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ํ•œ๋ฒˆ ํƒ„ํƒ„ํ•˜๊ฒŒ ์ •๋ฆฝํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์…จ๋‹ค๋‹ˆ ๊ต์œก์ž๋กœ์„œ ๋ฌด์ฒ™ ๋ณด๋žŒ์„ ๋А๋‚๋‹ˆ๋‹ค. ์›๋ฆฌ๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์Šต๊ด€์ด ํ–ฅํ›„ ๊ณ ์„ฑ๋Šฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ์žˆ์–ด ๊ฐ•๋ ฅํ•œ ๋ฌด๊ธฐ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋ง๊ณ ๋‹˜์˜ ์—ด์ •์ ์ธ ํ•™์Šต์„ ์‘์›ํ•˜๋Š” ๋งˆ์Œ์„ ๋‹ด์•„ ์ž‘์€ ํ˜œํƒ์„ ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ํ˜น์‹œ ์ €ํฌ ๊ต์œก ๊ณผ์ • ์ค‘ ์ถ”๊ฐ€์ ์œผ๋กœ ์ˆ˜๊ฐ•์„ ํฌ๋งํ•˜์‹œ๋Š” ๊ฐ•์˜๊ฐ€ ์žˆ์œผ์‹œ๋‹ค๋ฉด, ์•„๋ž˜ ์ด๋ฉ”์ผ๋กœ ํŽธํ•˜๊ฒŒ ์—ฐ๋ฝํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ํ™•์ธ ํ›„ ์ฆ‰์‹œ ํ• ์ธ ์ฟ ํฐ์„ ์ „๋‹ฌํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์˜ ์ด๋ฉ”์ผ: jeony0535@naver.com ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ท€ํ•œ ์‹œ๊ฐ„ ๋‚ด์–ด ๋”ฐ๋œปํ•œ ๋ง์”€ ๋‚จ๊ฒจ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ง๊ณ ๋‹˜์˜ ์„ฑ์žฅ์„ ์ง„์‹ฌ์œผ๋กœ ์‘์›ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :D

nhcodingstudio๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜

์ง€์‹๊ณต์œ ์ž๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

๋น„์Šทํ•œ ๊ฐ•์˜

๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

์›” โ‚ฉ130,612

5๊ฐœ์›” ํ• ๋ถ€ ์‹œ

โ‚ฉ30,800