SpringMVC란?


Spring MVC의 특징

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

- SpringMVC는 모델2 아키텍쳐와 FrontController 패턴을 프레임워크 차원에서 제공한다.


- SpringMVC프레임워크는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 트랜잭션 처리나 DI 및 AOP등을 손쉽게 사용한다.


SpringMVC와 FrontController 패턴

어떤 연관성이 있을까?

- 대부분의 MVC 프레임워크들은 FrontController 패턴을 적용해서 구현한다.

- Spring MVC도 FrontController역할을 하는 DispatcherServlet 이라는 클래스를 계층의 맨 앞단에 놓고, 서버로 들어오는 모든 

요청을 받아서 처리하도록 구성되어있다.

DispatcherServlet이 FrontController 역할을 한다.


- 예외가 발생했을 때, 일관된 방식으로 처리하는 것도 FrontController의 역할이다.



DispatcherServlet 클래스

- FrontController 패턴 적용

- Web.xml에 설정한다.

- 클라이언트로부터의 모든 요청을 전달 받게된다.


- Controller나 View와 같은 Spring MVC의 구성요소를 이용하여 클라이언트에게 서비스를 제공한다.


DispatcherServlet은 개발자가만든 Controller에 위임한다.

개발자가만든Controller는 핸들링(처리) 하여 모델을 DispatcherServlet에 전달한다.

DispatcherServlet은 View에게 model전달한다.

view는 화면생성후 DispatcherServlet에게 전달한다.


Spring MVC의 주요 구성 요소

 

 DispatcherServlet

 - 클라이언트의 요청을 받아서 Controller에게 클라이언트의 요청을 전달하고,

리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성한다.

 HandlerMapping

 - URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며,

      DispaccherServlert에게 알려준다.

 Controller

 - 클라이언트의 요청을 처리한 뒤, Model를 호출하고 그 결과를 DispatcherServlet에게 알려 준다.

 ModelAndView

 - Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체이다.

 View

 - Controller의 처리 결과 화면에 대한 정보를 보유한 객체이다.

 ViewResolver

 - Controller가 리턴한 뷰 이름을 기반으로 Controller 처리 결과를 생성할 뷰를 결정한다.

 개발자가 주로 사용하는 클래스

 - DispatcherServlet,Controller,ModelAndView,View


Spring MVC의 주요 구성 요소의 요청 처리 과정

1. 클라이언트의 요청이 DispaccherServlet에게 전달된다.

2. DispatcherServlet은 HandlerMapping을 사용하여 클라이언트의

요청을 처리할 Controller를 획득한다.(컨트롤러를 알려줌)


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


4. Controller는 클라이언트 요청 처리결과와 View페이지 정보를 

담은 ModelAndView 객체를 반환한다.

'개발 소발 > 개발 Spring' 카테고리의 다른 글

Spring IoC(Inversion of Control),Bean,의존성주입이란?  (0) 2020.07.08
프레임워크 개념  (0) 2018.01.26
MVC패턴이란?  (0) 2018.01.11
Mybatis Mapper 인터페이스란?  (0) 2018.01.11
Mybatis 셋팅이란?  (0) 2017.12.21

MVC패턴이란?


Model - View - Controller

사용목적?

비지니스로직과 프리젠테이션 로직을 분리하기 위함이다.


프리젠테이션 로직과 비지니스로직

두가지를 분리하여 서로에 영향을 주지않는다.


Model이란?

- 애플리케이션의 정보(데이터,Business Logic 포함)


View이란?

- 사용자에게 제공할 화면(Presentation Logic)


Controller란?

- Model과 View사이의 상호 작용을 관리


MVC패턴의 개념


1. 클라이언트가 컨트롤러에게 요청한다.

2. 요청한것을 Controller가 Model에서 호출한다.

3. 결과를 Controller에게 전해준다.

4. 받은 결과를 Controller는 View에게 화면생성요청을 한다.

5. View는 결과화면을 Controller에게 전달한다.

6. Controller는 클라리언트에게 응답을함.



각각의 MVC 컴포넌트의 역할

 - 모델(Model) 컴포넌트

  1. 데이터 저장소(DB)와 연동하여 사용자가 입력한데이터나

사용자에게 출력할 데이터를 다루는 일을 한다.

2. 여러개의 데이터 변경 작업(추가,변경,삭제)를 하나의 작업으로

묶는 트랜잭션을 다루는 일도 한다.

3. DAO클래스 ,Service클래스에 해당된다.

 - 뷰(View) 컴포넌트

  1. 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할

화면을 만드는 일을 한다.

2. 생성된 화면은 웹 브라우저가 출력하고, 뷰 컴포넌트는 HTML과 CSS,

JavaScript를 사용하여 웹브라우저가 출력할 UI를 만든다.

3. Html과 JSP를 사용하여 작성할 수 있다.

 - 컨트롤러(Controller) 컴포넌트

  1. 클라이언트가 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는

모델 컴포넌트를 호출하는 일을 한다.

2. 클라리언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게

데이터를 적절히 가공하는 일을 한다.

3. 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록

뷰에게 전달(클라이언트 요청에 대해 모델과 뷰를 결정하여 전달)한다.

4.Servlet과 JSP를 사용하여 작성할 수 있다.



모델1 아키텍쳐 

-컨트롤러 역할을JSP가 담당한다.

JSP가 복잡해지는 단점이 있다.

모델2 아키텍쳐

-컨트롤러 역할을 Servlet이 담당한다.

Spring은 모델2사용 컨트롤러가 Servlet이다.


모델2 아키텍쳐 호출순서

 1.클라이언트가 Controller(서블릿)에 요청함.

  -웹브라우저가 웹 애플리케이션 실행을 요청하면, 웹 서버가 그 요청을 받아서

