Skip to content

Latest commit

ย 

History

History
138 lines (92 loc) ยท 6.3 KB

react-vue-angular.md

File metadata and controls

138 lines (92 loc) ยท 6.3 KB

๐Ÿ’ป React vs Vue vs Angular

๋ฆฌ๋ทฐ์•ต


๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๋ฆฌ์•กํŠธ(React)

๐Ÿƒ ๋ฆฌ์•กํŠธ(React) ํŠน์ง•

  • ๋ฆฌ์•กํŠธ๋Š” ํŽ˜์ด์Šค๋ถ์—์„œ ๊ด€๋ฆฌํ•˜๋Š”, ๋ฆฌ์•กํŠธ๋Š” ์›น ํŽ˜์ด์ง€์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ  ๋นŒ๋“œํ•˜๋Š”๋ฐ ์ดˆ์ ์„ ๋‘”, ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  • UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ ์ž์ฒด๋งŒ์œผ๋กœ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ, ๋ผ์šฐํŒ…, ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋“ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ๋ฆฌ์•กํŠธ์—์„œ ์•ž์„  ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Redux, Mobx, react-router ๋“ฑ์„ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ํฌ๋กœ์Šค ํ”Œ๋žซํผ(Cross-Platform) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • Virtual Dom ์‚ฌ์šฉ
  • JS๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. JSX์™€ styled-components์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด js๋กœ ๋งˆํฌ์—…๊ณผ ์Šคํƒ€์ผ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿƒ Data Flow

  • React๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ํ๋ฅด๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ€์ง„๋‹ค.

๐Ÿƒ Component ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ

  • ๋ฆฌ์•กํŠธ๋Š” UI(View)๋ฅผ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋กœ ์ชผ๊ฐœ์„œ ๋งŒ๋“ ๋‹ค.
  • ํ•œ ํŽ˜์ด์ง€ ๋‚ด์—์„œ๋„ ์—ฌ๋Ÿฌ ๊ฐ ๋ถ€๋ถ„์„ ๋…๋ฆฝ๋œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค๊ณ , ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐํ•ฉํ•ด ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์ฝ”๋“œ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฝ๋‹ค.
  • ๊ธฐ๋Šฅ ๋‹จ์œ„, UI ๋‹จ์œ„๋กœ ์บก์Šํ™”์‹œ์ผœ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณต ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด importํ•ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค๋Š” ๊ฐ„ํŽธํ•จ์ด ์žˆ์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์žกํ•˜๋”๋ผ๋„ ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜, ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

๐Ÿƒ Virtual DOM

vdom


  • DOM์€ Document Object Model์˜ ์•ฝ์ž์ด๋‹ค. DOM์€ HTML, CSS, XML ๋“ฑ์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ธ์‹ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋ฆฌ์•กํŠธ๋Š” ์ด DOM Tree ๊ตฌ์กฐ์™€ ๊ฐ™์€ ๊ตฌ์กฐ์ฒด๋ฅผ Virtual DOM์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋‹ค.
  • Virtual DOM์€ ๊ฐ€์ƒ์˜ Doucment Object Model์„ ๋งํ•œ๋‹ค.
  • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค Virtual DOM์„ ๋งŒ๋“ค๊ณ , ๋‹ค์‹œ ๊ทธ๋ฆด ๋•Œ๋งˆ๋‹ค ์‹ค์ œ DOM๊ณผ ๋น„๊ตํ•˜๊ณ  ์ „ํ›„ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•ด, ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•ด, ์•ฑ์˜ ํšจ์œจ์„ฑ๊ณ  ์†๋„๋ฅผ ๊ฐœ์„ ํ•œ๋‹ค.

๐Ÿƒ Props and State

  • Props๋ž€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งํ•œ๋‹ค.
  • ์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ์ด๋ฉฐ, ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ๋ฐ›์€ props๋Š” ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  props ๋ฅผ ์ „๋‹ฌํ•ด์ค€ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋งŒ props๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๋ทฐ(Vue)

๐Ÿƒ ๋ทฐ(Vue) ํŠน์ง•

  • Evan You๊ฐ€ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, 2014๋…„ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๊พธ์ค€ํžˆ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
  • ์ปจํŠธ๋กค๋Ÿฌ ๋Œ€์‹  ๋ทฐ ๋ชจ๋ธ์„ ๊ฐ€์ง€๋Š” MVVM(Model-View-ViewModel) ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋””์ž์ธ๋˜์—ˆ์œผ๋ฉฐ, ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ UI๋“ค์„ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Vitual DOM์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • Angular์™€ React์— ๋น„ํ•ด ๋งค์šฐ ์ž‘๊ณ  ๊ฐ€๋ฒผ์šฐ๋ฉฐ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์Šต๋‹ˆ๋‹ค.
  • Template์™€ Component๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฌถ๊ณ  View Layer๋ฅผ ์ •๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿƒ MVVM(Model-View-ViewModel)

