"매 UI architecture 의 1979 ancestor". Trygve Reenskaug 의 Smalltalk-80 — Model (data/logic), View (presentation), Controller (input mediation) 의 separation of concerns. 2026 에서 pure MVC 는 server-side framework (Rails, Django, Laravel, ASP.NET) 의 mainstay 이지만 frontend 는 매 MVVM (Vue), Flux/Redux (React), Component-driven (Svelte/Solid) 으로 evolve.
매 핵심
매 3 components
Model: domain data + business logic. Persistence, validation, invariants.
View: rendering. 매 read-only view 의 model state.
Controller: user input 의 handler. Model mutation + view selection.
매 information flow (classic Smalltalk)
User → Controller (input event).
Controller → Model (update).
Model → View (notify, observer pattern).
View → renders updated state.
매 modern variants
MVP (Model-View-Presenter): View 의 passivity 강화, presenter 가 view 를 directly drive.
MVVM (Model-View-ViewModel): ViewModel 의 binding 으로 View 의 declarative connect (Vue, Knockout, WPF).
Flux/Redux: unidirectional flow — Action → Store → View.
Component-driven: 매 unit 이 self-contained (React, Svelte) — MVC boundary 의 dissolve.
매 응용
Server-side web frameworks (Rails, Django, Laravel, Spring MVC).
@Controller@RequestMapping("/articles")publicclassArticleController{@AutowiredArticleServiceservice;@GetMapping("/{id}")publicStringshow(@PathVariableLongid,Modelmodel){Articlea=service.findById(id);model.addAttribute("article",a);return"articles/show";// resolves to articles/show.html}}
// 매 BAD — controller 가 매 business logic + data access + rendering 다 처리
classArticleController{asynccreate(req,res){// validation, db query, email send, audit log, render — 200 lines
}}// 매 GOOD — service layer 분리
classArticleController{asynccreate(req,res){constarticle=awaitthis.service.publish(req.body,req.user);res.render("article/show",{article});}}
매 결정 기준
상황
Approach
Server-rendered web app, CRUD heavy
Classic MVC (Rails, Django, Laravel).
SPA, complex interactive UI
Component-driven (React, Vue, Svelte).
Two-way binding, form-heavy
MVVM (Vue, WPF).
Strict unidirectional, time-travel debug
Flux / Redux.
Native mobile (iOS/Android)
MVVM 또는 MVI (modern preferred over MVC).
Microservice without UI
매 MVC 부적합 — Hexagonal/Clean.
기본값: server-side full-stack 은 매 MVC framework. SPA 는 매 component model + state library.
언제: server-side framework choice, legacy MVC refactor, UI architecture comparison.
언제 X: 매 modern SPA architecture (component-driven 이 dominant), microservice 의 service-internal 구조.
❌ 안티패턴
Fat Controller: 매 business logic 의 controller dump — service layer 로 분리.
Anemic Model: 매 model 이 data bag, logic 이 service 에. DDD aggregate 로 보강.
View 의 logic: 매 template 의 conditional/loop 이 매 business decision — model/presenter 로 push.
Controller-View tight coupling: 매 controller 가 매 specific view path hardcode — view selection abstraction.
MVC for SPA: 매 React app 에 backend MVC 강제 적용 — component model 이 fit.