본문 바로가기
Web

[Spring] MVC Pattern

by DuncanKim 2022. 7. 26.
728x90

[Spring] MVC Pattern

 

 

1. MVC란?

 

기초적인 동적 웹은 php 파일과 같이 한 형태의 파일 안에서 데이터베이스에 접속하고, html을 구현하고 css를 구현하고 해서 나타낼 수가 있다. 하지만, 간단한 게시판 정도가 아니라 거대한 Naver, Daum과 같은 페이지를 관리해야 한다면? 요소와 기능들이 많아지고 구조가 이것저것 얽히면서 하나의 파일 안에 든 코드들이 난잡하게 되어 버린다.

 

거대해지고 복잡해질 때는 분리, 모듈화를 해주어야 한다. 하나의 모듈이 하나의 일을 하고 그것들이 합쳐져서 전체적 서비스로 보이게 해야 하는 것이다. 국가의 기능은 입법, 사법, 행정으로 나뉘듯이, 웹 사이트에서는 기능을 "Model, View, Controller" 세 가지로 나눌 수 있다.

Spring은 MVC 패턴을 준수한다. MVC는 디자인 패턴 중에 하나이며, MVC1 패턴과 MVC2 패턴이 존재한다.

 

MVC를 간단히 보자면 위와 같은 구조도로 설명할 수 있다.

각각 하는 역할만 수행을 하고, 분할하여 검색 결과를 사용자에게 알려주는 것이다.

 

컨트롤러는 '중개자' 역할을 한다. 모델은 데이터와 관련된 부분을 담당하고 뷰는 사용자에게 보여지는 부분을 담당한다.

 

 

2. MVC를 지키면서 코딩하는 방법

 

1) Model은 Controller와 View에 의존하지 않아야 한다.

 

모델 내부에 컨트롤러와 뷰와 관련된 코드가 있으면 안된다.

 

 

2) View는 Model에만 의존해야 하고, Controller에는 의존하면 안 된다.

 

View 내부에 Model의 코드만 있을 수 있고, Controller의 코드가 있으면 안 된다.

 

 

3) View가 Model로부터 데이터를 받을 때는 사용자마다 다르게 보여주어야 하는 데이터만 받아야 한다.

 

View는 사용자에게 전달해야 할 UI와 Model로부터 받은 정보가 합쳐져서 만들어진 화면이다.

사용자 별로 표시를 해야 할 이름, 주소, 전화번호 등의 데이터만 받아야 하고, 

모든 사용자에게 동일하게 보여주어야 할 템플릿과 같은 UI는 모델로부터 받으면 안 된다.

 

 

4) Controller는 Model과 View에 의존해도 된다.

 

Controller 내부에는 Model과 View의 코드가 있을 수 있다.

 

 

5) View가 Model로부터 데이터를 받을 때, 반드시 Controller에서 받아야 한다.

 

View가 Model의 코드를 받기 위해서는 Controller 코드 안에서만 받아야 한다.

 

 

 

3. MVC1과 MVC2

 

1) MVC1

 

MVC1 패턴의 경우, View와 Controller를 모두 JSP가 담당하는 형태를 가진다. Java Bean이 Model을 담당한다.

 

JSP 하나로 유저의 요청을 받고 응답을 처리하기 때문에 구현 난이도는 쉬운 편이다.

그렇지만, 단순한 프로젝트에는 적합하지만, 내용이 복잡해지고 거대해질수록 패턴의 활용도가 떨어지게 된다. JSP 하나에서 MVC가 모두 이루어지기 때문에 재사용성도 떨어지고 코드의 가독성도 떨어진다. 유지보수에 있어서 문제가 발생하는 것이다.

 

 

2) MVC2

 

MVC 2 패턴은 표준으로 사용되는 패턴이다. 요청을 하나의 컨트롤러(Servlet)가 먼저 받는다. Controller와 View는 분할되어 있으며, MVC 1에서 단점을 보완할 수 있다. M, V, C 중에 수정할 것이 있다면, 그것만 수정을 하면 된다.

 

구현 난이도가 어렵지만, 사용을 할 때 유지보수의 이점으로 인해 이것을 표준으로 사용하고 있다.

 

패턴 구조가 MVC1 보다는 복잡해지겠지만, 개발자가 세부 구성까지 손대지 않아도 되게끔 각종 프레임워크들이 발달해있는데, 이 중 하나가 스프링 프레임워크이다.

 

 

728x90

댓글