๐Ÿ”ฅ React vs Vue vs Angular: ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?

@leekh8 ยท November 24, 2024 ยท 4 min read

React vs Vue vs Angular: ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?

์›น ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋ ค๋Š” ๋ชจ๋‘๊ฐ€ ํ•œ ๋ฒˆ์ฏค ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜๋Š” ์งˆ๋ฌธ์ด๋‹ค.

์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•ด์•ผ ๋‚ด ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ• ๊นŒ?

์›น ๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ, ๋‚˜๋Š” React๋ฅผ ์„ ํƒํ–ˆ๋‹ค.

์ด์œ ๋Š” ๋งค์šฐ ๋‹จ์ˆœํ•˜๋‹ค.

๊ตฌ๊ธ€์—์„œ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ๋งŽ์€ ์ž๋ฃŒ๊ฐ€ React ๊ด€๋ จ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ React๋งŒ์˜ ์žฅ์ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•œ๊ณ„๋ฅผ ๊ฒฝํ—˜ํ•˜๋ฉด์„œ, Vue์™€ Angular์—๋„ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์„ ํ†ตํ•ด React, Vue, Angular์˜ ํŠน์ง•๊ณผ ์žฅ๋‹จ์ , ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ์–ด๋–ค ์„ ํƒ์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ํ•จ๊ป˜ ์•Œ์•„๋ณด์ž.

React ๐Ÿ“˜1

React๋Š” Facebook์—์„œ ๊ฐœ๋ฐœํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ UI ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์žฅ์ 

  • ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›: ํฐ ์ƒํƒœ๊ณ„์™€ ํ’๋ถ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋„๊ตฌ ์ง€์› ๋ฐ ๊ฐ•์˜ ์ž๋ฃŒ๊ฐ€ ๋งŽ์•„ ์ฒ˜์Œ ๋ฐฐ์šฐ๊ธฐ ์ˆ˜์›”.
  • ์œ ์—ฐ์„ฑ: ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ(Redux, Context API ๋“ฑ)๋‚˜ ๋ผ์šฐํŒ… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒ ๊ฐ€๋Šฅ.
  • ๋น ๋ฅธ ๋ Œ๋”๋ง: Virtual DOM ๋•๋ถ„์— ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ์—๋„ ํšจ์œจ์ ์œผ๋กœ ํ™”๋ฉด์„ ๊ฐฑ์‹ .

๋‹จ์ 

  • ์–ด๋ ค์šด ์ง„์ž… ์žฅ๋ฒฝ: ํ•„์š”ํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋‚˜ ๋ผ์šฐํŒ…์„ ์ง์ ‘ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์„ค์ •์ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Œ.
  • ํ•™์Šต ํ•„์š”: JSX ๋ฌธ๋ฒ•๊ณผ React Hooks๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„ ํ•„์š”.

์‚ฌ์šฉ ์‚ฌ๋ก€

  • ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ, ๋Œ€๊ทœ๋ชจ SPA(Single Page Application)
  • ์˜ˆ์‹œ: Facebook, Instagram, Airbnb

Vue.js ๐ŸŒŸ2

Vue.js๋Š” Evan You๊ฐ€ ๊ฐœ๋ฐœํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐ„๊ฒฐํ•จ๊ณผ ๊ฐ•๋ ฅํ•จ์„ ๊ฒธ๋น„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ.

์ •๋ง ์ง๊ด€์ ์ด๋‹ค.

์žฅ์ 

  • ์‰ฌ์šด ํ•™์Šต: HTML, CSS, JavaScript๋งŒ ์•Œ๋ฉด ๋ฐ”๋กœ ์‹œ์ž‘ ๊ฐ€๋Šฅ.
  • ๋ฐ˜์‘์„ฑ: Vue์˜ ๋ฐ˜์‘ํ˜• ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ๊ณผ ์ปดํฌ๋„ŒํŠธ ์‹œ์Šคํ…œ์€ ์ง๊ด€์ .
  • ๊ฒฝ๋Ÿ‰: ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚จ.

๋‹จ์ 

  • ์ปค๋ฎค๋‹ˆํ‹ฐ ํฌ๊ธฐ: React๋‚˜ Angular์— ๋น„ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ƒํƒœ๊ณ„๊ฐ€ ์ž‘์•„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ํƒ ํญ์ด ์ข์Œ.
  • ๋ณต์žก์„ฑ ์ฆ๊ฐ€: ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ.

์‚ฌ์šฉ ์‚ฌ๋ก€

  • ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ, ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘
  • ์˜ˆ์‹œ: Alibaba, Xiaomi, Behance

Angular โš™๏ธ3

Angular๋Š” Google์—์„œ ๊ฐœ๋ฐœํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ ์™„์ „ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•œ๋‹ค.

๊ทœ์น™์ด ๋งŽ์ง€๋งŒ ์•ˆ์ •์ ์ด๋‹ค.

์žฅ์ 

  • ๋‚ด์žฅ ๊ธฐ๋Šฅ: ๋ผ์šฐํŒ…, ์ƒํƒœ ๊ด€๋ฆฌ, HTTP ํด๋ผ์ด์–ธํŠธ ๋“ฑ ๋ชจ๋“  ๊ฒƒ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ์ถ”๊ฐ€ ์„ค์น˜๊ฐ€ ํ•„์š” ์—†์Œ.
  • ์˜์กด์„ฑ ์ฃผ์ž…: ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ž„.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ: ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋กœ ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒํ•˜์—ฌ ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜ ์‚ฌ์ „ ๋ฐฉ์ง€ ๊ฐ€๋Šฅ.

