공부/스프링프레임워크

[spring] spring mvc

ghhong 2021. 11. 25. 17:33

MVC 패턴의 개념과 모델2 아키텍처

MVC패턴 : 모델--컨트롤러는 소프트웨어 공학에서 사용되는 아키텍처 패턴으로 mvc패턴의 주 목적은 비지니스로직과 프레젠테이션로직을 분리하기 위함이다.

Model : 데이터 저장소와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룬다. DAO클래스, Service클래스에 해당

View : 모델이 처리한 데이터나 작업 결과를 가지고 사용자에게 출력할 화면을 만든다. Htmljsp를 사용

Controller : 클라이언트의 요청을 받았을 때 업무를 수행하는 모델 컴포넌트를 호출한다. 이때 클라이언트가 보낸데이터가 있다면 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하기도 한다. 모델이 업무 수행을 완료하면 그 결과를 뷰에게 전달한다. Servletjsp를 사용

 

모델2 아키텍처

1.     웹 브라우저가 웹 애플리케이션 실행을 요청하면, 웹 서버가 그 요청을 받아서 서블릿 컨테이너에 넘겨준다. 서블릿 컨테이너는 url을 확인하여 그 요청을 처리할 서블릿을 찾아서 실행한다.

2.     서블릿은 실제 업무를 처리하는 모델 자바 객체의 메서드를 호출한다. 만약 웹 브라우저가 보낸 데이터를 저장하거나 변경해야 한다면 그 데이터를 가공하여 vo객체를 생성하고, 모델 객체의 메서드를 호출할 때 인자 값으로 넘긴다.

3.     모델 객체는 jdbc를 사용하여 매개변수로 넘어온 값 객체를 데이터베이스에 저장하거나 데이터베이스로부터 질의 결과를 가져와서 vo 객체로 만들어 반완한다.

4.     서블릿은 모델 객체로부터 반환 받은 값을 jsp에 전달한다.

5.     Jsp는 서블릿으로부터 전달받은 vo객체를 참조하여 웹 브라우저가 출력할 결과 화면을 만들고, 웹 브라우저에 출력함으로써 요청 처리를 완료한다.

6.     웹 브라우저는 서버로부터 받은 응답 내용을 화면에 출력한다.

 

Front Controller 패턴 아키텍처

Front Controller는 클라이언트가 보낸 요청을 받아서 공통적인 작업을 먼저 수행한다.

Front Controller는 적절한 세부 컨트롤러에게 작업을 위임한다.

각각의 애플리케이션 컨트롤러는 클라이언트에게 보낼 뷰를 선택해서 최종 결과를 생성한다.

Front Controller패턴은 인증이나 권한 체크처럼 모든 요청에 대하여 공통적으로 처리해야 하는 로직이 있을 경우 전체적으로 클라이언트의 요청을 중앙집중적으로 관리하고자 할 경우에 사용한다.

 

Spring MVC 개념

SpringDIAOP 같은 기능뿐만 아니라 서블릿 기반의 웹 개발을 위한 MVC 프레임워크를 제공한다.

Spring MVC는 모델2 아키텍쳐와 Front Controller패턴을 프레임워크 차원에서 제공한다.

Spring MVC프레임워크는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 트랜잭션 처리나 DI AOP등을 사용할 수 있다.

Spring MVCFront Controller 역할을 하는 DispatcherServlet이라는 클래스를 계층의 맨 앞단에 놓고, 서버로 들어오는 요청을 받아서 처리하도록 구성한다.

 

DispatcherServlet 클래스

Front Controller 패턴 적용, web.xml에 설정하여 ControllerView와 같은 Spring MVC의 구성요소를 이용하여 클라이언트에게 서비스를 제공한다.

 

Spring MVC의 주요 구성 요소

처리과정

1.     클라이언트 요청이 DispatcherServlet에 전달된다.

2.     DispatcherServletHandlerMapping을 사용하여 클라이언트의 요청을 처리할 Controller를 획득한다.

3.     DispatcherServletController객체를 이용하여 클라이언트의 요청을 처리한다.

4.     Controller는 클라이언트 요청 처리 결과와 View페이지 정보를 담은 ModelAndView객체를 반환한다.

5.     DispatcherServletViewResolver로부터 응답 결과를 생성할 View객체를 구한다.

6.     View는 클라이언트에게 전송할 응답을 생성한다.