๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript/React

[React] React๋ž€?

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2021. 11. 18.
๋ฐ˜์‘ํ˜•

๐ŸŒธ React๋ž€?

ํŽ˜์ด์Šค๋ถ์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ Javascript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.



 

๐ŸŒธ React์˜ ์žฅ์ 

  • Javascript ๊ฐ์ฒด ํ˜•ํƒœ์˜ Virtual DOM์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
  • Server & Client ์‚ฌ์ด๋“œ rendering ์ง€์›์„ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ € ์ธก์˜ ์ดˆ๊ธฐ ๋ Œ๋”๋ง ๋”œ๋ ˆ์ด๋ฅผ ์ค„์ด๊ณ  SEO ํ˜ธํ™˜๋„ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
  • ๐Ÿ”ฅ ๋ Œ๋”๋ง(Readering)์ด๋ž€?
    html ์š”์†Œ(element), ๋˜๋Š” React ์š”์†Œ ๋“ฑ์˜ ์ฝ”๋“œ๊ฐ€ ๋ˆˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ทธ๋ ค์ง€๋Š” ๊ฒƒ.
  • ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐ€๋…์„ฑ์ด ๋งค์šฐ ๋†’๊ณ  ๊ฐ„๋‹จํ•˜์—ฌ ์‰ฌ์šด ์œ ์ง€๋ณด์ˆ˜, ๊ฐ„ํŽธํ•œ UI ์ˆ˜์ • ๋ฐ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๋‹ค.๐Ÿ”ฅ ์ปดํฌ๋„ŒํŠธ(Component)๋ž€?
    ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ UI ๋‹จ์œ„.
    props๋ฅผ input์œผ๋กœ ํ•˜๊ณ  UI๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์•ผ ํ•˜๋Š”์ง€ ์ •์˜ํ•˜๋Š” React Element๋ฅผ output์œผ๋กœ ํ•˜๋Š” ํ•จ์ˆ˜.
    ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ, ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜๋ž‘ ๋น„์Šทํ•˜๋‹ค.
    ์ปดํฌ๋„ŒํŠธ๋„ input์„ ๋ฐ›์•„์„œ return ํ•  ์ˆ˜ ์žˆ๋‹ค.
    (๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” input์„ props๋ผ๊ณ  ๋งํ•œ๋‹ค.)
  • ๋ฆฌ์•กํŠธ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ˜ผ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐฐ์šฐ๊ธฐ๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ ๋œ ๋ณต์žกํ•˜๋‹ค.
  • Controller, directive, template, model ์ฒ˜๋Ÿผ ๋ถ„๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์ปดํฌ๋„ŒํŠธ ๋‹จ ํ•˜๋‚˜๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋›ฐ์–ด๋‚œ Garbage Collection, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ์„ฑ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

 

 

๐ŸŒธ React์˜ ํŠน์ง•

๐ŸŒท ์†์„ฑ๊ณผ์˜ ๋‹จ๋ฐฉ์„ฑ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ

๋ณดํ†ต props๋ผ ๋ถˆ๋ฆฌ๋Š” ์†์„ฑ๋“ค์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ๋œ๋‹ค.
์ปดํฌ๋„ŒํŠธ๋“ค์€ props๋ฅผ ํ•˜๋‚˜์˜ ๋ถˆ๋ณ€์˜ ๊ฐ’(Javascipt ๊ฐ์ฒด)๋“ค๋กœ ๋ฐ›๋Š”๋‹ค.

๐ŸŒท Stateful Component

์ƒํƒœ๋ฅผ Component๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๋ณด๊ด€ํ•˜๋ฉฐ props๋ฅผ ํ†ตํ•ด Child Component๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŒท Virtual DOM

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

๐ŸŒท Lifecycle Method

๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋“ค์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์กดํ•˜๋Š” ๋™์•ˆ ์…‹ ํฌ์ธํŠธ(set point)์— ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ›…(hook)์ด๋‹ค.

  • shouldComponentUpdate๋Š” ๋ Œ๋”๊ฐ€ ๋ถˆํ•„์š”ํ•œ ๊ฒฝ์šฐ false๋ฅผ ๋ฐ˜ํ™˜ํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง์„ ๋ง‰์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • componentDidMount๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ '๋งˆ์šดํŠธ'(mount)๋˜๋ฉด ํ˜ธ์ถœ๋œ๋‹ค. (๋Œ€๊ฐœ ์ปดํฌ๋„ŒํŠธ DOM ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค) API๋ฅผ ํ†ตํ•ด ์›๊ฒฉ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ๋กœ๋“œ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ(trigger)ํ•˜๊ธฐ ์œ„ํ•ด ๋ณดํ†ต ์‚ฌ์šฉ๋œ๋‹ค.
  • render๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ์ด๋ฉฐ ์–ด๋– ํ•œ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์ตœ์†Œํ•œ์˜ ํ•„์š” ์กฐ๊ฑด์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด ๋ณดํ†ต์ด๋ฉฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•œ๋‹ค.

๐ŸŒท JSX

JSX(JavaScript XML)๋Š” XML๊ฐ™์€ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ECMAScript์˜ ํ™•์žฅ์ด๋‹ค. HTML๊ณผ ๋ชจ์Šต์ด ๋น„์Šทํ•ด ๋ณด์ด๋Š” JSX๋Š” ์ˆ˜๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์นœ์ˆ™ํ•œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง์„ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ JSX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋˜์ง€๋งŒ ๊ผญ ๊ทธ๋ ‡๊ฒŒ ํ•  ํ•„์š”๋Š” ์—†๋‹ค. (์ปดํฌ๋„ŒํŠธ๋“ค์€ ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค)
JSX๋Š” PHP๋ฅผ ์œ„ํ•ด ํŽ˜์ด์Šค๋ถ์ด ๊ฐœ๋ฐœํ•œ ๋‹ค๋ฅธ ํ™•์žฅ ๋ฌธ๋ฒ•์ธ XHP์™€ ์œ ์‚ฌํ•˜๋‹ค.

๐ŸŒท ๋‚ด์ œ๋œ(nested) ์š”์†Œ

๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ์—ฌ๋Ÿฌ ์š”์†Œ๋“ค์€ ์œ„์™€ ๊ฐ™์ด <div> ์š”์†Œ์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ ์š”์†Œ๋กœ ๊ฐ์‹ธ๊ฑฐ๋‚˜ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

๐ŸŒท ์†์„ฑ(attributes)

JSX๋Š” HTML์ด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ฏธ๋Ÿฌ๋งํ•˜๋„๋ก ์„ค๊ณ„๋œ ์ผ๋ จ์˜ ์š”์†Œ ์†์„ฑ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ์†์„ฑ๋“ค์€ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ชจ๋“  ์†์„ฑ์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ props๋กœ ๋ฐ›๋Š”๋‹ค.

๐ŸŒท ๋‹จ์ˆœ HTML ๋ Œ๋”๋ง ๊ทธ ์ด์ƒ์˜ ์•„ํ‚คํ…์ฒ˜

๋ฆฌ์•กํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ Œ๋”๋ง๋˜๋Š” HTML์„ ๋„˜์–ด์„œ ์ ์šฉ๋œ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด ํŽ˜์ด์Šค๋ถ์€ <canvas> ํƒœ๊ทธ์— ๋ Œ๋”๋งํ•˜๋Š” ๋™์ ์ธ ์ฐจํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋„ทํ”Œ๋ฆญ์Šค์™€ ํŽ˜์ดํŒ”์€ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์ชฝ์— ์œ ์‚ฌ HTML์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•œ ๋™์ผ ๊ตฌ์กฐ์˜ ์ ์žฌ(isomorphic loading)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๐ŸŒท ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋Š” 2015๋…„์— ํŽ˜์ด์Šค๋ถ์— ์˜ํ•ด ๋ฐœํ‘œ๋˜์—ˆ์œผ๋ฉฐ ๋„ค์ดํ‹ฐ๋ธŒ ์•ˆ๋“œ๋กœ์ด๋“œ, iOS, UWP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฆฌ์•กํŠธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€