디자인패턴
MVC 패턴 파헤치기
작취
2023. 12. 4. 20:42
반응형
오늘은 수많은 디자인 패턴 중 MVC 패턴에 대해 알아보자
MVC 패턴이란?
- 소프트웨어 설계와 관련된 디자인 패턴이다.
- Model View Controller의 약자이다.
- 특정 프레임워크나 라이브러리를 지칭하는것이 아니라 소프트웨어가 작동하는 패턴을 의미한다.
- Laravel PHP, Django Python, Express JS, Angular JS 등이 MVC 패턴을 띄고있다.
MVC패턴 구조
간단하게 설명하자면 위 그림과 같다.
사용자가 Controller에 요청사항을 보내게 되면
Controller는 Model로 요청사항을 전달하고
Model에서는 요청사항에 따라 DB에 접근하여 내용을 수정하거나 꺼내서 Controller로 다시 보낸다
Controller는 변경된 부분을 View에게 전달하고
View는 변경된 사항을 화면에 출력해 보여줄 수 있게 만들고 다시 Controller로 보내게 된다.
Controller는 이것을 사용자에게 보여주고 사용자가 원하는 결과를 얻을 수 있게하는것이 MVC패턴의 기본 구조이다.
이제 모델, 컨트롤러, 뷰에 대해 각각 자세히 알아보자
Model?
모델은 애플리케이션의 정보, 데이타를 나타낸다. DB, 처음의 정의하는 상수, 초기화값, 변수 등을 뜻하며 이러한 정보들을 가공하는 컴포넌트를 의미한다.
모델의 가장 핵심적인 규칙은 다음과 같다
- 사용자가 편집하거나 원하는 데이터를 전부 가지고 있어야한다. (사용자가 보는 화면에 있는 모든정보가 모델에 들어있어야 한다)
- 컨트롤러와 뷰에 대한 정보를 가지고있으면 안된다. (데이터변경이 일어났을때 직접적으로 뷰를 수정할 수 없어야함)
- 데이터 변경이 일어나면 변경을 알리는 시스템이 갖춰져야 한다. (컨트롤러에 알리는 시스템을 말하는듯?)
View?
뷰는 사용자가 직접적으로 볼수 있는 인터페이스적 요소를 말한다. 일반적으로 데이터를 입력하는 창이나, 출력하여 보여주는 창이 이에 해당한다.
뷰의 가장 핵심적인 규칙은 다음과 같다
- 데이터를 보여줄 때 단순히 출력만 해야지 데이터값을 임의로 뷰 내부에 저장하면 안된다.
- 모델과 컨트롤러에 대한 정보를 가지고있으면 안된다. (그냥 각자 할일만 잘하자 넌 출력만 하면돼)
- 입력이 발생했을때 컨트롤러에 전달할 수 있는 시스템을 갖춰야 한다.
Controller?
컨트롤러는 데이터와 인터페이스 즉, 모델과 뷰를 이어주는 다리역할을 한다.
컨트롤러의 가장 핵심적인 규칙은 다음과 같다
- 모델과 뷰 모두에 대해 알고있어야한다. (이놈이 중간다리역할이니까 당연히 알아야겠지?)
- 모델이나 뷰를 항상 모니터링 하면서 데이터 변경에 대한 신호를 받아야한다. (사실상 이놈이 메인 로직)
MVC 패턴 장단점?
장점
- 역할에 따라 분리가 되어있기때문에 디자이너와 개발자간의 협업이 쉽다.
- 서로 분리되어 있어 유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩이라는 문제점 또한 사라지게 된다.
단점
- Model과 View의 완벽한 분리가 어렵다. (컨트롤러가 중재해주긴 하지만 서로 의존적인 관계이다)
- 대규모 프로젝트에서는 설계가 복잡해질 수 있어서 부적합하다.
- Controller의 역할이 너무 커져서 모듈화하는 부분이 무의미해질 수 있다.
반응형