๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘ฉ‍๐Ÿ’ป ๊ฐœ๋ฐœ ๊ณต๋ถ€

[React] MVC vs MVVM : ํ•œ๋ˆˆ์— ๋น„๊ตํ•˜๊ธฐ

728x90

 

์š”์ฆ˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ๊ณต๊ณ  ์šฐ๋Œ€์‚ฌํ•ญ์„ ๋ณด๋ฉด, 'MVC, MVVM์— ๋Œ€ํ•œ ์ดํ•ด'๋ฅผ ์š”๊ตฌํ•˜๊ณ ๋Š” ํ•œ๋‹ค.

๊ทธ๋Ÿผ ์–ด๋–กํ•ด? ๊ณต๋ถ€ํ•ด์•ผ์ง€~!!


MVC, MVVM ์•„ํ‚คํ…์ฒ˜๋ž€?

 

์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

MVC(Model-View-Controller)์™€ MVVM(Model-View-ViewModel)์€,

ํ”„๋ก ํŠธ์—”๋“œ์—์„œ UI์™€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ.

 

1. MVC (Model-View-Controller)

 

Model (๋ชจ๋ธ): ๋ฐ์ดํ„ฐ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง (์˜ˆ: API, DB ๋ฐ์ดํ„ฐ)

View (๋ทฐ): ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” UI (์˜ˆ: HTML, ํ™”๋ฉด)

Controller (์ปจํŠธ๋กค๋Ÿฌ): Model๊ณผ View๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํ๋ฆ„์„ ์ œ์–ด (์˜ˆ: ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ)

 

โœ… ํŠน์ง•:

ํ”„๋ก ํŠธ์—”๋“œ๋ณด๋‹ค๋Š” ๋ฐฑ์—”๋“œ(Spring, Django ๋“ฑ)์—์„œ ๋งŽ์ด ์‚ฌ์šฉ

์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ค‘์‹ฌ์ด ๋˜์–ด Model๊ณผ View๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• 

 

class Model {
  constructor() {
    this.data = "Hello, MVC!";
  }
}

class View {
  render(data) {
    console.log("View: ", data);
  }
}

class Controller {
  constructor(model, view) {
    this.model = model;
    this.view = view;
  }

  updateView() {
    this.view.render(this.model.data);
  }
}

const model = new Model();
const view = new View();
const controller = new Controller(model, view);

controller.updateView();

 

 

2. MVVM (Model-View-ViewModel)

 

Model (๋ชจ๋ธ): ๋ฐ์ดํ„ฐ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง

View (๋ทฐ): ์‚ฌ์šฉ์ž UI (HTML, ํ™”๋ฉด)

ViewModel (๋ทฐ๋ชจ๋ธ): View์™€ Model ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ ๋ฐ ๊ด€๋ฆฌ (React์˜ ์ƒํƒœ๊ด€๋ฆฌ ์—ญํ• )

 

โœ… ํŠน์ง•:

React, Vue.js ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ

ViewModel์ด ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ UI ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹ด๋‹น → ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด ์‰ฌ์›€

 

import { useState } from "react";

function ViewModel() {
  const [message, setMessage] = useState("Hello, MVVM!");

  return (
    <div>
      <p>{message}</p>
      <button onClick={() => setMessage("MVVM ๊ตฌ์กฐ ์—…๋ฐ์ดํŠธ!")}>ํด๋ฆญ</button>
    </div>
  );
}

 

mvc์™€ mvvm์˜ ์ฐจ์ด์ 

 

 

๋ญ”๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์–ด๋ ต๋‹ค.. ๋น„์œ ๋ฅผ ํ†ตํ•ด์„œ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•ด๋ณด์ž.


๐Ÿ• ํ”ผ์ž๊ฐ€๊ฒŒ๋กœ ๋น„์œ ํ•˜๋ฉด?

 

1. MVC (Model-View-Controller)

โžก๏ธ ์ฃผ๋ฌธ์„ ๋ฐ›๋Š” ์ง์›(Controller)์ด ์ฃผ๋ฐฉ(Model)๊ณผ ์†๋‹˜(View) ์‚ฌ์ด๋ฅผ ์กฐ์œจํ•จ

 

๐Ÿ“Œ ํŠน์ง•

- ์†๋‹˜(View)์€ ์ง์ ‘ ์ฃผ๋ฐฉ(Model)๊ณผ ์†Œํ†ตํ•  ์ˆ˜ ์—†์Œ

- ์ง์›(Controller)์ด ๋ชจ๋“  ์š”์ฒญ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐ์œจํ•ด์•ผ ํ•จ

 

 

2. MVVM (Model-View-ViewModel)

โžก๏ธ ์†๋‹˜(View)์ด ํ‚ค์˜ค์Šคํฌ(ViewModel)๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์ฃผ๋ฌธํ•˜๊ณ , ์ฃผ๋ฐฉ(Model)์ด ์•Œ์•„์„œ ์š”๋ฆฌ

 

๐Ÿ“Œ ํŠน์ง•

ํ‚ค์˜ค์Šคํฌ(ViewModel)๊ฐ€ ์ฃผ๋ฌธ์„ ์ž๋™์œผ๋กœ ์ฃผ๋ฐฉ(Model)๊ณผ ์—ฐ๊ฒฐํ•˜๊ณ , ์ž๋™์œผ๋กœ ์†๋‹˜์—๊ฒŒ ์ฃผ๋ฌธ ์ƒํƒœ ์—…๋ฐ์ดํŠธ

์ง์›(Controller) ์—†์ด ๋ฐ์ดํ„ฐ์™€ UI๊ฐ€ ๋™๊ธฐํ™”๋จ (Model - View Data Binding)

 


์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

- MVC: Controller๊ฐ€ ์ˆ˜์ž‘์—…์œผ๋กœ View์™€ Model์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•จ

- MVVM: ViewModel์ด ์•Œ์•„์„œ View์™€ Model์„ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐํ•ด์คŒ (React์˜ ์ƒํƒœ๊ด€๋ฆฌ์ฒ˜๋Ÿผ!)

 

๋‹น์—ฐํ•˜๊ฒŒ๋„ ์ตœ๊ทผ์—๋Š” React๋‚˜ Vue๋ฅผ ๋งŽ์ด ์“ฐ๋‹ˆ MVVM์ด ์š”์ฆ˜ ๋Œ€์„ธ์ธ๋“ฏ ใ…Ž.ใ…Ž

 

728x90