본문 바로가기

DEVELOP/Node.js

MVC 패턴이란 무엇인가?

반응형

MVCModel View Controller를 줄인말로, 사용자 인터페이스와 데이터 및 논리 제어를 구현할 때 사용되는 소프트웨어 디자인 패턴 중 하나이다. 간단하게 말하자면 개발을 할 때 3가지의 형태로 역할을 나누어서 개발을 하는 방식으로, 사용자 인터페이스로부터 비즈니스 로직을 분리하는 것에 가장 큰 중점을 두고 있다. 우리가 어떤 서비스가 돌아가게 하기 위해서는 여러 과정들과 처리가 필요한데, 그런 처리들에 대해 하나의 코드 베이스가 아닌 기능별로 모델, 뷰, 컨트롤러로 나누어주는 것이 MVC 패턴이라고 보면 된다. 이러한 분리를 통해 우리는 인터페이스와 비즈니스 로직 간에 서로 영향 없이 업데이트 및 유지보수가 가능한 애플리케이션을 만들 수 있다. MVC 컨셉을 사용하는 웹 프레임 워크는 Express, Laravel, Django, Ruby on Rails 등 굉장히 다양하다.

 

MVC Pattern

 

Model
자신이 데이터를 가지고 있거나, 혹은 데이터베이스와 연결되어 데이터를 가져올 수 있다. 프로그램에서 작업이 진행되기 위해 필요한 요소들에 대해 무엇을 처리할지 정의한다. 컨트롤러에서 모델에 데이터를 요청하거나 또는 모델에서 컨트롤러로 데이터를 반환할 수 있다. 뷰와 직접 연결되는 경우는 거의 없으며, 모델은 사용자에 어떻게 보일지에 대해 고려하지 않고 요청에 대해 응답하는 역할만을 수행해야 한다. 모델에서 일부 함수는 쿼리에 대한 상태 정보를 제공하고, 나머지 함수들은 상태를 수정하게 된다.
 모델은 DAO(Data Access Object, 데이터베이스에 실제로 접근하여 CRUD를 수행할 수 있는 객체)와 DTO(Data Transfer Object, 컨트롤러, 뷰 등 계층 간 데이터 교환을 위한 객체), 그리고 Service(비즈니스 로직을 담당, 컨트롤러에서 요청을 받으면 서비스에 전달한 후 로직을 처리한다.)로 나눌 수 있다. 
View
모델에서 처리한 데이터를 받아 유저가 바라보는 UI에 입출력 및 결과를 생성하기 위한 역할을 한다. 입출력 및 데이터의 양식들은 컨트롤러와 연관되어 결정되며, 뷰에서는 모델 또는 데이터베이스에 직접적으로 접근할 수 없다. 따라서 데이터의 저장이나 로직에 전혀 관계없이 그저 데이터 객체를 전달받고 변경을 처리하고 출력하는 이벤트에 대한 부분만을 담당해야 한다는 것이 가장 큰 특징이다. 
Controller
뷰와 모델을 연결시켜주는 중간 다리 역할을 하는 파트이며, 데이터를 어떻게 처리할 것인지를 정의한다. 클라이언트에게 요청을 받았을 때 모델이 수행을 할 수 있도록 호출하여 프로그램의 작동에 대해 제어한다. 컨트롤러에서는 사용자에 접근에 따라 요청을 파악한 후 요청에 알맞은 데이터를 모델에 요청하게 된다. 또한 모델을 호출할 때, 넘겨주는 데이터에 대해 전달이 쉽도록 데이터를 가공하는 역할도 한다. 모델에서 데이터를 컨트롤러로 반환하면 컨트롤러에서는 다시 해당 데이터를 뷰에 반영하여 사용자에게 알릴 수 있도록 한다.

Reference

https://developer.mozilla.org/ko/docs/Glossary/MVC
https://samslow.github.io/development/2020/06/16/Design_pattern-MVC/

 

반응형

'DEVELOP > Node.js' 카테고리의 다른 글

[Auth] Session과 Token은 서로 절충 가능한가?  (0) 2021.06.16
[Authentication] Cookie/Session  (0) 2021.04.14