[Design Pattern] MVC 패턴

Kozel·2022년 11월 22일
1
post-thumbnail

MVC 패턴이란?

MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. MVC 패턴은 소프트웨어의 비즈니스 로직와 화면을 담당하는 뷰 부분을 구분하는데 중점을 두고 있습니다. 이러한 분리는 효율적인 유지보수를 제공합니다.

MVC 패턴은 결국 "어떻게 나눌 것인가"에 대한 해답 중 하나입니다.

MDN의 MVC 패턴 설명에 따르면 MVC의 세가지 역할은 다음과 같습니다.

  • Model: 데이터와 비즈니스 로직을 관리합니다.
  • View: 레이아웃과 화면을 처리합니다.
  • 컨트롤러: 명령을 모델과 뷰 부분으로 라우팅합니다.

세가지 역할의 관계성을 그림으로 나타낸다면 다음과 같습니다.

여기서 서비스를 사용하는 user를 추가하면? 다음과 같을 것입니다.

MVC 패턴은 정해진 하나의 형식만 있는것은 아니므로 위의 관계도가 정답은 아니지만 전체적은 흐름을 파악하는데는 문제없어 보입니다.

흐름은 이렇습니다.
1. View에서 user에 정보를 제공
2. user은 Controller에 새로운 정보를 입력 및 요구
3. Controller은 입력 사항을 Model에 전달
4. Model은 입력 사항을 반영한 정보를 View에 전달
5. View는 전달받은 정보를 user에 제공


흐름을 파악했다면 각각의 항목마다 자세하게 알아봅시다.



Model

애플리케이션의 정보, 데이터를 나타냅니다. 모델은 데이터베이스, 상수, 초기화값, 변수 등을 뜻하여 이러한 정보들의 관리는 책임지는 컴포넌트를 말합니다.

Model은 다음과 같은 규칙이 있습니다.

  1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
  2. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
  3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.

View

input 텍스트, 체크박스 항목, 여러 출력 사항 등과 같은 사용자 인터페이스 요소를 나타냅니다. 즉, 입력 및 출력을 담당하며 데이터를 기반으로 사용자들이 볼 수 있는 화면입니다.

View는 다음과 같은 규칙이 있습니다.

  1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
  2. 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다.
  3. 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.

Controller

데이터와 사용자인터페이스 요소, Model과 View를 잇는 다리역할을 합니다. 즉, 사용자가 데이터를 생성, 수정, 조회, 삭제 하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻합니다.

Controller는 다음과 같은 규칙이 있습니다.

  1. 모델이나 뷰에 대해서 알고 있어야 한다.
  2. 모델이나 뷰의 변경을 모니터링 해야 한다.


MVC 패턴의 방식

앞서 관계도를 설명하며 정답이 아니라고 언급했는데, MVC 패턴의 방식에는 크게 두가지가 있기 때문입니다.

  1. JSP에서 출력과 로직을 전부 처리
  2. JSP에서 출력만 처리

제가 설명한 관계도는 어떤 방식에 맞는지 알아봅시다.

JSP에서 출력과 로직을 전부 처리

모델 1 방식은 Controller 영역에 View 영역을 같이 구현하는 방식이며, 사용자의 요청을 JSP가 전부 처리합니다.

JSP에서 출력만 처리

이 방식은 클라이언트의 요청을 Controller가 받고 Controller는 해당 요청으로 View로 보여줄 것인지 Model로 보낼 것인지를 판단하여 전송합니다. 또한 이 방식은 Controller와 View를 분리해놓았기 때문에 앞선 방식에 비해 확장시키기도 쉽고 유지보수 또한 쉽습니다.

제가 설명드렸던 관계도는 'JSP에서 출력만 처리' 방식에 가까워 보입니다.


그렇다면 위 방식들의 장단점은 무엇일까요?

JSP에서 출력과 로직을 전부 처리JSP에서 출력만 처리
장점빠르고 쉽게 개발 가능분업이 가능하며 유지보수 및 확장에 용이
단점JSP 파일이 비대해지며 후에 유지보수 어려움설계와 개발 난이도가 어려움

어떤 방식을 선택해야 할지는 본인이 진행하는 프로젝트의 규모, 즉 분업을 할 수 있을 정도의 규모인지 판단하는게 중요하다고 생각합니다.

분업이 필요 할 정도로 큰 규모는 두번째 방식을 채용하고, 혼자서도 충분한 토이 프로젝트는 첫번째 방식을 채용해도 문제 없을거라고 보입니다.

하지만 제대로된 설계와 개발을 하고 싶다면 두번째 방식을 충분히 접하고 연습해 보는게 좋겠죠.



MVC 패턴을 사용해야하는 이유는?

MVC 패턴은 수많은 곳에서 쓰이고 있으며 대표적으로 다음과 같은 프레임워크 및 라이브러리가 있습니다.

  • AngularJS, codeigniter, django

어떤 일을 하던 일으 규모가 커질수록 분담을 하게 되면 효율적인 효과를 볼 수 있습니다. MVC 패턴도 마찬가지 입니다. 데이터를 관리하는 Model과 인터페이스를 담당하는 View, 앞의 두개를 연결하는 Controller로 분리하여 관리에 용이합니다.

MVC 패턴을 사용함에 따라 유지보수성, 애플리케이션의 확장성, 유연성이 증가하고 중복코딩의 문제점이 사라지게 됩니다.



MVC 패턴의 한계

Controller는 Model과 View의 중간다리 역할로 다수의 View와 Model을 가질 수 있습니다. 이때 Controller로 인해 연결된 View와 Model은 의존성을 띄며 연결된 수가 많아 질 수록 Contorller의 복잡성은 증가하여 관리에 어려움이 있을 수 있습니다.



참고 자료

profile
front-end developer

1개의 댓글

comment-user-thumbnail
2023년 3월 27일

mvc패턴을 왜 쓰는지 알수 있는 글이네여~

답글 달기