728x90
MVC 패턴
1. MVC 패턴이란?
MVC - Model, View, Controller의 합성어로 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다.
- Model : 백그라운드에서 동작하는 로직을 처리한다. (데이터를 가진 객체, 파람미터로 주로 쓰인다, DB의 테이블과 대응하는 경우가 많다.)
- View : 사용자가 보게 될 결과 화면을 출력한다. (html, css, javascript를 모아둔 컨테이너)
- Controller : 사용자의 입력처리와 흐름 제어를 담당한다. (사용자가 접근한 URL에 따라서 사용자의 요청사항을 파악한 후, 그 요청에 맞는 데이터를 Model에 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려준다.)
2. MVC Model 1
비즈니스 로직 영역(Controller)에 프레젠테이션 영역(View)를 같이 구현하는 방식이다. 사용자의 요청을 JSP가 전부 다 처리한다. 웹 브라우저 사용자의 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용하여 웹 브라우저가 요청한 작업을 처리하고 그 결과를 출력해준다.
2.1 장점
- 개발 속도가 빠르다.
- 개발자의 스킬이 낮아도 배우기 쉬워 빠르게 적용할 수 있다.
2.2 단점
- JSP 페이지에서 프레젠테이션 로직과 비즈니스 로직을 모두 포함하기 때문에 JSP페이지가 너무 복잡해진다.
- 프레젠테이션 로직과 비즈니스 로직이 혼재되어 있기 때문에 개발자와 디자이너의 분리된 작업이 어려워진다.
- JSP 페이지의 코드가 복잡해져 유지보수 하기 어려워진다.
- 정교한 프레젠테이션 레이어를 구현하기 힘들다. (유효성 체크, 에러 처리 등)
3. MVC Model 2
비즈니스 로직 영역과 프레젠테이션 영역이 분리되어 있는 구현 방식이다. 웹 브라우저 사용자의 요청을 Servlet이 받는다. Servlet은 요청을 View로 보여줄 것인지, Model로 보내줄 것인지 정하여 전송한다. 여기서 View 페이지는 사용자에게 보여주는 역할만 담당하고 실질적인 기능의 부분은 Model에서 담당한다.
3.1 장점
- 프레젠테이션에서 명확한 역할 분담이 된다.
- UI 레이어를 단순화시킴으로써 디자이너도 작업하는 것이 가능하게 된다. -> 단지 보이는 용도로만 사용된다.
- 프레젠테이션 레이어의 정교한 개발이 가능하다.
- Dependency Pull 없이 Dependency Injection만을 이용해서 애플리케이션을 개발하는 것이 가능하다.
- UI 레이어가 단순해짐으로써 유지보수가 쉽다.
3.2 단점
- 새로운 기술을 익혀야하는 부담감이 있다.
- 프로젝트 초반에 개발 속도의 저하를 가져올 수 있다. (설계에서 어려움을 겪을 수 있고, 개발 난이도가 높다.)
4. Spring Framework MVC 구조
- 클라이언트의 요청이 DispatcherServlet에 전달된다.
- DispatcherServlet은 HandlerMapping을 사용하여 클라이언트의 요청이 전달될 Controller 객체를 구한다.
- DispatcherServlet은 Controller 객체의 HandleRequest() 메서드를 호출하여 클라이언트의 요청을 처리한다.
- Controller.handleRequest() 메서드는 처리 결과를 보여줄 View를 구한다.
- View는 클라이언트에 전송할 응답을 생성한다.
여기서 개발자가 직접 개발해주어야 하는 부분은 클라이언트의 요청을 처리할 Commander 클래스와 클라이언트에 응답 결과 화면을 전송할 JSP나 Velocity 템플릿 등의 View 코드이다. 나머지 DispatcherServlet이나 HandlerMapping, ViewResolver 등은 Spring Framework가 제공하는 기본 구현체를 사용하면 된다.
Reference
728x90
'Etc > 2020' 카테고리의 다른 글
[Eclipse] SVN Compare 시 한글 깨짐 현상 해결 (0) | 2020.06.22 |
---|---|
[Java] 객체 생성 패턴 (0) | 2020.06.09 |
[Java] 객체 지향 프로그래밍(OOP, Object Oriented Programming) (0) | 2020.06.08 |
[HTML] HTML5 기본 문법 정리 (0) | 2020.06.04 |
JSTL(JSP standard tag library) 주요 태그 문법 정리 (0) | 2020.05.28 |