MVC모델

김성환·2022년 8월 8일

스프링

목록 보기
4/4

MVC패턴이란?

MVC패턴이란 MODEL, VIEW, CONTROLLER의 약자로 하나의 애플리케이션을 구성할 때, 그 구성을 3가지의 역활로 나누어 구성한 패턴을 의미한다.

M - MODEL

모델은 애플리케이션의 정보, 데이터, 데이터베이스 등을 지칭하는 것을 의미한다.
예를들면 DTO, DOMAIN, DAO, 레포지토리 등등을 의미한다.

V - VIEW

뷰는 사용자에게 보여지는 화면,ui를 의미한다.
예를들면 JSP, REACT등등으로 구성된 프론트 단의 화면을 의미한다.

C - CONTROLLER

컨트롤러는 모델과 뷰를 통제(제어)해 뷰와 모델이 직접 상호 통신을 하지 않도록 관리하는 것을 의미한다.

MVC모델의 2가지 종류

MVC모델은 모델1과 모델2가 존재한다.

모델1구조

아래는 모델1 구조의 모습이다.

모델1의 경우 뷰와 컨트롤러를 모두 jsp가 담당하는 형태이다.
(즉, jsp파일에서 다른 jsp파일로 옮기는 제어를 모두 jsp가 담당하게 된다.)
(그러다보니, 뷰와 컨트롤러의 분리가 모호해진다)

모델2구조

아래는 모델2 구조의 모습니다.

모델1에서는 jsp가 뷰와 컨트롤러의 역활을 모두 수행했지만 모델2에서는 뷰의 역활만을 하게되었다.
또한 컨트롤러의 역활을 서블릿이 수행하게 되었다.
즉, 요청을 하나의 서블릿이 받고 해당 요청을 처리한 결과를 JSP로 포워딩 시킨 것이다.

스프링에서의 MVC2모델

스프링에서는 MVC2모델 구조가 조금 다르다.
기존의 MVC2모델의 경우 서블릿 컨테이너가 멀티 쓰레드를 지원하기 때문에, 여러 서블릿을 사용하여 각각의 요청들을 처리하였다, 이때, 각 쓰레드(서블릿)이 처리하는 로직 중 중복이 되는 로직이 생길 수 있게 되고 이것은 비효율적이기 때문에, 해당 문제를 해결하기 위해 디스페쳐서블릿이 등장하게 되었다.

스프링MVC2 구조

스프링 MVC2 구조는 디스페쳐서블릿에 의해 구조가 다르다.
아래는 스프링 MVC2 구조이다.

해당 구조의 동작 순서를 살펴보면 다음과 같다.
1.핸들러 조회 : 핸들러 매핑을 통해 URL에 매핑된 핸들러(컨트롤러) 조회
2.핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터 조회
3.핸들러 어댑터 실행: 핸들러 어댑터 실행
4.핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행
5.ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해 반환.
6.viewResolver 호출: 뷰 리졸버를 찾아 실행한다.
⇒ JSP: InternalResourceViewResolver가 자등 등록되어 사용된다.
7.View 반환: 뷰 리졸버는 뷰의 논리 이름을 물이 이름으로 바꾸고 렌더링 역할을 담당하는 뷰 객체 반환.
⇒ JSP: InternalResourceView(JstlView)를 반환하는데, 내부에는 forward() 가 있다.
8.뷰 렌더링: 뷰를 통해서 뷰를 렌더링한다.

  • 핸들러매핑 : 요청 URL과 매핑되는 컨트롤러 검색 후 매핑된 컨트롤러 리턴 해주는 역활
  • 핸들러어뎁터 : 매핑된 컨트롤러에 대한 메서드 호출 및 컨트롤러의 실행 결과를 ModelAndView객체로 변환후 리턴하는 역활
  • 뷰리졸버 : 디스페처서블릿이 ModelAndView의 view 이름을 검색 후 view객체를 찾아주는 역활
profile
개발자가 되고 싶다

0개의 댓글