본문 바로가기
Spring

MVC , 모델2(Model2) , SpringMVC

by 달보드레. 2020. 5. 21.

MVC

 

M- model : 애플리케이션의 정보, 데이터를 나타낸다.

DB, 처음 정의하는 상수, 초기화 값, 변수 등을 뜻함

규칙 : 1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
        2. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
        3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.


V - view : input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타냅니다.

데이터 및 객체의 입력, 그리고 보여주는 출력을 담당합니다

규칙 : 1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
        2. 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다.
        3. 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.


c - controller : 사용자가 데이터를 클릭하고, 수정하는 것에 대한 이벤트들을 처리하는 부분을 뜻합니다

규칙 : 1. 모델이나 뷰에 대해서 알고 있어야 한다.
        2. 모델이나 뷰의 변경을 모니터링 해야 한다.

쓰는 이유 : 서로 분리되어 각자의 역할에 집중하여 개발을 하고 그로 인해

유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩 사라짐

간단히 하면

Model : 데이터를 관리 하는 부분

View : 눈에 보이는 부분을 구성하는 부분

Controller : 요청에 따른 코드 흐름을 제어하는 부분

 


1. 클라이언트에서 서버로 요청
2. 서버는 Controller로 요청을 전달
3. Controller는 응답결과를 처리하는 Service를 호출
4. DB에 관련 부분이 있다면 DAO가 가지고 있는 메소드 호출

 

 

 

모델 2

모델 2 방식에서 사용자의 Request는 특별한 상황이 아닌 이상 

먼저 Controller를 호출 이렇게 설계를 하는 이유는 나중에 View를

교체하더라도 사용자가 호출하는 URL자체 변화가 없게 하기 때문이다

컨트롤러는 데이터를 처리하는 존재(Model)를 이용해서 데이터를 처리하고

Response 할때 필요한 데이터를 View로 전달

 

SpringMVC

 

 

 

1. 사용자 Request는 Front-Controller인 DispatcherServlet를 통해 처리

 

(web.xml)

	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
    
    // 모든 Request를 DispatcherServlet 이 받도록 처리

 

2,3. HandlerMapping은 Request처리를 담당하는 컨트롤러를 찾기 위해 존재

     HandlerMapping 인터페이스를 구현한 여러 객체중 RequestMapingHandlerMapping같은 경우

     개발자가 @RequestMapping 어노테이션이 적용된 것을 기준으로 판단

     컨트롤러가 찾아지면 HandlerAdpter를 이용해서 해당 컨트롤러 동작

 

4. 컨트롤러는 개발자가 작성하는 클래스로 실제 Request를 처리하는 로직을 작성하게 됨

   이때 View에 전달해야 하는 데이터는 주로 Model에 담아 전달

   컨트롤러는 다양한 타입의 결과를 반환하는데 이에 대한 처리는 ViewResolver를 이용

 

5. ViewResolver는 컨트롤러가 반환한 결과를 어떤 View를 통해서 처리하는것이 좋을지 해석하는 역할

   

- 가장 보편적인 설정

(servlet-context.xml)


<bean:bean class="org.springframwork.web.servlet.view.InternalResourceViewResolver">
	<bean:property name="prefix" value="/WEB-INF/views/"/>
	<bean:property name="suffix" value=".jsp"/>
</bean>
    

6,7. View는 실제로 응답 보내야 하는 데이터를 Jsp등을 이용해서 생성하는 역할을 한다

     만들어진 응답은 DispatcherServlet를 통해 전송

 

 

* 모든 Request는 DispatcherServlet을 통하도록 설계 되는데 

  이러 방식 Front-Controller 패턴이라고 함

  Front-Controller 패턴을 이용하면 전체 흐름을 강제로 제한 할 수 있음

  Front-Controller 패턴을 이용할 경우 모든 Request의 처리에 대한 분배가 정해진 방식대로만 동작하기 때문에 

  좀 더 엄격한 구조를 만들 수 있다.

'Spring' 카테고리의 다른 글

SpringMVC Controller  (0) 2020.05.21
Spring MVC 프로젝트 구동 구조  (0) 2020.05.20
Mybatis - 2  (0) 2020.05.20
Bean  (0) 2020.05.19
DI (Dependency Injection)  (0) 2020.05.19