2024-02-29.md

๐Ÿก

DIL: ๋ชจ๋˜ ๋ฆฌ์•กํŠธ ๋”ฅ ๋‹ค์ด๋ธŒ, 0์ฃผ์ฐจ-1

์Šคํ„ฐ๋””: ์›”๊ฐ„ CS, https://github.com/monthly-cs/2024-03-modern-react-deep-dive
์˜ค๋Š˜ ์ง„ํ–‰: ์Šคํ„ฐ๋”” OT
์‹œ๊ฐ„ ๋ฐ ์œ„์น˜: 2024๋…„ 2์›” 29์ผ 8์‹œ~8์‹œ 20๋ถ„, ๋””์Šค์ฝ”๋“œ


DIL-week0-1_2024-02-29

| DIL ์ฃผ์ฐจ | ๋ฒ”์œ„ | ๋‚ด์šฉ | ์˜ค๋Š˜์ฐจ ์ง„๋„ | | -------- | ------ | ------------------------------ | ----------- | | 0์ฃผ์ฐจ | 1, 2์žฅ | ๋ฆฌ์•กํŠธ ํ•ต์‹ฌ์š”์†Œ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ | ~19p |

์˜ค๋Š˜ ์ฝ์€ ๋‚ด์šฉ์„ markdown์œผ๋กœ ๊ฐ„๋‹จํžˆ ๋ฉ”๋ชจ
ebook ๊ตฌ๋งค ํ›„ "๋“ค์–ด๊ฐ€๋ฉฐ"๊นŒ์ง€ ์ฝ์Œ(1~19p)
์ฝ์€ ์‹œ๊ฐ„: 10์‹œ 15๋ถ„~12์‹œ 5๋ถ„

์„œ๋ฌธ

  • CRA๋Š” ์‚ฌ์‹ค์ƒ ๋ => Next.js Remix
  • ์ฑ…์—์„œ๋Š” React 17~18 ๋น„๊ต, NextJS๋Š” 13.4๊นŒ์ง€
  • 2018 ๊ธฐ์ ์œผ๋กœ JQuery๋ฅผ ์—ญ์ „
  • ๋ฉ”ํƒ€์˜ ์ง€์›

๋ช…์‹œ์  ์ƒํƒœ ๋ณ€๊ฒฝ

  • React๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ๋งŒ ์ง€์› <-> Angular ์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ
    • React์˜ ๋ช…์‹œ์  ์ƒํƒœ ๋ณ€๊ฒฝ? setName() ์ฒ˜๋Ÿผ "๋ช…์‹œ์ "์œผ๋กœ ํ˜ธ์ถœ๋œ ์ƒํƒœ ๋ณ€๊ฒฝ์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
    • ๊ฐ„๋‹จํ•จ๊ณผ ์œ ์—ฐ์„ฑ (like recoil)
    • ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ฝ๊ธฐ ์‰ฌ์›€ (๋น„๊ต์  ๋ณ€ํ™”๊ฐ€ ๋‹จ์ˆœํ•˜๊ธฐ ๋•Œ๋ฌธ)

JSX, JavaScript XML

  • Angular๋Š” string template์„ ์‚ฌ์šฉ ex) ngIf ๋“ฑ์˜ ์ „์šฉ ๋ฌธ๋ฒ•
  • React๋Š” HTML, JS ๋ฌธ๋ฒ•์— ๋ช‡ ๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ€๋ฏธํ•œ ์ˆ˜์ค€
    • ์ดˆ๊ธฐ ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค. ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•จ
    • ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋“ฑ, ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊นŠ์€ ์ดํ•ด์—๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋‚œ์ด๋„๊ฐ€ ์žˆ๋Š” ํŽธ(Vue, Svelte์™€ ๋น„๊ต)

์—ญ์‚ฌ

