JSP Model1, JSP Model2, Spring MVC pattern
이번 시간에는 JSP Model1, JSP Model2, Spring MVC pattern에 대해서 알아보고 각각에 대해서 비교해보도록 하겠습니다. 해당 개념들은 Spring을 이해함에 있어서 대단히 중요한 개념이므로 이에 대해서 정확하게 이해하고 넘어가야할 필요성이 있습니다. 위에서 언급한 3가지 용어 JSP Model1, JSP Model2, Spring MVC pattern은 서로 모두 다른 용어인 것 같지만 서로 연관성을 가지고 있는 용어들입니다. 이에 대해서 한 번 알아보도록 하겠습니다.
우선 JSP Model에 대한 이야기를 하기에 앞서서 우선 Controller, Model, View라는 3가지 용어에 대해서 이해해야 합니다. 다음 3가지 용어는 JSP Model을 설명할 때 사용되는 용어로서 이 용어들을 이해해야 각 Model 별로 어떻게 구성요소를 나누는 지 이해하기 좋습니다.
용어 | 내용 |
Controller | 사용자 요청화면 처리, 화면의 로직처리 부분 |
Model | 알고리즘, DB와의 상호작용, 데이터 처리 |
View | 사용자에게 보여줄 UI(User Interface) |
JSP Model1
프로젝트를 JSP(Controller + View)와 Java Bean(Model)로 구성하여 개발하는 형태
JSP Model1은 1990년 ~ 2000년 초까지 웹 개발에 사용된 Architecture를 말하는 것으로서 JSP와 Java Bean으로 구성되어 있습니다. Model1의 경우 로직(Controller)과 화면(View)가 통합되어 있어서 유지보수가 어렵다는 특징이 있습니다. JSP Model1을 그림으로 표현하면 아래와 같습니다.
위의 그림에서도 확인할 수 있듯이 Model1은 Controller와 View가 결합되어 있는 형태로서 Model1의 구성요소인 JSP가 Controller와 View의 역할을, Java Bean이 Model의 역할을 담당하는 형태 입니다. Model1의 구성을 정리해보면 다음과 같습니다. (괄호로 표시된 부분은 이전에 공부했던 JSP를 이용한 CRUD 프로젝트에서 사용한 소스의 일부를 표시한 것 입니다.)
Model1 구성 | 파일 | 특징 | |
JSP Page | Controller | Servlet Class | 입력정보 추출 (String id = request.getParameter("userid");) Model class의 DB연동 함수 호출 (BoardDAO dao = new BoardDAO();) (BoardVO vo = dao.getList(sid);) 페이지 이동 (response.sendRedirect("list.jsp");) |
View | JSP Page | UI(User Interface) 담당 | |
Java Bean | Model | VO, DAO Class | DB 연동 |
이전에 JSP와 Mysql을 이용한 CRUD 프로젝트도 Model1을 기반으로 제작된 프로젝트 입니다. 해당 프로젝트에 대한 글과 소스를 확인하고 싶으시다면 아래의 링크로 이동해서 살펴보시기 바랍니다.
juyoungit.tistory.com/164?category=870308
juyoungit.tistory.com/182?category=870308
JSP Model1의 동작방식
그렇다면 개념적인 이해를 돕기 위해서 Model1의 동작방식을 간략하게 정리해보도록 하겠습니다.
위의 예시에서 Model1의 동작순서를 간략하게 정리해보면 다음과 같습니다.
1. 클라이언트가 웹 브라우져를 통해서 hello.jsp 파일 요청
2. 웹 서버가 요청을 받아서 hello.jsp에 대한 요청을 servlet(JSP) Container로 전달
3. 해당하는 JSP 파일을 실행
4. JSP와 Java Bean을 사용하여 클라이언트에게 response를 위한 html 문서를 구성
5. 요청이 들어왔던 곳으로 response
Model1에서는 Controller와 View의 기능을 JSP 페이지에서 포함하고 있다는 점을 꼭 기억하고 넘어가시기 바랍니다. 그리고 이어서 실제로 JSP Model1을 기반으로 제작된 프로젝트를 Tomcat 서버에서 실행할 때 어떤 절차를 거쳐서 실행되는 지 정리해보도록 하겠습니다.
위의 그림에서 파란색으로 표시된 사각형 부분이 우리가 이전에 로컬PC에 세팅했던 Tomcat 서버에서 수행하는 일이라고 보시면 됩니다.
Controller와 View가 결합되어 있는 형태라는 것은 한 파일에 같이 있다는 개념으로 이해해도 무방합니다. 그렇다면 위와 같은 구조를 가짐으로서 Model1이 가지게 되는 장점과 단점은 각각 무엇일까요? 그 내용은 아래와 같습니다.
장점 | 단점 |
개발속도가 빠르다 | 유지보수 측면에서 불리하다 |
규모가 작고 개발 후에 유지보수가 거의 필요없는 프로젝트에 적합 |
Model1의 경우 MVC 패턴처럼 각 Controller와 View를 구분하여 만들지 않고 하나로 만들기 때문에 일반적으로 개발속도가 MVC 패턴으로 설계하는 것에 비해서 그 속도가 빠르다는 장점이 있습니다. 그렇기 때문에 Model1은 규모가 작고 개발 후에 유지보수가 거의 필요없는 프로젝트에 적합합니다. 하지만 위와 같은 특징 때문에 유지보수 측면에서 불리한 부분이 단점입니다. 그래서 규모가 크고 개발 후에도 주기적으로 유지보수가 필요한 프로젝트에는 적합하지 않은 설계 방식 입니다.
JSP Model2(MVC Pattern)
프로젝트를 Model, View, Controller의 세 가지 요소로 모듈화하여 개발하는 개발형태의 일종
다음으로 Model2 입니다. Model2는 현재 Spring Framework가 사용하는 기본적인 구조로써 현재까지로 많이 사용되고 있는 형태 입니다. 하지만 MVC 패턴을 기반으로한 대규모의 애플리케이션을 개발하면서 한 Model이 여러 Controller에서 불려지는 등의 문제점들이 발생하면서 오히려 프로젝트의 형태가 굉장히 복잡해질 수 있다는 난관에 봉착하게 되었고 그래서 최근에는 이러한 문제를 해결하기 위해서 MVC 패턴 만이 아닌 다양한 형태의 새로운 패턴들이 발생하게 되었습니다.
Model2는 Model1과 달리 Controller, View, Model이 각각 자신이 수행하는 기능에 따라 분리되어 모듈화 되어 있는 것을 말합니다. 그리고 이 JSP Model2를 MVC Pattern 이라고 부르기도 합니다. Model2의 구조를 그림으로 표현하면 다음과 같습니다.
JSP Model2는 MVC Parttern과 같은 표현 입니다. 이글의 처음에서 언급한 JSP Model1, JSP Model2, MVC Pattern 3개의 용어의 관계를 다시 정리해서 표현해보면 JSP Model1, JSP Model2(= MVC Pattern)이라고 볼 수 있습니다. Model2의 구성을 표로 표현해보면 아래와 같이 표현할 수 있습니다.
구성 | 파일 | 특징 | 개발 |
Model | Service class Java Beans |
DB연동 데이터 가공 |
자바 개발자 |
View | JSP Page | UI(User Interface) 담당 Request 객체나 session 객체로 화면 출력 |
웹 디자이너 |
Controller | Servlet Class | 입력정보 추출 Model class의 DB 연동함수호출 페이지 이동 |
자바 개발자 MVC Framework |
즉, Model2는 모든 기능들이 완벽하게 분리되어 있고, 각 영역별로 개발을 수행하는 개발자들의 역할도 분리되어 있어서 동시에 여러 분야의 사람들이 개발을 수행할 수 있다는 장점이 존재합니다.
Model2의 동작방식을 그림으로 정리해보면 아래와 같습니다.
Model2를 위의 예시를 통해서 설명해보면 다음의 절차로 동작하게 됩니다.
1. 클라이언트가 웹 브라우져를 통해서 hello.jsp 요청
2. 웹 서버가 요청 처리를 위해서 해당 페이지를 찾아서 Web Container로 전달
3. Servlet(Controller)이 응답
4. 이에 필요한 Java Bean을 불러서 데이터를 가져옴
5. 데이터를 이용하여 View와 연결 -> 주로 Controller가 View와 Model1을 합치는 기능을 수행
6. 생성한 웹 페이지를 웹 서버 쪽으로 전송
7. 웹 서버가 전송받은 웹 페이지를 클라이언트에게 전송
위의 내용들을 바탕으로 Model2가 가지는 장단점을 정리해보면 아래와 같습니다.
장점 | 단점 |
협업과 유지보수에 유리하다 | 개발시간이 오래걸린다 |
규모가 크고 개발 후에도 주기적으로 유지보수가 필요한 프로젝트에 적합 |
Model2의 장점으로는 협업과 유지보수가 유리하다는 점입니다. 우선 협업의 경우 개발자와 개발자간의 협업도 있지만 개발자와 디자이너간의 협업도 있습니다. 위와 같이 사용자가에게 보여지는 UI부분을 기술하는 View부분이 따로 모듈화 되어 분리되어 있기 때문에 디자이너와 개발자 사이에 협업의 측면에서 훨신 유리합니다. 단, 위와 같은 구조를 지켜서 설계 및 구현을 진행해야하기 때문에 다소 개발에 소요되는 시간이 더 크다는 단점이 있습니다. 그래서 Model2가 규모가 크고 개발 후에도 주기적으로 유지보수가 필요한 프로젝트에는 적합하지만 오히려 규모가 작고 개발 후 주기적인 유지보수가 거의 없는 프로젝트의 경우에는 오히려 비효율적일 수도 있습니다.
Spring을 공부하기에 앞서서 MVC 패턴과 Model1, Model2에 대해서 공부한 이유는 Spring이 MVC패턴을 사용하기 때문입니다.
이 MVC 패턴과 Model1, Model2의 개념을 잘 이해하고 있어야 앞으로 Spring을 공부함에 있어서 중요한 기초가 될 것입니다.
Spring MVC pattern
Model, View, Controller의 세 가지 요소로 모듈화하여 개발하는 개발형태의 일종
우선 MVC 패턴입니다. MVC 패턴이라는 용어의 M은 Model, V는 View, C는 Controller를 의미하는 것으로서 프로젝트에서 서로 다른 역할을 수행하는 3개의 파트로 모듈화하여 개발하는 형태를 말합니다.
요소 | 역할 |
Model | 데이터베이스와 관계된 내용을 기술하는 부분 클라이언트의 요청에서 필요한 자료를 데이터베이스에서 가져오거나 수정하여 Controller로 전달 |
View | 사용자에게 보여지는 UI 내용을 기술하는 부분 (어떤 View가 보여질지는 Controller에 의해서 결정됨) |
Controller | 클라이언트의 요청을 받고 적절한 Model에게 동작을 지시, Model이 처리하여 반환한 데이터를 적절한 View로 전달 |
Model
Model은 데이터베이스와 관계된 내용이 기술되는 부분입니다. 실제로 클라이언트 즉, 웹 브라우져에서 발생하는 요청에 따라서 필요한 자료들을 데이터베이스에서 가져오거나 수정하여서 이를 Controller로 전달하는 역할을 수행합니다.
View
View는 사용자에게 보여지는 화면 즉, UI에 대한 내용을 기술하는 부분입니다. View는 주로 .jsp 파일로 작성되는 데 이러한 파일들이 여러개가 모여서 하나의 View모듈을 구성하게 됩니다. 그리고 사용자에게 어떤 View가 보여질지는 Controller에 의해서 결정됩니다.
Controller
Controller는 이름 그대로 전체적인 통제를 담당합니다. 웹 브라우져에서 받은 요청을 적절한 Model이 동작하도록 지시하고, Model이 처리하여 얻은 데이터를 적절한 View로 전달해서 사용자가 내용을 볼 수 있도록 해줍니다.
즉, MVC Pattern을 그림으로 표현해보면 다음과 같습니다.
위와 같은 MVC 패턴을 사용하여 소프트웨어를 개발하면 나중에 소프트웨어를 개발한 후에 유지보수를 하는 측면에서 굉장히 유리합니다. 초기에 설계 및 구현을 진행할 때 이러한 구조를 지켜서 설계 및 구현하는 것은 다소 번거롭게 느껴질 수 있고 시간이 소요될 수 있는 일이지만 추후에 소프트웨어의 유지보수 측면을 생각했을 때 이것이 훨신 유리하기 때문에 많은 개발에서 이 MVC 패턴을 사용합니다. 예를 들어서 위와같이 각 파트를 모듈화 하여 구성하지 않고 하나의 파일, 모듈로만 구성하는 경우를 생각해 보겠습니다. 하나의 파일 안에 Model, View, Controller가 모두 들어있다면 코드라인의 수가 길어질 뿐만 아니라 다양한 언어들이 사용되는 웹 개발의 특성상 여러 언어들이 하나의 파일에 섞여있게 되어 코드를 읽는 것이 굉장히 어려워 집니다. 즉, 코드의 가독성이 떨어지기 때문에 서로 협업의 관점에서도 좋지 않습니다. 뿐만 아니라 나중에 새로운 기능을 추가하거나 삭제, 수정 및 보완하려는 경우 전체적인 프로그램의 흐름을 파악하는 것 자체가 어려워지기 때문에 유지보수에 있어서도 굉장히 불리합니다. 그렇기 때문에 여러측면을 따져봤을 때 이렇게 MVC 패턴으로 개발하는 것이 여러 부분에 있어서 유리하고 좋습니다.
'Web Backend > Spring' 카테고리의 다른 글
MyBatis - 2개 이상의 Query를 mapper에 한번에 작성하고 싶은 경우 (0) | 2022.01.14 |
---|---|
web.xml (A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type.) (0) | 2022.01.12 |
STS - java.lang.ExceptionInInitializerError (0) | 2022.01.11 |
Annotation을 통한 DI를 사용한 CRUD 프로젝트 만들기 (0) | 2020.11.29 |
Framework 개념 및 Spring 개요 (0) | 2020.08.10 |
댓글
이 글 공유하기
다른 글
-
web.xml (A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type.)
web.xml (A field of identity constraint 'web-app-servlet-name-uniqueness' matched element 'web-app', but this element does not have a simple type.)
2022.01.12 -
STS - java.lang.ExceptionInInitializerError
STS - java.lang.ExceptionInInitializerError
2022.01.11 -
Annotation을 통한 DI를 사용한 CRUD 프로젝트 만들기
Annotation을 통한 DI를 사용한 CRUD 프로젝트 만들기
2020.11.29 -
Framework 개념 및 Spring 개요
Framework 개념 및 Spring 개요
2020.08.10