MVC 란?
Model - View - Controller
로 나뉘는 프로그램 설계 패턴이다.
→ 프로그램 설계 패턴에는 단방향 데이터 흐름이나, Flux 패턴 등이 있다.
View
를 통해 표시된 데이터를 사용자가 조작하게 되면, Controller
를 통해 Model
에서 데이터를 가져오게 되고, 해당 데이터를 다시 View
를 통해 사용자에게 전달하는 것을 말한다.
- 하나의 코드에서 입력과 출력을 전부 처리하는 것이 아니라, 각각의 역할을 관심사 분리하는 것.
Model
- 실질적인 데이터를 가지며, DB와 통신하여 데이터를 가져오거나,
Model
자체가 데이터를 가지고 있다.
Controller
가 요청한 내용에 따라 그에 맞는 데이터를 Controller
에게 다시 전달해준다.
View
와 직접적으로 대화하는 일은 많지않다.
- 식당에서의 주방과도 같다.
View
- 어떤 데이터를 받아 그 내용을 표시하는데 집중한다.
→ 다른 데이터를 저장하거나 하지 않는다.
Controller
에게 Action
을 전달하며, 전달 된 이후에는 어떤 과정이 일어나는지 알 수 없다.
→ 객체 지향 프로그래밍과 비슷
- 식당에서의 테이블과도 같다.
Controller
View
에서 어떤 Action, Input 등의 입력을 받으면, 해당 입력 데이터를 가공 후 Model
로 전달한다.
- 이후
Model
에서 출력이 전달되면, 해당 출력을 다시 가공하여 View
로 전달하게 된다.
→ 다리 역할
- 식당에서의 종업원과도 같다.
정리하자면...
- MVC 패턴은 각각
데이터 처리 및 DB 통신
, 데이터 표현 및 입력
, 가공 및 전달
의 역할을 관심사 분리 한것이다.
- 식당으로 치면,
- 우리는 테이블에 앉아서 메뉴판을 보고 종업원에게 주문을 한다.
→ 유저가 View
에서 Action을 발생시킴.
- 종업원은 해당 주문을 정리해서 주방에 전달한다.
→ Controller
가 해당 Action을 가공해 Model
로 전달함.
- 주방은 해당 내용에 따라 요리를 만든다.
→ Model
이 해당 데이터를 가공하거나, 조건에 맞는 데이터를 가져옴.
- 종업원은 만들어진 요리와 식기, 반찬등을 챙겨 우리의 테이블으로 전달한다.
→ Model
에게서 전달받은 데이터를 가공하여 View
로 전달한다.
- 우리는 테이블에 올려진 요리를 먹는다.
→ User 가 View
에서 전달된 데이터를 확인함.
+
- 이미 대다수의 서비스들에서 MVC 패턴을 이미 사용하고 있다.
- 혹은, 내가 어떤 문제를 해결하기 위해 어떤 기능을 분리시켰다면, 이미 해당 내용이 MVC와 일맥상통 할 수도 있다.