React.js:The Documentary

  • 2010๋…„ ์ด์ „
    • LAMP ์Šคํƒ (Linux, Apache, MySQL, PHP)
    • MPA, HTML ํŽ˜์ด์ง€๋ฅผ ์ˆ˜๋™์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋˜ FE
  • IE 8: ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์˜ ๋“ฑ์žฅ
  • JQuery: js ๋น„๊ณต์‹ ํ‘œ์ค€์œผ๋กœ ์ž๋ฆฌ ์žก๊ธฐ ์‹œ์ž‘, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‹ค์ˆ˜
  • 2011๋…„: WebSocket, Canvas, SVG, Geolocation, ES5
    • ์ ๊ทน์ ์œผ๋กœ DOM ์ˆ˜์ •, Ajax๋กœ Client ์„œ๋ฒ„ ํ†ต์‹  ์‹œ์ž‘
    • AngularJS์™€ CoffeeScript, Backbone.js๊ฐ€ ๋“ฑ์žฅ (MVVM, MVC ํŒจํ„ด)
  • ํŽ˜์ด์Šค๋ถ์˜ ์ƒํ™ฉ
    • 2011๋…„์— ์ฒ˜์Œ ํŽ˜์ด์Šค๋ถ ํƒ€์ž„๋ผ์ธ ์ƒ๊น€
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค์„ ์ค„์ด๊ณ ์ž ํ–ˆ์œผ๋‚˜, ์‹ค์‹œ๊ฐ„์„ฑ์ด ๊ฐ•์กฐ๋œ ๊ธฐ๋Šฅ๊ณผ MPA์˜ ๋šœ๋ ทํ•œ ํ•œ๊ณ„๊ฐ€ ์žˆ์Œ
  • ํŽ˜์ด์Šค๋ถ์˜ <์ŠคํŒŒ๋ฅดํƒ„ ํ”„๋กœ์ ํŠธ>
    • ์• ํ”Œ์˜ ๊ฐ•๋ ฅํ•œ iOS ์•ฑ ๊ทœ์ œ
    • HTML5๋กœ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํŽ˜์ด์Šค๋ถ ์•ฑ์„ ๋งŒ๋“ค๊ณ ์ž ํ•จ
    • ํ”„๋กœ์ ํŠธ ์‹คํŒจ: ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์ด ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ , => 18๊ฐœ์›” ๋™์•ˆ ์žฌ๊ฐœ๋ฐœ

BoltJS

  • ํŽ˜์ด์Šค๋ถ์˜ ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์ถ• ์‹œ๋„
  • ๊นƒํ—ˆ๋ธŒ ์†Œ์Šค์ฝ”๋“œ์˜ ๊ณต๊ฐœ์™€ ์‚ญ์ œ
  • FBolt, Functional Bolt => ํ•จ์ˆ˜ํ˜•์„ ์ง€ํ–ฅํ•˜๋Š” Bolt
  • ๊ธฐ์กด ์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ ๊ตฌ์กฐ์™€ ๋ฌธ์ œ์ 
    • ๋ชจ๋ธ๊ณผ ๋ทฐ๊ฐ€ ๋ฐ€์ ‘ ๊ด€๊ณ„
    • ๋ณ€๊ฒฝ๋œ DOM ์ถ”์ ์ด ์–ด๋ ต๊ณ , ๋งŽ์€ ๋ฒ„๊ทธ ๋ฐœ์ƒ
    • FBolt์—์„œ ์˜๊ฐ์„ ์–ป์€ ๊ฐœ์„  ๋ฐฉํ–ฅ: DOM์„ ์ƒˆ๋กœ ๋žœ๋”๋ง

ํŽ˜์ด์Šค๋ถ์˜ ๋Œ€์•ˆ, ์‘์•  React

  • ๋ฆฌ์•กํŠธ ์ฒซ ํ”„๋กœ์ ํŠธ: ๋Œ“๊ธ€/๊ณต์œ  ๋ฒ„ํŠผ์ด ์žˆ๋Š” UFI, Universal Feedback Interface๋ฅผ ๊ตฌํ˜„ (์ฆ‰๊ฐ์  ๋ฐ˜์‘ ์†๋„, ๋ชจ๋“  ํฌ์ŠคํŠธ์— ์กด์žฌ)
    • JSX ๊ตฌ๋ฌธ๊ณผ Flux ํŒจํ„ด
  • ํŽ˜์ด์Šค๋ถ์ด ์ธ์Šคํƒ€๊ทธ๋žจ์„ ์ธ์ˆ˜: ๋ฆฌ์•กํŠธ๋กœ ๊ฐœ๋ฐœ ์‹œ์ž‘
  • JSConf US 2013์—์„œ React์™€ JSX๋ฅผ ๊ณต๊ฐœ~! ์˜คํ”ˆ์†Œ์Šค!

๋‹น์‹œ ํšŒ์˜์ ์ธ ์˜๊ฒฌ๊ณผ ๋น„ํŒ

  • SoC ์›์น™์— ์œ„๋ฐฐ๋˜์–ด ๋ณด์ธ๋‹ค => ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ
    • ๊ธฐ์กด: HTML, CSS, JS
    • React: ์—ญํ• ์— ๋”ฐ๋ฅธ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ
  • ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•๊ณผ ๊ด€์ ์„ ์ „๋‹ฌํ•  ๋ฐฉ๋ฒ• ๋ชจ์ƒ‰

