[Spring] MVC 구조 (1)

2020. 8. 2. 21:40Spring/Spring

1. MVC 구조

1) Model 아키텍처 (2)

하나의 서블릿으로 Controller 기능을 수행하여 모든 클라이언트의 요청을 처리한다. 하나의 서블릿으로 운영하게 되었을 경우 부담이 커지며 유지보수 및 편의성이 떨어지게 된다.

 

스프링 프레임워크에서는 효율적인 Controller를 제공하여 DispatcherServlet을 시작으로 다양한 객체들이 상호작용하면서 클라이언트 요청을 처리한다.

2) MVC 프레임워크 구조

MVC 프레임워크 구조

3) Controller

클라이언트의 요청을 가장 먼저 처리하는건 DispatcherServlet(Front Controller)이며, 실질적인 요청 처리는 각 Controller에서 수행하게 된다. 그리고 클라이언트 요청을 받은 DispatcherServlet은 HandlerMapping을 통해 Controller 객체를 찾고, 찾은 Controller를 실행하게 된다. 여기서 어떤 Controller 객체가 찾아져도 같은 코드로 실행하려면 모든 Controller의 최상위 인터페이스가 필요하다.

/src/main/java/
Controller.java

Controller.java

4) 로그인 기능

DispatcherServlet에 구현된 기능을 옮기고, 리다이렉트가 아닌 반환하도록 처리한다. 또한 로그인 실패 시 반환된 문자열은 'login.jsp'가 아닌 'login'으로 반환이된다(ViewResolver).

/src/main/java/
LoginController.java

LoginController.java

5) HandlerMapping

HandlerMapping의 경우, DispatcherServlet이 사용하는 객체로, 클라이언트의 요청에 따라 처리할 Controller를 찾아준다. HandlerMapping은 모든 Controller 객체들을 관리하며, getController() 메서드를 통해 매개변수로 전달받은 path에 해당하는 Controller를 검색하여 반환해준다.

/src/main/java/
HandlerMapping.java

HandlerMapping.java

7) ViewResolver

ViewResolver는 각 Controller가 반환한 문자열에 다른 문자열(prefix, suffix)을 결합하여 View 경로와 파일명을 완성하는 기능을 수행한다.

/src/main/java/
ViewResolver.java

ViewResolver.java

8) DispatcherServlet

/src/main/java/
DispatcherServlet.java

DispatcherServlet.java

9) 동작 과정

1. DispatcherServlet에서 클라이언트의 요청을 받는다.

2. DispatcherServlet에서는 HandlerMapping 객체를 통해 요청 처리할 Controller 검색한다.

3. 검색된 Controller에서 handleRequest() 메서드 호출 시 로직을 수행한다.

4. Controller에서 로직 수행 후 이동할 화면 정보를 DispatcherServlet에 전달한다.

5. DispatcherServlet에서 ViewResolver 객체를 통해 파일명과 경로를 받는다.

6. 최종적으로 받은 파일명과 경로를 실행하여 브라우저에 응답한다.


[참고] 스프링 퀵 스타트

728x90

'Spring > Spring' 카테고리의 다른 글

[Spring] EL/JSTL JSP 처리  (0) 2020.08.02
[Spring] MVC 구조 (2)  (0) 2020.08.02
[Spring] Model 아키텍처 (2)  (0) 2020.07.31
[Spring] Model 아키텍처 (1)  (0) 2020.07.30