- 클라이언트의 요청에 대해
모델
과뷰
를 결정하여 전달하는 일. 조정자 역할- 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는
모델
컴포넌트를 호출- 클라이언트가 보낸 데이터가 있으면,
모델
을 호출할 때 전달하기 쉽게 데이터 가공모델
이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록뷰
에게 전달
- 데이터 저장소와 연동해 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일
- 여러 개의 데이터 변경 작업 (추가, 변경, 삭제)을 하나의 작업으로 묶은 트랜젝션을 다루는 일
모델
이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일- 생성된 화면을 웹 브라우저가 출력
- HTML, CSS, JavaScript, JQuery 등을 사용해 웹 브라우저가 출력할 UI를 만든다.
- 룩앤필(Look and Feel) 을 쉽게 교체할 수 있다. 즉 화면 생성 부분을 별도의 컴포넌트로 분리하였기 때문에, 컨트롤러나 모델에 상관없이 뷰 교체만으로 배경, 모양, 레이아웃, 글꼴 등 사용자 화면을 손쉽게 바꿀 수 있다.
- 원 소스 멀티 유즈(One source multi-use, OSMU) 구현할 수 있다. 모델 컴포넌트가 작업한 결과를 다양한 뷰 컴포넌트를 통해 PDF, HTML, JSON, XML 등 클라이언트가 원하는 형식으로 출력 가능
- 코드를 재사용 할 수 있다. 화면을 바꾸거나 데이터 형식을 바꾸더라도 모델 컴포넌트는 재사용 할 수 있기 때문에 개발 속도가 빨라진다.
웹 브라우저가 웹 애플리케이션 실행을 요청한다.
웹 서버가 그 요청을 받아서
서블릿 컨테이너
(ex) 톰캣 서버)에 넘겨준다. 서블릿 컨테이너는 URL을 확인해 그 요청을 처리할 서블릿을 찾아서 실행한다.
서블릿은 실제 업무를 처리하는
모델 자바 객체
의 메소드 호출한다.
- 만약 웹 브라우저가 보낸 데이터를 저장하거나 변경해야 한다면 그 데이터를 가공하여값 개체(VO)
를 생성하고,모델 객체
의 메소드를 호출할 때 인자값으로 넘긴다.
-모델 객체
는 엔터프라이즈 자바빈 (EJB) 일 수도 있고, 일반 자바 객체(POJO) 일 수도 있다.
모델 객체는 JDBC를 사용해 매개변수로 넘어온
값 객체
를 데이터베이스에 저장하거나, 데이터베이스로부터 질의 결과를 가져와서값 객체
로 만들어 반환한다.
- 값 객체는 객체와 객체 사이에 데이터를 전달하는 용도로 사용하기 때문에데이터 전송 객체(DTO)
라고도 부른다.
서블릿은 모델 객체로부터 반환받은 값을
View(JSP)
에 전달한다.
JSP
는서블릿
으로부터 전달받은 값 객체를 참조해 웹 브라우저가 출력할 결과 화면을 만들고, 컨트롤러에 전달한다.
View
로 부터 받은 화면을 웹 서버에 전달한다.
웹 브라우저는 웹 서버로부터 받은 응답 내용을 화면에 출력한다.
- 비즈니스 로직 영역(Controller)에 프레젠테이션 영역(view)을 같이 구현하는 방식
- 브라우저가 서버에 요청하면 해당 요청을 JSP가 받고, JSP는 Java로 만들어진 클래스인 Java Beans을 이용해서 Database를 사용하고, 그 결과를 화면에 출력한다.
- 빠르고 쉽게 개발할 수 있지만, JSP에 HTML 코드와 Java 코드가 섞여있어 유지보수가 어렵다.
- 이 방식으로 웹 서비스를 개발하는 사례는 거의 없다. 백엔드와 프론트엔드 역할 분담이 모호해서 오히려 협업에 걸림돌이 된다.
- 비즈니스 로직 영역(Controller)과 프레젠테이션 영역(view)이 분리되어 있는 구현 방식
- 요청 자체는 Servlet이 받고, Servlet이 Java Beans을 이용해서 Database에서 데이터를 가져와, 그 결과를 JSP를 통해서 화면에 출력한다.
- Servlet은 요청과 데이터를 처리하는 Controller의 역할을 수행하고, JSP는 모델의 결과를 보여주는 View의 역할을 수행한다.
- 설계에는 어려움이 있지만, 이렇게 함으로써 로직과 view를 분리할 수 있어 유지보수에 유리하다.
- Model2의 발전된 형태가 Spring framework의 모듈중 하나인 Web Module에 구현되어있다. => 이게 Spring MVC
참고 URL :
https://wooaoe.tistory.com/15
https://codingnotes.tistory.com/17