본문 바로가기
  • hello world
BackEnd/Servlet

MVC 패턴 · Dispatcher

by JJoajjoa 2023. 10. 5.

 

 

MVC 패턴

사용자 인터페이스와 비즈니스 로직을 분리하여

유지보수성이나 재사용성을 향상시키는 목적으로 사용하는 것

 

Model View Controller

 

모델: 나  //  뷰: 프로필  //  컨트롤러: 클릭

 

Model

데이터의 정보를 저장하고 전달하는 역할

데이터와 그 데이터를 처리하는 비즈니스 로직을 포함함

 

1. 데이터

일반적으로 모델은 어플 비즈니스 도메인을 나타내는 데이터를 포함함

>> 상품, 주문, 고객 등과 같은 개념들이 모델로  표현할 수 있음

 

2. 비즈니스 로직

데이터에 처리되어야 하는 연산과 규칙도 포함됨

>> 주문모델 - 주문취소, 결제완료 등을 처리하는 메서드가 있음

 

3. 상태관리 

자기 상태를 스스로 관리함

해당 상태를 다른 데이터베이스에 저장하며, 읽기 및 업데이트 가능

 

4. 변경 통지

MVC 패턴에서 모델은 Observer 패턴을 사용하여 자신의 상태가 변했음을 

컨트롤러나 뷰에 통지할 수 있음

 

5. 독립성

뷰나 컨트롤러로부터 독립적임

→ 뷰의 사용이나 컨트롤러의 요청에 모델 코드가 변경될 필요 없음

 

 

View

사용자에게 보여지는 부분인 UI를 담당

 

1. 데이터 표현

뷰는 모델이 제공하는 데이터를 사용자에게 표현하는 것

 

2. 템플릿 엔진

스프링 MVC 에서 뷰는 주로 JSP, Thymeleaf, FreeMarker 등의 서버 사이드 엔진을 이용

이러한 템플릿 엔진들은 동적인 웹페이지 생성을 가능하게하며

서버 측에서 데이터와 함께 HTML을 생성해서 클라이언트에게 전달함

>> 완전 프런트엔드는 아님

 

3. 데이터 바인딩

컨트롤러로부터 받은 모델 객체(데이터)를 화면에 바인딩함

실제 데이터 값을 화면 요소에 연결하여 동적으로 내용을 변경할 수 있음

 

4. 입력 처리

사용자의 입력을 받아 컨트롤러에 전달함

 

5. 독립성

MVC 패턴에서 뷰는 모델의 구조나 로직을 알 필요가 없음

>> 뷰는 단순히 컨트롤러가 전달해준 데이터를 화면에 출력하기만 하면 되니까

 

 

Controller

MVC 패턴에서 사용자의 요청을 처리하고 뷰에 그 결과를 전달함

모델과 뷰 사이의 중개 역할을 하며, 모델을 변경하거나 변경된 상태를 뷰에 전달할 수 있음

 

1. 요청 처리

클라이언트로부터 들어오는 모든 요청을 받아들임

이 요청은 웹 어플리케이션에서 HTTP 요청(GET, POST 등)으로 들어올 수 있음

 

2. 비즈니스 로직

받은 요청에 따라 모델을 호출함

 

3. View 선택

비즈니스 로직이 처리된 후 반환된 결과 데이터(모델)와 함께 어떤 화면(뷰)을 보여줄지 결정함

 

4. 모델과 뷰 연결

뷰에게 처리 결과 데이터(모델)를 전달함

이후 View 컴포넌트가 데이터와 템플릿 엔진을 사용하여 최종 HTML 페이지를 생성함

>> 세션 쿠키 같은것도 관리할 수 잇움

 

5. @Controller 어노테이션

컨트롤러 클래스를 이용하기 위해서는 어노테이션을 붙인다

각 핸들러 메서드가 특정 URL 패턴에 대응되어 HTTP 요청을 처리 후 적절한 응답을 반환함

>> 적절한 응답: 알맞은 뷰랑 모델

▶ 어노테이션 = 주석

 

 

 


 

Dispatcher Servlet

클라이언트로부터 들어오는 모든 요청을 받아 처리하고 응답을 생성하여 반환하는 컴포넌트

웹 어플리케이션의 Front Controller

 

1. 클라이언트 요청 수신

클라이언트로부터 들어오는 모든 HTTP 요청을 가로챔

 

2. 핸들러 매핑  Handler Mapping

요청 URL과 매핑된 핸들러(컨트롤러)를 찾기위해

등록된 핸들러 매핑 구조에 따라 HandlerMapping 객체를 사용함

핸들러 매핑은 어떤 컨트롤러가 해당 요청을 처리해야 하는지 결정함

 

3. 핸들러 실행  Handler Execution

위에서 선택된 핸들러를 실행하여 실제 비즈니스 로직을 처리함

컨트롤러는 클라이언트의 요청을 처리하고 필요한 비지니스 로직 및 서비스 호출 등의 작업을 수행함

 

4. 모델 생성 및 전달

핸들러가 실행되면 해당 작업 결과 모델 객체를 생성하고 뷰에 전달함

모델 객체는 사용자에게 표시될 데이터와 뷰 템플릿에서 사용될 속성 값으로 구분됨

 

5. 뷰 결정 View Resolution

핸들러가 반환한 뷰 이름을 기반으로  적절한 ViewResolver 객체를 사용하여 실제로 보여줄 뷰 템플릿을 결정

 

6. 뷰 렌더링  View Rendering

뷰 이름과 실제 연결되는 뷰 파일을 찾아서 모델 객체와 이 정보를 뷰에 전달하여

최종적인 응답(HTML 등) 페이지를 생성함

>> 포워드를 통해서

 

7. 응답 반환

최종적으로 생섣왼 응답페이지를 HTTP 응답에 포함하여 클라이언트에게 반환함

 

 

 

☞ 디스패처 서블릿은 스프링 프레임워크에서 중앙 집중식으로 클라이언트 요청 처리 흐름을 관리함! ☜

여러 기능들과 함께 협력하여 웹 어플리케이션 개발 및 관리작업의 수준을 높여줄 수 있음

여러 기능 예시

 

☞ 예시

디스패처 등록을 안해서 아직 끝이 아님

 

▼ 디스패처 등록

 

 

'BackEnd > Servlet' 카테고리의 다른 글

DAO · DTO · Entity (+ ect)  (0) 2023.10.06
[Servlet] JSP 02  (0) 2023.10.05
[Servlet] JSP 01  (0) 2023.10.04
[Servlet] 02  (0) 2023.10.04
[Servlet] 01  (0) 2023.09.27