MVVM


  • Model - View - ViewModel์˜ ์ค„์ž„๋ง๋กœ ๋กœ์ง๊ณผ UI์˜ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŒจํ„ด์ด๋‹ค.
  • ์›นํŽ˜์ด์ง€๋Š” DOM๊ณผ JS๋กœ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜๋Š”๋ฐ DOM์ด View์˜ ์—ญํ• ์„ ํ•˜๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ Model์˜ ์—ญํ• ์„ ํ•œ๋‹ค.
  • ViewModel์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ง์ ‘ Model๊ณผ View๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ViewModel์ด ์ค‘๊ฐ„์—์„œ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์ด MVVM ๋ชจ๋ธ์ด๋‹ค.

๐Ÿƒ Component

component-vue


  • ํ™”๋ฉด์— ๋น„์ถฐ์ง€๋Š” ๋ทฐ์˜ ๋‹จ์œ„๋ฅผ ์ชผ๊ฐœ์–ด ์žฌํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ปดํฌ๋„ŒํŠธ ์ž…๋‹ˆ๋‹ค.
  • Vue์—์„œ, ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ์˜ต์…˜์œผ ๊ฐ€์ง„ Vue ์ธ์Šคํ„ด์Šค ์ž…๋‹ˆ๋‹ค.
  • ์ „์—ญ ๋“ฑ๋ก๊ณผ ์ง€์—ญ ๋“ฑ๋ก์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • Vue๋Š” ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ์›น ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ™•์žฅ์ž๊ฐ€ .vue์ธ ๋‹จ์ผ ํŒŒ์ผ์— HTML, JS, CSS ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿƒ Vue ์ธ์Šคํ„ด์Šค

  • new Vue๋กœ ์„ ์–ธํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ Vue ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ํ•œ๋‹ค.
  • el: ํƒœ๊ทธ์— ์ง€์ •ํ•œ ID, ํด๋ž˜์Šค๋ช…, ํƒœ๊ทธ๋ช…์œผ๋กœ ํ•ด๋‹น ํƒœ๊ทธ์™€ vue ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์˜ต์…˜
  • data: key์™€ value๋ฅผ ์ง€์ •ํ•˜๋Š” JSON ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์˜ต์…˜
  • computed: getter/setter๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.
<div id = โ€œappโ€
    {{message}}
</div>

<script>
  let model = {
      message : โ€œ๋ทฐ ์ƒ์„ฑโ€
  }

  new Vue({
      el : โ€˜#appโ€™,
      data : model
  })
</script>

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์•ต๊ทค๋Ÿฌ(Angular)

๐Ÿƒ ์•ต๊ทค๋Ÿฌ(Angular) ํŠน์ง•

  • Google์—์„œ ๋งŒ๋“  SPA(Single Page Application)๋ฐฉ์‹์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ์ด๋‹ค.
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฌผ๋ก  ๋ชจ๋ฐ”์ผ ์›น, ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋ฐ”์ผ๊ณผ ๋ฐ์Šคํฌํƒ‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊นŒ์ง€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์–ธ์–ด๋Š” TypeScript ํ˜น์€ JS์˜ ES6์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐœ๋ฐœ ๊ทธ๋ฃน์ธก์—์„œ๋Š” TypeScript๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.
  • ๋ฆฌ์•กํŠธ์™€ ๋ทฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์„ ํ•œ๋‹ค.
  • ๋‹จ๋ฐฉํ–ฅ ๋˜๋Š” ์–‘๋ฐฉํ–ฅ์˜ ์„ ํƒ์  ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์ง€์›
  • ๋””๋ ‰ํ‹ฐ๋ธŒ(Directive)์™€ ์„œ๋น„์Šค, ์˜์กด์„ฑ ์ฃผ์ž…(DI, Dependency Injection)์˜ ๊ฐ„์†Œํ™”
  • Angular CLI(Command Line Interface) ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰, ๊ฐœ๋ฐœ ๋„๊ตฌ ํ†ตํ•ฉ ๋ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• ์ž๋™ํ™”. ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๊ตฌ์„ฑ์š”์†Œ ์ถ”๊ฐ€ ๋“ฑ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ด์šฉ

์ฐธ๊ณ 

https://ryublock.tistory.com/41 https://wikidocs.net/17701 https://kjwsx23.tistory.com/526 https://brunch.co.kr/@skykamja24/573