서블릿 컨테이넛(ex: 톰캣서버)에 넘겨준다.

-서블릿 컨테이너는 URL을 확인하여 그 요청을 처리할 서블릿을 찾아서 실행한다.

 2.Controller가 Model을 호출

  -서블릿은 실제 업무를 처리하는 모델 자바 객체의 메서드를 호출한다.

-만약 웹 브라우저가 보낸 데이터를 저장하거나 변경해야 한다면 그데이터를 가공하여

VO 객체(Value Object)를 생성하고, 모델 객체의 메서드를 호출할 때 인자 값으로 넘긴다.

-모델 객체는 엔터프라이즈 자바빈(EJB)일 수도 있고, 

일반 자바 객체(POJO로 된 Service,DAO object)일 수도 있다.

 3.Model객체가 SQL문을 통해 결과값을가져옴

        -모델 객체는 JDBC를 사용하여 매개변수로 넘어온 값 객체를 데이터베이스에 저장하거나,

        데이터베이스로부터 질의 결과를 가져와서 VO객체로 만들어 반환한다.

 4.Controller는 View(JSP)에 결과(VO) 전달

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

 5.JSP는 전달받은 결과(VO)로 화면생성

 


FrontController 패턴 아키텍쳐

- Front Controller 프로세스

                     (이부분)

클라이언트 -> FrontController -> 애플리케이션Controller -> View

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

- FrontController는 적절한 세부 Controller에게 작업을 위임한다.

- 각각의 애플리케이션 Contoller는 클라이언트에게 보낼 뷰를 선택해서

최종 결과를 생성하는 작업이다.

- FrontController 패턴은 인증이나 권한 체크처럼 모든 요청에 대하여 공통적으로 처리해야 하는 로직이 있을 경우 

전체적으로 클라이언트의 요청을 중앙 집중적으로 관리하고자 할 경우에 사용한다.







'개발 소발 > 개발 Spring' 카테고리의 다른 글

프레임워크 개념  (0) 2018.01.26
SpringMVC란?  (0) 2018.01.11
Mybatis Mapper 인터페이스란?  (0) 2018.01.11
Mybatis 셋팅이란?  (0) 2017.12.21
MyBatis란?  (0) 2017.11.27

사용자관리프로젝트(컨트롤러,서비스,DAO,도메인모델)란?


사용자관리 프로젝트 아키텍쳐

- 계층화(역할별로 나누어서 개발)

3계층과 모든계층에 사용되는 도메인 모델(VO,DTO) 클래스로 구성되어있다.

3계층

-프리젠테이션계층

-서비스계층

-데이터액세스계층

각각계층은 독립적으로 구분에서 구현한다.(각각의 기능과 역할이 다름)


프리젠테이션계층(쉽게말해 컨트롤러)

- 웹클라이언트의 요청 및 응답을 처리한다.

- 상위계층(서비스,데이터액세스계층)에서 발생하는 익셉션 처리한다.

- 최종 UI에서 표현해야 할 도메인 모델 사용한다.

- 최종 UI에서 입력한 데이터에 대한 유효성 검증기능을 제공한다.(타입확인등)

- 비지니스로직과 UI분리한다.(컨트롤러)

- @Controller 어노테이션으로 표현한다.


서비스계층(비지니스 로직)

- 복잡한 처리 구현한다.

- 트랜잭션처리한다.(DB 커밋 및 롤백)

- 프리젠테이션계층과 데이터액세스 계층 사이를 연결하는 역할이다.(직접통신하지않아 유연성증가)

- 다른 계층들과 통신하기 위한 인터페이스를 제공한다.

- Service 인터페이스와 @Service 어노테이션을 사용하여 작성된 Service 구현 클래스이다.


데이터액세스계층

DBMS연동하여 데이터엑세스하는 로직을 담당한다.

- 데이터를 조회 등록 수정 삭제한다.(CRUD)

ORM 프레임워크(Mybatis,Hibernate)를 주로 사용하는 계층이다.

- DAO인터페이스 @Repository 어노테이션을 사용하여 작성된 DAO 구현 클래스이다.


도메인모델클래스

- VO,DTO객체에 해당한다.

- 3개의 계층에 걸쳐 사용한다.

- private 멤버변수있고, getter,setter로 사용한다.



사용자 관리 프로젝트 클래스 설계

테이블 생성


컨트롤러 -> 

서비스(인터페이스) ->

서비스임플(비지니스로직) -> 

DAO(인터페이스) -> 

DAOImpl(db연결 jdbc사용)

UserVO(전구역에걸쳐사용)


UserController

- UI계층과 서비스 계층을 연결하는 역할이다.

- JSP에서 UserController를 통해서 서비스 계층의 UserService를 연결한다.(@autowried사용)

- UserService 를IOC가 주입해준다.



UserService

- 서비스 계층에 속한 상위 인터페이스이다.


UserServiceImpl          

- @Service사용 -> @Component과 같음

- UserService를 구현한클래스이다.

- 복잡한 업무 로직이 있을 경우에는 이 클래스에서 업무 로직을 구현한다.

- 데이터액세스 계층의 UserDao 인터페이스를 구현한 객체를 IoC컨테이너가 주입해준다.(@autowried사용)


UserDao

- 데이터 액세스 계층에 속한 상위 인터페이스


UserDaoImplJDBC 

- @Repository -> @Component역할과 같다.(특별히 데이터엑세스 레파지토리라는 뜻)

- UserDao 인터페이스를 구현한 클래스로 이클래스에서는 데이터 액세스 로직을 구현한다.

- SpringJDBC를 사용하는 경우 DataSource를 IoC컨테이가 주입해준다.

- MyBatis를 사용하는경우에는 SqlSession을 IoC컨테이너가 주입해준다.




+ Recent posts