๋น›๋น› ๋ฆฌ์•กํŠธ

  • ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ! => ์™ธ๋ถ€ ๊ฐœ๋ฐœ์ž, ์›๋™๋ ฅ, ์ปค๋ฎค๋‹ˆํ‹ฐ
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ์†Œ์‹์ง€๋ฅผ ์˜ฌ๋ฆผ: ํŽ˜์ด์Šค๋ถ ํŒ€ ๋ฐ–์—์„œ ์ผ์–ด๋‚˜๋Š” ๋ฆฌ์•กํŠธ ๊ธ€ ๊ณต์œ /ํŒ€ ์ธํ„ฐ๋ทฐ
  • Using React to speed up the Khan Academy question editor
    • ์ตœ์ดˆ ๋ฆฌ์•กํŠธ ์™ธ๋ถ€ ํ”„๋กœ์ ํŠธ
    • ๋ฆฌ์•กํŠธ์˜ ์„ ์–ธ์  ์ธํ„ฐํŽ˜์ด์Šค๋กœ (1)์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๊ฐ„๋‹จ์ž‘์„ฑ, (2)์ปดํฌ๋„ŒํŠธ ๋žœ๋”๋ง ํ•„์š”์„ฑ ๊ฒฐ์ •, (3)ํ•„์š”ํ•œ ์˜์—ญ DOM ๋ณ€๊ฒฝ
  • Why did we build React?
    • ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑ
    • ์ด๋ฏธ ํƒ€ MVC ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ์Œ์—๋„ React๋ฅผ ๊ฐœ๋ฐœํ•œ ์ด์œ 
    • ์‹œ๊ฐ„์— ํ๋ฆ„์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ
  • The Future of JavaScript MVC Framework
    • shouldComponentUpdate๋ฅผ ํ™œ์šฉ, ๋ถˆํ•„์š”ํ•œ ๋žœ๋”๋ง ์ƒ๋žต์ด ์ฃผ๋Š” ์„ฑ๋Šฅ์  ์ด์ , MVC ํŒจํ„ด๋ณด๋‹ค -> ๋ฆฌ์•กํŠธ ๋Œ€์„ธ ์˜ˆ๊ฒฌ
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์žฅ: ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ง€์ง€๋ฅผ ๋ฐ›์œผ๋ฉฐ ์„ฑ์žฅํ•œ๋‹ค.
    • ์ƒํƒœ ๊ด€๋ฆฌ, ๋ผ์šฐํ„ฐ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋žœ๋”๋ง
  • ๋ฆฌ์•กํŠธ๋ฅผ ์ฑ„ํƒ
    • ์•ผํ›„! ๋ฉ”์ผ: C++, HTML => PHP, JS => React, Flux
    • ๋„ทํ”Œ๋ฆญ์Šค(30์ผ ๋™์•ˆ ๋ฆฌ์•กํŠธ์™€ ๋ฐฑ๋ณธ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“  ํ›„ ๊ฒฐ์ •)
      • ์ฝ”๋“œ ์ค„์Œ, ์™„๋งŒํ•œ ํ•™์Šต ๊ณก์„ , ๋น ๋ฅธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
      • 2015๋…„ 6์›”์— ๋ฆฌ์•กํŠธ๋กœ ์ œ์ž‘ํ•œ ํ™ˆํŽ˜์ด์ง€ ๊ณต๊ฐœ

ํ˜„์žฌ์™€ ๋ฏธ๋ž˜

  • ๋ฆฌ์•กํŠธ ๋ฒ„์ „
    • 2013๋…„ 5์›”: ์ตœ์ดˆ ๊ณต๊ฐœ, 0.3.0
    • 0.14.7 ์ดํ›„์— => 15.0.0์œผ๋กœ ๋ฒ„์ „ ์—… (์‹ค์ˆ˜๊ฐ€ ์•„๋‹๊นŒ?)
    • 1.0.0~15.0.0 ์‚ฌ์ด ๋ฒ„์ „์ด ์—†์ง€๋งŒ, semantic versioning ํ•˜๊ณ  ์žˆ์Œ
  • Angular, Vue์™€ ๋‹ฌ๋ฆฌ "์›น ๊ฐœ๋ฐœ"์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€ํ–ฅํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ตญ๋‚ด IT
    • ํ† ์Šค / slash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ์นด์นด์˜ค
    • ๋„ค์ด๋ฒ„์˜ PC ๋ฉ”์ธ, ์ง€๋„ ๋ฉ”์ธ

์˜์–ด๊ณต๋ถ€
e.g. (Latin)exempli gratia, ์˜ˆ์‹œ
i.e. (Latin)id est, ๋‹ค์‹œ ๋งํ•˜์ž๋ฉด