๋‹จ์ 

  • ํ•™์Šต ๊ณก์„ : ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” ๋ณต์žกํ•œ ๊ตฌ์กฐ์™€ ๋ฌธ๋ฒ•.
  • ๋ฌด๊ฑฐ์šด ํฌ๊ธฐ: ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Œ.

์‚ฌ์šฉ ์‚ฌ๋ก€

  • ๋Œ€๊ทœ๋ชจ ๊ธฐ์—… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋ณต์žกํ•œ ๋Œ€์‹œ๋ณด๋“œ
  • ์˜ˆ์‹œ: Google Workspace, Upwork

๋น„๊ตํ‘œ: ๋น ๋ฅธ ๊ฒฐ์ •์ด ํ•„์š”ํ•˜๋‹ค๋ฉด?!

ํ”„๋ ˆ์ž„์›Œํฌ ํ•™์Šต ๊ณก์„  ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์› ์„ฑ๋Šฅ ์‚ฌ์šฉ ์‚ฌ๋ก€
React ์ค‘๊ฐ„ ๋งค์šฐ ๋†’์Œ ๋งค์šฐ ์ข‹์Œ ๋Œ€๊ทœ๋ชจ SPA, ์†Œ์…œ ๋ฏธ๋””์–ด
Vue.js ๋‚ฎ์Œ ์ค‘๊ฐ„ ์ข‹์Œ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ, ํ”„๋กœํ† ํƒ€์ดํ•‘
Angular ๋†’์Œ ๋†’์Œ ์ข‹์Œ ๋Œ€๊ทœ๋ชจ ๊ธฐ์—… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

React

  • ๋ฌธ์ œ: ์ƒํƒœ ๊ด€๋ฆฌ ๋ณต์žก์„ฑ.
    • ํ•ด๊ฒฐ: Context API์™€ React Hooks๋ฅผ ํ™œ์šฉํ•ด ์ƒํƒœ๋ฅผ ๊ฐ„๋‹จํžˆ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ Redux ์‚ฌ์šฉ.
  • ๋ฌธ์ œ: ์„ฑ๋Šฅ ์ €ํ•˜.
    • ํ•ด๊ฒฐ: React.memo์™€ useMemo๋ฅผ ์‚ฌ์šฉํ•ด ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์ง€.

Vue.js

  • ๋ฌธ์ œ: ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ”๋“œ ๊ตฌ์กฐ๊ฐ€ ํ˜ผ๋ž€์Šค๋Ÿฌ์›€.
    • ํ•ด๊ฒฐ: Vuex๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๋ฅผ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ด€๋ฆฌ.
  • ๋ฌธ์ œ: ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ.
    • ํ•ด๊ฒฐ: ์ตœ์‹  Vue ๋ฒ„์ „์— ๋งž๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ.

Angular

  • ๋ฌธ์ œ: ๋А๋ฆฐ ์ดˆ๊ธฐ ๋กœ๋“œ.
    • ํ•ด๊ฒฐ: Lazy Loading๊ณผ Tree Shaking์„ ํ™œ์šฉํ•ด ๋ฒˆ๋“ค ํฌ๊ธฐ ์ค„์ด๊ธฐ.
  • ๋ฌธ์ œ: ๋ณต์žกํ•œ ์˜์กด์„ฑ ์ฃผ์ž….
    • ํ•ด๊ฒฐ: ๋ชจ๋“ˆ๊ณผ ์„œ๋น„์Šค๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ์œ ์ง€.

ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ฅธ ์ถ”์ฒœ

  1. ์ž‘์€ ํ”„๋กœ์ ํŠธ (์˜ˆ: To-do List, ๊ฐ„๋‹จํ•œ ๋ธ”๋กœ๊ทธ)

    • ์ถ”์ฒœ: Vue.js
    • ์ด์œ : ๊ฐ„๊ฒฐํ•œ ๊ตฌ์กฐ์™€ ์‰ฌ์šด ํ•™์Šต.
  2. ์ค‘๊ฐ„ ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ (์˜ˆ: eCommerce, ํฌํŠธํด๋ฆฌ์˜ค ์›น์‚ฌ์ดํŠธ)

    • ์ถ”์ฒœ: React
    • ์ด์œ : ์œ ์—ฐ์„ฑ๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›.
  3. ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ (์˜ˆ: ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)

    • ์ถ”์ฒœ: Angular
    • ์ด์œ : ์™„์ „ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋‚ด์žฅ ๋„๊ตฌ ์ œ๊ณต.

๊ฒฐ๋ก 

ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•  ๋•Œ๋Š” ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ํŒ€์˜ ์—ญ๋Ÿ‰์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

์ž‘์€ ํ”„๋กœ์ ํŠธ๋ผ๋ฉด Vue.js๋กœ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ , ์ค‘๊ฐ„ ๊ทœ๋ชจ๋ผ๋ฉด React๋กœ ์œ ์—ฐํ•œ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋Œ€๊ทœ๋ชจ๋ผ๋ฉด Angular๋กœ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–จ๊นŒ?

React, Vue, Angular๋ฅผ ๋ชจ๋‘ ๋น„๊ตํ•œ ์ด ๊ธ€์ด ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ ์„ ํƒ์— ๋„์›€์ด ๋˜๊ธธ..!


@leekh8
Hello :)