라이브러리는 도서관 아닌가요

JSP 7 - model 1 to model 2 본문

Java/JSP

JSP 7 - model 1 to model 2

veryhi 2022. 2. 9. 18:26

 

흔히 웹 개발을 하다 보면 '포워딩을 한다'거나 '리디렉팅을 한다'고 한다.

 

단어의 뜻을 살펴보면 직관적으로 어떤 역할을 하는지 어느정도 이해할 수 있다.

 

forwarding

새로운 페이지를 불러 온다. 그리고 이전 페이지에서 하던 작업(data)을 이어나갈 수 있다.

 

redirecting

새로운 페이지를 불러 온다. 하지만 작업 이어가기 불가능.

 

 

 

Controller

입력과 제어를 담당

 

 

 

< JSP MVC model1 >

 

JSP 내에서 자바 코드도 돌리고 배포될 뷰 파일도 다 작성하는 방식이다.

 

상단에 <style>을 따로 빼듯 <% 데이터 입력제어만 %>

 

하단에 <body> 안에서 <% 데이터 출력만 %>

 

 

 

< JSP MVC model2 >

 

model1의 서블릿(jsp)에서 하나로 묶여 있던 controller, model, view를 

 

controller, model   &&   view로 분리한다.

 

즉 jsp가 담당하는 view만 따로 빼내는 것이다.

 

 

 

그리고 model2는 디스패처(Dispatcher)라는 개념을 가져온다.

 

controller는 이 Dispatcher를 이용해서 포워딩(forwarding)이라는 작업을 한다.

 

이 포워딩이라는 작업은

 

controller, model에서 생성되는 서블릿(1)으로부터

 

view에서 관리하는 서블릿(2)으로 데이터를 넘겨주는 역할을 한다.

 

흔히들 view(jsp)에 포워딩한다고도 한다.

 

일반적으로 간소화된 model2에서는 컨트롤러 하나에 뷰 하나가 연결된다고 보는데,

 

해당 작업을 계속하다보면 결국 각각의 연결을 위해 디스패처도 하나씩 늘어나게 된다.

 

나중에는 이런 비효율적인 과정을 멈추고 디스패처를 하나로 집약화한다.

 

그래서 Controller는 더 이상 business 로직에 속하지 않고,

 

일반적으로 사용되는 POJO 클래스로 분리되고, 집약화된 하나의 디스패처에 의해 관리된다.

 

요약하면 사용자 요청이 들어오면 디스패처가 적절한 컨트롤러를 찾아 연결해주고,

 

해당 컨트롤러가 특정 뷰를 호출하게 된다.

 

 

 

두 서블릿(controller측과 view측) 간에 데이터를 주고 받으려면 결국 저장소가 필요해진다.

 

이 때 여러 저장소가 존재하는데, forwarding에 사용되는 저장소는 request이다.

 

1. page (모든 세션에서 공유)

 

2. request

 

3. session (현재 세션에서만 공유)

 

4. application

 

5. cookie

Comments