[ MVC Structure ] Model-View-Controller 구조 패턴의 이해

MVC 구조란 Model, View, Controller등 3가지 요소로 구성된 구조의 개발 패턴을 의미한다. 이 MVC패턴을 사용하면 애플리케이션을 구성하는 시각적 요소와 데이터간 간섭 없이, 각각의 요소를 독립적으로 개발 함으로서 각 요소의 재사용이 가능할 뿐만 아니라, 유지보수에 있어서도 큰 이점이 있다.

MVC구조 패턴 각 구조의 역할은 다음과 같다.

1. Controller : 모델에 명령을 전달하여 상태를 변경하거나,  view에 명령을 전달하여 프리젠테이션을 변경하는 역할을 한다. 이때 view의 상태를 읽어 model에 전달하거나, model의 상태를 읽어 view에 전달하는 역할도 포함한다.
2. Model : 상태변화가 있을 때 이를 controller나 view에 통보하는 역할을 한다. 이 과정을 통해 view는 최신의 결과물을 프리젠테이션 할 수 있게 되며, model은 갱신된 data를 보관하게 된다.
3. View : 사용자에게 프리젠테이션 할 결과물을 생성하는 역할을 수행한다.

사용자를 중심으로 이 패턴을 다시 한번 정리하면 다음과 같다.
사용자가 browser를 통해 data를 요청하면, controller는 이를 받아 필요한 data를 model모듈로부터 받아 view에 전달하게 되며, view에서는 이 data를 browser를 통해 사용자가 볼 수 있도록 해준다. 이 과정을 진행하는 동안 보관해 두어야 할 data가 발생하면, controller는 이를 model에 전달하여 처리하게 된다.
즉 controller, model, view는 각각 logic, data, view를 담당하게 되며, 각각의 역할 범위를 명확히 하여 서로의 영역을 침범하지 않는 개발 방법을 MVC구조 패턴에 의한 개발이라고 할 수 있다.

[ MVC 패턴 개발 가이드 라인 ]
1. model은 애플리케이션 내부 data 및 view에 제공할 data만을 보관한다.
2. view는 유저에게 보여질 화면에 표시될 시각적 UI요소만을 보관한다.
3. controller는 model과 view를 연결하는데 필요한 logic만을 보관한다.
4. model은 사용자에게 보여질 모든 data를 가지고 있어야  한다.
5. view는 model이 보관하고 있거나, 보관하게 될 어떠한 data도 별도로 보관하지 말아야 한다.
6. view는 controller가 담당해야 하는 logic을 view내부에서 처리하지 말아야 한다.
7. controller는 model이나 view의 변동사항을 모니터링 할 수 있어야 한다.

즉 model, view, controller 각각의 요소들은 자신의 역할 이외에 상대방의 어떤 logic이나 data도 가지고 있어서는 안된다는 것 이다.
그 이유는 이렇게 역할이 명확히 구분되어 있어야만 기능의 추가, 오류 등이 발생하는 상황에서도 해당 부분만을 개발, 수정하여 생산성을 높일 수 있기 때문이다.