Java

[Spring MVC] 아키텍처 모델 종류; Dispatcher Servlet, Model 1, Model 2, Front Controller

ride-dev 2023. 12. 26. 20:12

아키텍처 모델 종류; Dispatcher Servlet, Model 1, Model 2, Front Controller

웹 동작 방식

브라우저는 HTTP 요청을 전송하고 서버는 그 요청을 처리해서 HTTP 응답을 다시 전송합니다.

1. Browser sends a request

브라우저는 애플리케이션에 요청을 전송합니다.

(그 요청을 HttpRequest라고 합니다)

2. Server handles the request.

서버 또는 애플리케이션은 요청을 받으면 그 요청을 처리합니다.

3. Server returns the response

Spring Boot 웹 애플리케이션이 요청을 받고,

그 요청을 처리하고,

응답을 다시 브라우저에 전송합니다.

(응답은 보통 HTML 형식이며, 그걸 HttpResponse라고 합니다)

아키텍처 모델의 역사

Model 1 Arch. 모델 1 아키텍처

컨트롤러 없이 jsp만 사용하는 아키텍처입니다.

모든 코드가 View(JSP)에 있습니다

모든 로직이 jsp에 있었으며, 컨트롤러 개념이 없습니다.

jsp가 db와 대화하고, 정보를 받아서 사용자에게 표시합니다.

(View logic, Flow logic, Queries to DB)

View logic

Java로 초기 웹 애플리케이션을 개발할 때, 모든 코드를 뷰에 담았습니다.

애플리케이션의 모든 코드가 jsp에만 있었습니다.

Flow logic

페이지를 표시하는 방법에 관한 로직이나, 페이지가 나오는 순서에 관련된 로직을 Flow logic이라고 불렀습니다.

Queries to DB

DB가 있다면 DB를 쿼리하고 DB에서 정보를 받은 뒤, 화면에 표시합니다.

단점

JSP가 매우 복잡합니다.

View logic, Flow logic, DB logic 등 모든 것이 주제별로 구분되지 않고 jsp에 있기 때문에 유지보수가 어렵습니다.

Model 2 Arch. 모델 2 아키텍처

모델 2 아키텍처는 주제가 분명하게 구분되었습니다.

Model: 뷰를 생성하는 데 사용하는 데이터

View: 사용자에게 보여주는 역할

Controller 또는 Servlet: 흐름을 제어

장점: 쉬운 유지보수

로직이 주제별로 구분되어 있습니다.

Flow logic은 Servlet으로 가고,

사용자에게 어떤 것을 보여줄지 나타내는 View logic은 View로 가고,

DB로 부터 데이터를 받는 방법에 관한 모든 정보는 Model로 갑니다.

고민: 공통 기능을 어떻게 모든 컨트롤러에 걸쳐 구현하는가?

Model 2 Architecture - Front Controller 프론트 컨트롤러가 있는 모델 2 아키텍처

프론트 컨트롤러 패턴

브라우저에서 오는 모든 요청은 단 하나의 Controller로 갑니다.

보안 같은 공통 기능을 더욱 쉽게 구현할 수 있고,

보안 인증을 모두 Front Controller에서 구현할 수 있습니다.

프론트 컨트롤러에서 체크한 다음, 적절한 컨트롤러나 서블릿 또는 뷰로 전달할 수 있습니다.

모든 요청이 중앙 컨트롤러로 흘러갑니다.

중앙 컨트롤러를 프론트 컨트롤러라고 부릅니다.

FrontController는 Controller, View, Servlet으로 기능 흐름을 제어합니다.

공통 기능은 FrontController에 구현되었습니다.

Spring MVC Front Controller - Dispatcher Servlet

Spring MVC를 사용할 때 백그라운드에서 일어나는 작업

Dispatcher Servlet: 모델 2 FrontController 패턴의 Spring MVC 구현체, FrontController 역할

1. Receives HTTP Reqeust

모든 요청을 받음

2. Processes HTTP Request

모델, 뷰, 컨트롤러를 사용하여 요청 처리 시도

2.1 Identifies correct Controller method

request URL을 기반으로 적절한 컨트롤러 메서드를 식별

2.2 Executes Controller method

식별된 컨트롤러의 메서드를 실행하여 모델, 뷰 이름 반환

2.3 Identifies correct View

뷰 리졸버를 사용하여 뷰 이름에 대해 렌더링할 적절한 뷰를 식별

(prefix, suffix 설정을 토대로 매핑)

2.4 Executes view

디스패처 서블릿은 뷰 리졸버와 대화하고 정확한 뷰 이름을 받은 뒤, 뷰를 렌더링

3. Returns HTTP Response

jsp에 있는 코드를 실행하고 응답을 리턴

요약하자면

먼저 Dispatcher Servlet이 Request를 받고,

Controller method 식별 및 실행 실행 결과로 View를 return,

Dispatcher Servlet은 View에게 Model을 제공,

View 실행 HTTP Response가 Browser로 return합니다.

728x90