BackEnd/Database Programming

[DB Programming] MVC Architecture - model 1/model 2/Model/Controller/View

하노정 2022. 10. 10. 16:44

Web Application의 구조

model1, 2가 있는데 model2가 MVC 구조이다.

 

1. model 1

  • JSP page에서 presentation logic, business logic, 입출력 데이터 처리, 실행 흐름 제어 등을 모두 구현
  • 작은 규모, 짧은 기간의 프로젝트 수행 시 사용 가능
  • 복잡하고 변경이 많은 application의 경우 부적합(개발, 유지보수, 재활용이 어려움)

 

Web container에서 하는 작업을 JSP로 다 하는 것인데 별로 바람직하지 않다.

model 1은 Model이 없는데, 복잡한 기능 구현 시 Model을 정의해서 사용한다. 후에 MVC에서 그대로 활용한다. model 1(JSP) + Model의 형태이다. 

 

-> 결론은 model 1은 사용하지 않는다.

 

2. model 2 (MVC pattern 또는 MVC architecture)

  • Model: business logic 및 data 저장 관리 수행
  • View: UI 및 presentation logic 구현
  • Controller: Model과 View 사이의 실행 흐름 제어

 

Web container에서 하는 작업을 Model, View, Controller 3개로 나눠서 한다. 

Controller가 처음 요청이 들어오면 파악한 후에 적절한 Model 클래스를 선정한다. Model에서 business logic 및 data 저장 관리(DB 접속 및 처리) 수행 하게 하고, 적절한 View로 최종 결과 화면을 forwarding한다.

MVC 구조 (model 2)

Model - View - Controller

Request(입력) -> Controller(-> Model) -> View(-> Model) -> Response(출력)

  • Model: 입력 값 검증, business logic 실행, DB 연동 등을 담당
  • View: 사용자 요청 처리 결과에 대한 출력(presentation) 및 UI 담당
  • Controller: 사용자와 Model, View 사이의 실행 흐름 제어, 사용자의 요청 수신/Model 기능 선택 및 호출/View 선택 및 결과 전송

 

Request 처리 과정

  • 모든 사용자 요청은 먼저 Controller(Servlet)으로 전달됨
  • Controller는 사용자 요청에 대한 처리를 Model에 위임함. 사용자의 요청 데이터(parameter)를 전달
  • Model은 요청 처리를 완료한 후 Controller에게 결과를 반환함
  • Controller는 사용자에게 보여줄 View를 호출함. 사용자의 요청과 Model로부터 반환된 결과에 따라 적절한 view page를 선택하고, Model로부터 반환된 결과를 view page에 전달함
  • View는 요청 처리 결과 화면을 생성해 사용자에게 전송함(response)

 

장점

  • model 1에서 JSP가 처리해야 했던 많은 일들을 분리해 개발 가능하도록 구성
  • 개발 및 유지보수의 효율성 향상, 웹 디자이너와 프로그램 개발자가 각각 UI 화면과 business logic을 개발 및 수정하는 것이 용이

 

단점

  • model 2에서는 Controller 부분에 속하는 클래스들을 별도로 정의해야 함, Controller inferface/classes, DispatcherServlet, RequestMapping 등
  • 요청에 대한 mapping은 애플리케이션에 종속적이므로 재사용 어려움
  • 해결 방안: Spring MVC, Struts 등과 같은 프레임워크 활용

Model

business logic 구현, data 처리(DB, file system, legacy system 등과 연동 수행)

 

1. Domain class

  • Value Object(VO), Data Transfer Object(DTO)를 정의
  • Application에서 사용되는 data의 표현 및 전달을 위한 객체
  • DB에 저장되는 객체는 DB의 table과 유사한 구조를 가짐
  • 속성에 대한 setter/getter methods 포함 (Java beans가 일반적)

 

2. Business Object(BO) class

  • Business logic을 구현하는 클래스
  • Business logic이 간단할 경우 BO를 생략하고 Manager class 등에서 구현 가능 (계산, 알고리즘 등이 포함된 경우는 복잡한 경우)

 

3. Data Access Object(DAO) class

  • DB나 기존 legacy system과 연동해 data 처리 및 관리 수행
  • JDBC API 등을 사용해 구현

 

4. Manager(Facade) class 

Facade는 건물의 가장 큰 입구문이라는 뜻이다.

  • JSP(model 1) 또는 Controller(model 2)에서 Model에 접근하기 위해 사용하는 인터페이스(API)를 제공하는 Facade class, 외부에서 Model에 접근할 때 반드시 manager object를 이용하도록 함
  • Manager Object는 domain object를 통해 business object와 DAO에 data를 전달하며, business logic 및 data 처리 결과를 JSP 또는 Controller에 전달하는 역할을 수행 (입구문 같은 느낌이고, JSP와 Controller는 Manager object를 꼭 거치기 때문에 DAO 동작과정을 모름)
  • Manager class에서 간단한 business logic을 직접 구현 가능