✏️ Web Application Arcchitecture - MVC
Web Application Architecture
- JSP를 이용하여 구성할 수 있는 Web Application Architecture는 크게 model1과 model2로 나뉜다.
- Model1 구조는 JSP에서 자바 코드와 html 코드를 모두 처리하는거
- Model2 구조는 JSP가 응답페이지(html)만 처리하는거
- java코드가 거의 사라지지 전부 사라지지는 않는다.
- 화면에 보이는 데이터만 java 코드로 사용함.
- 즉, Model2 구조는 MVC(Model-View-Controller) Pattern을 web 개발에 도입한 구조를 말한다.
Data Logic
- DAO = Repository = mapper(MyBatis)
Model1 구조
- model1은 view와 logic을 JSP 페이지 하나에서 처리하는 구조를 말한다.
- 클라이언트의 요청을 받는것도 JSP
- Model과 상호작용을 하여 변경된 Model을 사용하여 View를 다시 그려내는것도 JSP
- 사용자의 요청처리와 요청에 대한 응답처리를 JSP에서 모두 구현하는 구조
Model1 장점
- 구조가 단순하며 직관적이기 때문에 배우기 쉽다.
- 개발 시간이 비교적 짧기 때문에 개발 비용이 감소.
Model1 단점
- 출력을 위한 view(html) 코드와 로직 처리를 위한 java 코드가 섞여 있기 때문에 JSP 코드 자체가 복잡해 진다.
- JSP코드에 백엔드(developer)와 프론트엔드(designer)가 혼재되기 때문에 분업이 힘들어진다.
- project의 규모가 커지게 되면 코드가 복잡해 지므로 유지보수 하기가 어려워진다.
- 확장성(신기술의 도입, framework(vue, spring) 등..)이 나쁘다.
Model2 구조
- Model2 구조를 MVC Pattern이라고 한다.
- MVC = Model-View-Controller
- model2는 모든 처리를 JSP 페이지에서 하는 것이 아니라
- client 요청에 대한 처리는 servlet
- logic처리는 java class(Service, DAO, ..)
- client에게 출력하는 response page를 JSP가 담당한다.
- MVC Model2는 MVC Model1과는 다르게 View와 Controller가 분리된 구조를 가지고 있다.
- Controller와 View를 분리함으로써 클라이언트의 요청처리 부분과 응답처리 부분을 분리하여 각 로직을 독립적으로 수행할 수 있다.
Model2 장점
- 따라서 유지보수 측면에서 좋고 디자이너와 개발자 간의 협업이 수월해지는 장점이 있다.
- 출력을 위한 view(html) 코드와 로직 처리를 위한 java 코드가 분리 되었기 때문에 JSP는 Model1에 비해 코드가 복잡하지 않다.
- 화면단과 Logic단이 분리 되었기에 분업이 용이해졌다.
- 기능에 따라 code가 분리되었기 때문에 유지보수가 쉬워졌다.
- 확장성이 뛰어나다.
Model2 단점
- 하지만 Model1보다 프로그램의 흐름이 복잡하기 때문에 개발 난이도가 높으며, 설계에서 어려움을 겪을 수 있다는 단점이 있다.
- 구조가 복잡해 초기 진입이 어렵다.
- 개발 시간의 증가로 개발 비용 증가.
Model2 구조
Servicce, DAO and Java Beans = Model
JSP = View
Servlet = Controller
✏️ Model1 vs Model2
핵심적인 차이
-
클라이언트의 요청처리와 응답처리가 분리되어 있는가
- MVC Model1은 요청처리와 응답처리가 모두 하나의 JSP에서 이루어집니다.
- MVC Model2는 요청처리는 Servlet에서 담당하고 응답처리는 JSP에서 이루어지기 때문에 두 로직이 분리되어 있습니다.
-
접근방식
- MVC Model1은 View와 Controller가 하나의 JSP에 존재하기 때문에 클라이언트가 직접적으로 View에 접근할 수 있습니다.
- MVC Model2에서 클라이언트는 View에 직접적으로 접근할 수 없고 반드시 Controller를 통해서 접근해야 합니다.
DTO vs VO 차이
DTO
- 값을 전달하는 것이 주 목적
- 값의 전달이 목적이기 때문에 getter/setter 사용 가능
- 인스턴스 개념
VO
- 값을 표현하는 것이 목적
- 불변성을 보장하기 위해 setter 사용 불가(getter만 가지고 있다.)
- Read-Only 속성을 지닌 값 오브젝트
✏️ MVC Pattern