3. React

1. React๋ž€?

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(์›น UI)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋ฃจ์–ด์ง (์ปดํฌ๋„ŒํŠธ : ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” UI ๋‹จ์œ„) ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ โœ… ๋ฐ”๋กœ ๋ชฉ์  ์„œ์ˆ , ๋ชฉํ‘œ๋ฅผ ๋ช…์‹œ โ†’ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ๋””๋ฒ„๊น… ์šฉ์ด Ex. React

๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ ˆ์ฐจ๋ฅผ ์ผ์ผ์ด ๋‚˜์—ด, ์‹คํ–‰ํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ช…์‹œ Ex. jQuery, C, JAVA

๐Ÿ“Œ ๋ฆฌ์•กํŠธ์˜ ์ดํ•ด๋ฅผ ๋•๋Š” ๊ธ€

2. React ์ปดํฌ๋„ŒํŠธ

UI๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ์ ์ธ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ โ†’ ์œ ๋‹› ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์ข‹์Œ props๋ฅผ ๋ฐ›์•„, ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋˜๋Š”์ง€๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ• : ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ, ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ

Props

์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ

  • ๊ฐ’์— ์ด๋ฆ„์„ ๋ถ™์—ฌ์„œ ์ „๋‹ฌ

  • properties์˜ ์ค„์ž„๋ง

  • ์ •์ , ๋™์  ๋ฐ์ดํ„ฐ(state), ์ปดํฌ๋„ŒํŠธ ์ „๋‹ฌ ๊ฐ€๋Šฅ

  • ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ props๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ re-render ๋  ๋•Œ๋งˆ๋‹ค re-render๋จ

3. React ๋ฆฌ๋ Œ๋”๋ง

state

React state

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ€์ง€๋Š” state

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด

  • ์ฒดํฌ๋ฐ•์Šค์˜ ๊ฐ’

๐Ÿ“Œ ์–ด๋–ค ๊ฒƒ์ด state๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š” ์ง€ ๊ฐ ๋ฐ์ดํ„ฐ์— ์„ธ ๊ฐ€์ง€ ์งˆ๋ฌธ์„ ํ†ตํ•ด ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Œ

  1. ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ props๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š”๊ฐ€? ๊ทธ๋Ÿฌ๋ฉด state๊ฐ€ ์•„๋‹ˆ๋‹ค.

  2. ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๊ฐ€? ๊ทธ๋Ÿฌ๋ฉด state๊ฐ€ ์•„๋‹ˆ๋‹ค.

  3. ์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ๋‹ค๋ฅธ state๋‚˜ props๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณ„์‚ฐ ๊ฐ€๋Šฅํ•œ๊ฐ€? ๊ทธ๋Ÿฌ๋ฉด state๊ฐ€ ์•„๋‹ˆ๋‹ค.

๋ฆฌ๋ Œ๋”๋ง

state๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒ ๋ฆฌ๋ Œ๋”๋ง์€ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์˜ render๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด์ง€, React๊ฐ€ ์–ธ๋งˆ์šดํŠธ์‹œํ‚ค๊ณ  ๋‹ค์‹œ ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜ ๋ฆฌ๋ Œ๋”๋ง์€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์™€ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นจ

Virtual DOM

๐Ÿ“Œ Virtual DOM Tree (๊ฐ€์ƒ DOM ํŠธ๋ฆฌ) Virtual DOM์€ ๋ธŒ๋ผ์šฐ์ € API ์œ„์— ์žˆ๋Š” JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๊ตฌํ˜„๋˜๋Š” ๊ฐœ๋… ์ด์ „์˜ DOM Tree์™€ ๋น„๊ตํ•ด์„œ ์‹ค์งˆ์ ์œผ๋กœ ์–ด๋–ค ๋ถ€๋ถ„์ด ์—…๋ฐ์ดํŠธ ๋ผ์•ผ ํ•˜๋Š”์ง€ ๊ณ„์‚ฐํ•ด์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ DOM Tree์— ์—…๋ฐ์ดํŠธ ( = ์žฌ์กฐ์ •) ๋ Œ๋”๋ง ์ „ํ›„์— ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ์„ ์ ์šฉ โ‡’ render ํ•จ์ˆ˜๊ฐ€ ๋งŽ์ด ํ˜ธ์ถœ๋˜์–ด๋„ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ด์œ 

  • ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ๋ณด๊ด€

  • 60fps๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์žฅ

