중, 고등학교 미술 시간 그림을 그릴 때 우리는 '구도'에 대해 배웠고, 이를 활용하여 그림을 그렸던 기억이있다. 컴퓨터 프로그램을 만들 때도 '구도', 전문용어로 '디자인 패턴'이 중요하다. 디자인 패턴은 건축으로 치면 공법에 해당하는 것으로 소프트웨어의 개발 방법을 공식화 한 것이다. 소수의 뛰어난 엔지니어가 해결한 문제를 다수의 엔지니어들이 처리할 수 있도록 한 규칙이면서, 구현자들 간의 커뮤니케이션의 효율성을 높이는 기법이다. (위키피디아 참고)
웹 서비스를 디자인하는데 자주 사용되는 여러 디자인 패턴들이 있다. 자주 사용되는 만큼 검증된 내용들이고, 웹 서비스를 효율적으로 운영하는 것을 도와준다. 오늘은 그 디자인 패턴들에 대해 알아보고자 한다. (Model과 View를 어떻게 연결 지으냐에 따라 각 패턴이 나뉘게 된다.)
MVC (Model View Controller)
View는 웹 서비스 사용자들에게 직접적으로 보여지는 부분을 다루는 요소이다. 클라이언트가 브라우저 상에서 볼 수 있는 부분들, 즉 외관을 구성하는 요소들을 아우른다. 키워드 첫 부분에 설명한 웹 페이지 표현 요소들인 HTML, CSS, JavaScript 등의 파일들이 이에 속한다.
- Controller (컨트롤러)
Controller는 Model과 View 중간에서 둘 간의 상호작용을 중재하는 요소이다. 쉽게 말하면 Model이 관리하는 DB에 저장된 데이터들을, 웹 브라우저 즉, View 창에 띄워주는 역할을 한다.
즉, Controller는 클라이언트의 URL 요청을 받아(입력을 담당한다) 웹페에지를 보여주고자 하는데, 그 과정에서 필요한 데이터를 얻기 위해 Model에게 데이터를 요청하고, Model이 DBMS를 조작하여 해당 데이터를 찾아와 Controller로 전달해주면, Controller는 이 데이터를 해당 웹페이지의 View에 반영한 뒤 클라이언트 측으로 제공하는 것이다.
(출처: http://coding-dragon.tistory.com/4)
위 그림과 같이 모든 입력은 Controller가 받아서 처리한다. 입력이 들어오면 Controller는 입력에 해당하는 Model을 업데이트하고, Model을 표현해 줄 View를 선택한다. 하나의 Controller는 여러개의 View를 가질 수 있으며, Controller는 여러개의 View를 선택하여 Model을 표형할 수 있다. 반대로 View는 Controller에서 어떤 동작이 일어나는지 알수 없다.
이때 Controller는 View를 선택할 뿐 직접 업데이트 하지 않기 떄문에, 주로 다음과 같은 방법을 통해 View를 업데이트 한다.
View가 Model을 직접 사용하여 업데이트
Model에서 View에게 Notify해 주는 방법
View에서 Polling하여 Model의 변화를 받아오는 방법
참고
- 코드라이언 (http://www.codelion.net)
MVP (Model View Presenter)
참고 및 인용
MVVM (Model View ViewModel)
MVP에서 Presenter와 View가 의존 관계에 있었다면, MVVM에서 View와 ViewModel은 독립적인 관계를 형성한다. MVP와 마찬가지고 View는 Client로부터 입력을 받고, ViewModel은 Presentation logic을 처리하여 View에 데이터를 전달하는 역할을 한다.
각각의 View는 자신이 사용할 ViewModel을 선택하며, ViewModel은 Model을 베이스로 Presentation Logic에 따라 서로 다르게 구현된다. 따라서 View에 어떤 ViewModel을 연결하느냐에 따라 로직 처리가 달라지고, 각 로직 처링 따라 Model이 변경되면 해당하는 ViewModel을 사용하는 View가 자동으로 업데이트된다.
결론
- 재사용 및 유지/보수에 용이하다.
- HTML을 직접 다룰 수 있어 반응형 웹과 모바일 디바이스 지원 측면에서 좋은 전략을 세울 수 있다.
- 분업에 용이하다.
- URL 라우팅이 유용하고, 어떻게 구성하고 해석할지 쉽게 정할 수 있다.
- 시스템에 다른 부분을 변경하지 않으면서 UI를 쉽게 변경할 수 있다.
- 현재 사용하는 DB를 다른 환경으로 옮길지라도 룰에는 영향이 없다.
- 각 요소가 서로 독립적이다.
'IT & 개발 > 웹키워드' 카테고리의 다른 글
[웹키워드#6] MEAN Stack (MongoDB, Express, AngularJS, node.js) (0) | 2016.12.29 |
---|---|
[웹키워드#5] Framework (Framework7, Spring) (0) | 2016.12.28 |
[웹키워드#3] Chrome V8, Non-blocking I/O, Event Loop (0) | 2016.12.27 |
[웹키워드#2] Javascript, JQuery, DOM Parser (0) | 2016.12.27 |
[웹키워드#1] HTML, CSS, SASS, SCSS (0) | 2016.12.26 |