React๋ž€?

Component ๋‹จ์œ„์˜ Javascript Library

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



โœจ์ฐธ๊ณ โœจ Frontend Framework(Library)

:: Angular

  • 2010๋…„ Google์—์„œ ๊ฐœ๋ฐœํ•œ, TypeScript ๊ธฐ๋ฐ˜์˜
  • ๋งค์šฐ ์•ˆ์ •์ ์ด๊ณ  ํƒ„ํƒ„ํ•œ Frontend App ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ
  • Framework๋‹ต๊ฒŒ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค
  • ๋ฌด๊ฒ๊ณ  ๋ฐฐ์šฐ๊ธฐ ์–ด๋ ต๋‹ค

:: Vue

  • 2014๋…„ Evan You๋ผ๋Š” ๊ฐœ์ธ์ด ๊ฐœ๋ฐœํ•œ Framework
  • ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•˜๊ณ  ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๋‹ค

:: React

  • 2013๋…„ Facebook์—์„œ ๊ฐœ๋ฐœํ•œ Library
  • MVC(Model-View-Controller) Architectureย (ex. Angular, Vue)์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ฆฌ์•กํŠธ๋Š” ์˜ค๋กœ์ง€ View๋งŒ ๋‹ด๋‹น
  • ๊ทธ๋งŒํผ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ดย third-party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(ex. React-router, Redux)๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ
  • React Native์˜ ์‚ฌ์šฉ



โ— CRA

๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ธํŒ… ํ•ด์ฃผ๋Š” ๋„๊ตฌ(toolchain)

  • React๋Š” UI ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ตฌ์ถ•ํ•ด์•ผํ•˜๋Š” ๊ฒƒ๋“ค์ด ๋งŽ์€๋ฐ,
  • ์ „๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ์„ ์ง์ ‘ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด ์›ํ•˜๋Š” ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ
  • ๋ฐ˜๋Œ€๋กœ, ์‹ ๊ฒฝ์จ์•ผ ํ•  ๊ฒƒ๋“ค์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ๊ณ„์—์„œ๋Š” ์ง์ ‘ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CRA(Create-React-App)๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค



โ— Component์˜ ๊ฐœ๋…๊ณผ ์ข…๋ฅ˜

Component๋ž€? ์žฌํ™œ์šฉ ๊ฐ€๋Šฅํ•œ UI ๊ตฌ์„ฑ ๋‹จ์œ„


โ—‹ ํŠน์ง•

  • ์žฌํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์— ์ข‹๋‹ค.
  • ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ•œ ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์ข‹๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋Š” ๋˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ - ์ž์‹ ์ปดํฌ๋„ŒํŠธ)
  • ๐Ÿšฉ์ง‘์ค‘! ์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์€ ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘!

    • React๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ DOM ํƒœ๊ทธ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด <div />๋Š” HTML div ํƒœ๊ทธ๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, <Welcome />์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๋ฒ”์œ„ ์•ˆ์— Welcome์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

    ๐Ÿ’ฌ addComment component๋ช…์„ ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑํ–ˆ๋‹ค๊ฐ€ ์ฝ์–ด์˜ค์ง€ ๋ชปํ–ˆ๋˜ ๊ฒฝํ—˜์„ ์žŠ์ง€๋ง์ž.๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ


โ—‹ ์ข…๋ฅ˜

  • Classํ˜• ์ปดํฌ๋„ŒํŠธ(Class Component)
    • render()ย ํ•จ์ˆ˜๊ฐ€ ๊ผญ ์žˆ์–ด์•ผ ํ•œ๋‹ค
  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ(Functional Component)



โ— JSX

๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ ๋ฌธ๋ฒ•

  • JavaScript Syntax Extension
  • JSX๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ”๋ฒจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค


โ—‹ ํŠน์ง•

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„ : { ... javascript... }
  • class vs. className
  • Inline Styling : <div style=>Hello React</div>
  • Self Closing tag : <div></div> vs. <div />
  • ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฐ์‹ธ๋Š” ์ตœ์ƒ์œ„ ์š”์†Œ (cf. React Fragments : <> ... </>)

    JSX์˜ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๋‚ด๋ถ€ ์š”์†Œ๋“ค์„ ๊ฐ์‹ธ๋Š” ์ตœ์ƒ์œ„ ์š”์†Œ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. Fragments๋Š” DOM์— ๋ณ„๋„์˜ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ ์š”์†Œ(์ž์‹)๋“ค์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ทธ๋ฃนํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์š”์†Œ๋“ค์„ ๊ฐ์‹ธ๋Š” div ํƒœ๊ทธ์˜ ๋ถˆํ•„์š”ํ•œ ์ƒ์„ฑ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์–ด ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.



โœ… ๋ชฉํ‘œ!

  • ์˜ค๋Š˜๋‚  React๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ์ด์œ ๋ฅผ ์•Œ๊ณ 
  • React๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฐœ๋…์„ ์ตํžˆ๊ณ 
  • CRA๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ณ 
  • Component์˜ ๊ฐœ๋…๊ณผ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค
  • JSX๊ฐ€ ๋ฌด์—‡์ธ์ง€, ํŠน์„ฑ์€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค