본문 바로가기
Spring

Model2_MVC패턴 (Spring 들어가기 전)

by 유서담 2024. 2. 15.

MVC 패턴

 - 애플리케이션을 Model-View-Controller로 역할을 나누어서 개발하는 방식이다

 

 

MVC 패턴의 구성

Model

  • View에 표현할 데이터
  • View에 표현할 데이터를 획득하는 작업

 

View

  • Model이 제공하는 데이터 표현
  • Model이 제공하는 데이터를 다양한 컨텐츠 타입으로 변환(HTML 컨텐츠, XML 컨텐츠, JSON 컨텐츠)

 

Controller

  • 사용자와 상호작용

 

 

MVC 패턴의 목적

  • 데이터와 비즈니스 로직을 시작적인 표현(디자인 요소)으로부터 분리해 줌으로써 화면에 신경 쓰지 않고 데이터나 비즈니스 로직을 구성할 수 있게 한다

 

 

 

MVC패턴의 적용사례 

 

Model2 개발방식

  • 웹 애플리케이션 개발에 MVC 패턴을 적용한 것

Spring MVC

  • 스프링 MVC는 MVC 패턴의 웹 애플리케이션 개발을 지원하는 다양한 라이브러리를 제공한다

python의 django

  • python의 django도 MVC 패턴의 웹 애플리케이션 개발을 지원하는 프레임워크다

struts, struts2

  • MVC 패턴의 웹 애플리케이션 지원 프레임워크(spring 등장 이전에 사용했던 프레임워크다)

 


 

 

Model2 개발방식

- 웹 애플리케이션 개발에 MVC 패턴을 적용한 것

 

 

Model2 개발방식의 목적

  • 자바코드(비즈니스 로직)와 디자인코드(HTML코드)를 분리해서 개발하기 위해서 도입되었다

 

 

Model2 개발방식의 구성

 

 

Model

  • 비즈니스 로직 수행(업무로직 수행), 데이터베이스 엑세스 담당
  • 자바 클래스로 구현

 

View

  • 모델이 제공하는 데이터를 표현한다
  • JSP로 구현

 

Controller

  • 클라이언트의 HTTP 요청 처리
  • 서블릿과 자바 클래스로 구현

 

Model2 개발방식

 

파라미터로 받아온 값을 속성에 저장해서 내부이동

 

 

 

 

 

프론트 컨트롤러 패턴

요청을 받아들이고, 처리를 조정하며, 적절한 리소스 또는 컴포넌트에 전달하는 중앙 제어 지점을 제공한다. 이러한 방식으로 코드의 모듈화와 유지보수성을 향상시키고, 응용 프로그램의 구조를 단순화할 수 있다

 

 

프론트 컨트롤러 구성요소

구성요소 역할
프론트 컨트롤러(Front Controller) 클라이언트의 요청을 받아들이는 중앙 컨트롤러의 역할
일반적으로 웹 애플리케이션에서는 URL 라우팅, 요청 파라미터 해석등을 처리
디스패처(Dispatcher) 프론트 컨트롤러에 의해서 호출되며, 요청에 따라서 적절한 핸들러(컨트롤러)를 선택하여 실행한다
컨트롤러(Controller) 실제 비즈니스 로직을 처리하는 구성요소.
프론트 컨트롤러에 의해 호출되어 요청을 처리하고, 필요에 따라 모델을 업데이트하고 뷰를 선택한다
모델(Model) 응용프로그램의 데이터와 비즈니스 로직을 표현한다
컨트롤러가 모델을 조작하여 데이터를 처리하고 업데이트한다
뷰(View) 사용자에게 결과를 표시하는 역할 수행
컨트롤러가 모델을 이용하여 적절한 뷰를 선택하고, 사용자에게 결과를 보여준다

 

 

 

프론트 컨트롤러의 동작 순서

  1. 클라이언트가 요청을 보냈을 때
  2. 프론트 컨트롤러가 클라이언트의 요청을 접수받는다.
  3. 프론트 컨트롤러는 클라이언트의 요청을 분석해서 적절한 요청핸들러 메소드를 실행한다. 
    • 요청핸들러 메소드는 컨트롤러 클래스에 정의된 메소드다.
    • 요청핸들러 메소드는 클라이언트의 요청을 실질적으로 처리하는 메소드다.
  4. 요청핸들러 메소드는 클라이언트의 요청을 처리하기 위해서 업무로직을 호출하고, 데이터를 획득한다.
  5. 요청핸들러 메소드는 획득된 데이터를 뷰에 전달하기 위해서 요청객체에 속성으로 저장한다.
  6. 요청핸들러 메소드는 내부이동할 JSP 페이지 경로를 반환한다.
  7. 프론트컨트롤러는 요청핸들러 메소드가 반환한 JSP 경로로 내부이동해서 JSP를 실행한다.
  8. JSP에서는 EL 표현식을 사용해서 요청객체의 속성으로 전달받은 데이터를 표현한다.

 

FrontController 패턴 동작 예시

 

 

 

Redirect와 Forward

 

Redirect

  • void response.sendRedirect(String url)  : 지정된 url을 재요청하라는 응답을 클라이언트에게 보낸다

 

Forward

  • RequestDispatcher 객체가 제공하는 메소드를 활용해서 포워드 방식의 내부이동이 가능하다
  • RequestDispatcher request.getRequestDispatcher(String path) 지정된 경로로 클라이언트의 요청을 보내는 RequestDispatcher 객체를 반환한다 

 

RequestDispatcher의 주요 메소드

 

  • void forward(ServletRequest req, Servlet resp)
    • RequestDispatcher 객체에 지정된 경로로 내부이동한다. 내부이동 대상 JSP/서블릿에 요청객체와 응답객체를 전달해서 공유
  • void include(ServletRequest req, ServletResponse resp)
    • 응답에 지정된 경로의 JSP를 포함시킨다