์žฌ์กฐ์ • (Reconciliation)

๐Ÿ“Œ ์žฌ์กฐ์ • (Reconciliation) React๋Š” ์„ ์–ธ์  API๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐฑ์‹ ์ด ๋  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€๋ฅผ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Œ React ๋‚ด๋ถ€์—์„œ๋Š” ๋น„๊ต (diffing) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ฌด์—‡์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ๊ณ„์‚ฐ์ด ์ผ์–ด๋‚จ โ‡’ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐฑ์‹ ์ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•ด์ง€๊ณ , ๋น ๋ฅธ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

4. IoC(Inversion of Control)

์ œ์–ด์˜ ์—ญ์ „

"IoC containers์˜ ๋ถ€์ƒ์œผ๋กœ ์ธํ•ด ์‚ฌ๋žŒ๋“ค์ด IoC(์ œ์–ด์˜ ์—ญ์ „)์˜ ์˜๋ฏธ์— ํ˜ผ๋ž€์„ ๋Š๋‚€๋‹ค. IoC(์ œ์–ด์˜ ์—ญ์ „)์˜ ์ผ๋ฐ˜์ ์ธ ์›์น™์„, IoC containers๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” IoC(์ œ์–ด์˜ ์—ญ์ „)์˜ ํŠน์ • ์Šคํƒ€์ผ(์˜ˆ: ์˜์กด์„ฑ ์ฃผ์ž…)๊ณผ ํ˜ผ๋™ํ•œ๋‹ค."

์ œ์–ด์˜ ์—ญ์ „ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์žฌ์‚ฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ๋ฆ„ ์ œ์–ด๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด

๊ธฐ์กด โ†’ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์ด์šฉ IoC์ด ์ ์šฉ๋œ ๊ตฌ์กฐ โ†’ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœ

context API์—์„œ์˜ ์ œ์–ด์˜ ์—ญ์ „

IoC์˜ ๋ชฉ์ 

  • ์ž‘์—…์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ž‘์—… ์ˆ˜ํ–‰ ์ž์ฒด๋ฅผ ๋ถ„๋ฆฌ

  • ๋ชจ๋“ˆ์„ ์ œ์ž‘ํ•  ๋•Œ, ๋ชจ๋“ˆ๊ณผ ์™ธ๋ถ€ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฐํ•ฉ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•  ํ•„์š” ์—†์ด ๋ชจ๋“ˆ์˜ ๋ชฉ์ ์— ์ง‘์ค‘

  • ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ์ง€์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•  ํ•„์š” ์—†์ด, ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ํ˜‘์•ฝ๋Œ€๋กœ๋งŒ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋ฉด ๋จ

  • ๋ชจ๋“ˆ์„ ๋ฐ”๊พธ์–ด๋„ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ค์ง€ ์•Š์Œ

์˜์กด์„ฑ ์ฃผ์ž…

์˜์กด์„ฑ ์ฃผ์ž…(dependency injection)์€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์˜์กด์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ํ…Œํฌ๋‹‰ ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ์„ ๋Š์Šจํ•˜๊ฒŒ ๋งŒ๋“ฆ

5. Library vs Framework

Q. React๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ธ๊ฐ€์š”, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ๊ฐ€์š”?

๊ณต์‹ ๋ฌธ์„œ์˜ ํ‘œํ˜„ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

IoC๋Š” Framework์„ ์ •์˜ํ•˜๋Š” ์ค‘์š”ํ•œ ํŠน์ง• React๋Š” IoC๋ฅผ ํ†ตํ•ด ์ƒํƒœ์™€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์–ฝํžŒ ๋ณต์žกํ•œ ์ƒํ™ฉ์„ ๊ฐ„๋‹จํžˆ ์„ ์–ธํ˜• UI๋กœ ๊ตฌ์„ฑ (React์˜ ์ฒซ ๋ฒˆ์งธ ํŠน์ง•) ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ’ก ์ผ๋ฐ˜์ ์œผ๋กœ IoC๋Š” IoC ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฎ์—ฌ์„œ DI(Dependency injection, ์˜์กด์„ฑ ์ฃผ์ž…)์™€ ๋™์˜์–ด์ฒ˜๋Ÿผ ์“ฐ์ด๊ณ , Next.js, Remix ๋“ฑ์„ Framework์ด๋ผ๊ณ  ๋ถ€๋ฆ„

Last updated