▶ 스파게티 코드를 만드는 JSP
- Java 코드들이 HTML코드 중간중간에 삽입되는 코드
스파게티 예제코드) spaghetti.jsp

● 문제점
- 유지보수가 힘듦, 소스코드가 복잡해지고 Java 코드만 모아서 보기가 힘들어 오류를 찾기 힘듦
- 어떤 코드들이 연관되어있는 코드들인지 구별하기 힘듦
→ 이러한 문제점을 해결하기위해 MVC 모델 도입
▶ MVC
- Model(모델), View(뷰), Controller(컨트롤러)의 합성어로 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴
- 데이터 처리를 담당하는 Model, 화면 출력을 담당하는 View, 그리고 이 둘을 제어하는 Controller가 각자의 역할을 분담하여 사용자의 요청을 처리한 후 결과를 웹 브라우저에게 출력하게 됨
- MVC model에는 model1과 model2가 존재

● Model
- 백그라운드에서 동작하는 로직을 처리
- 업무 처리 로직(비즈니스 로직) 혹은 데이터베이스와 관련된 작업 수행
- 사용자가 원하는 데이터나 정보를 제공
- 프로그램의 정보나 데이터, DB등을 말함 ("출력 데이터"로 해석할 수 있음)
- 페이지의 이동간에 파리미터나 값들을 넘겨줄때, 이러한 값들은 담은 인스턴스를 의미
● View
- JSP 페이지와 같이, 사용자가 보게 될 결과 화면을 출력
● Controller
- 사용자의 입력처리와 흐름 제어 담당, 모델과 뷰를 제어하는 역할.
- 사용자의 요청을 받아서 그 요청을 분석하고, 필요한 업무 처리 로직(모델)을 호출
- 모델이 결괏값을 반환하면 출력할 뷰(JSP페이지)를 선택후 전달
▶ MVC model 1
- model 1 방식에서 JSP는 뷰와 컨트롤러의 역할을 모두 담당
- model 1 방식에서는 사용자의 요청을 JSP가 받아 모델을 호출
- 모델이 요청을 처리한 후 결과를 JSP를 통해 응답하게 됨
- JSP에 View(뷰)와 Controller(컨트롤러)가 혼재함

→ MVC model 1은 컨트롤러와 뷰의 구분없이 간단하고 빠르게 개발할 수 있는 장점이 있지만, 구현 작업이 복잡할 때는 역할이 구분되지 않아서 유지보수가 어려워짐
MVC model1 예제코드) spaghetti.jsp
- 스파게티 코드 문제를 해결하기위해 입력 코드와 출력 코드로 분리함
- 입력 코드에서는 제어로직을 구현하고, 출력 코드에서는 model을 이용하여 단순히 출력만을 담당
(이 예제에서는 변수 이름을 model로 했을뿐 변수 이름은 아무거나 사용해도 상관 없음)

▷ 예제 MVC model 1

▶ MVC model 2
- model 2 방식에서는 View(뷰)와 Controller(컨트롤러)가 분리되어 있음
- 사용자의 요청을 Controller인 서블릿이 받아 요청분석 후 모델 호출
- 모델로부터 데이터를 받아 View인 JSP로 전달하고, 이 View를 사용자에게 응답
- foward하여 서블릿에서 다루는 데이터를 JSP에게 전달
→ MVC model 2는 역할의 구분이 확실하기 때문에 설계가 model 1보다 어렵지만, 유지보수가 수월해짐

MVC model 2 예제코드)
▷ MVC2_Controller.java (서블릿 파일, Controller 역할)
- 서블릿에서 사용하는 데이터들을, JSP페이지에서 사용하기위해 foward 사용
ex) MVC2_Controller.java 서블릿에서 얻어온 데이터인 "model"을 MVC2_View.jsp 페이지에서 사용하기위해 forword


▷ MVC2_View.jsp (JSP파일, View 역할)
- foward를 통해 가져온 데이터인 "model"을 JSP에서 사용

▷ 예제코드 동작과정

▶ redirect(리다이렉트) vs foward(포워드)
● redirect(리다이렉트)
- 현재 작업한 내용이 유지되지 않고, 완전히 새로운 요청으로 다음 페이지로 전환 하는 기능
- url이 변경된다
ex) 로그인이 안되었을때 로그인 페이지로 이동, 게시판에 글 작성후 게시판 목록 페이지로 이동
● forward(포워드)
- 현재 작업한 내용을 다음 페이지에 어어갈수 있도록 request, response스코프에 담긴 값을 유지하며 페이지를 전환 하는 기능
- 현재 페이지에 들어온 요청을 다음 페이지로 보내는 기능
- url이 변경되지 않는다
- 실제로 클라이언트(웹 브라우저가)가 다른 페이지로 이동했는지 알 수 없음
'[JSP, 서블릿]' 카테고리의 다른 글
[JSP] 내장 객체 (0) | 2023.01.17 |
---|---|
[JSP] 인코딩 방식 지정 (0) | 2023.01.14 |
[JSP] GET요청과 POST 요청 (0) | 2023.01.13 |
[JSP] 서블릿 매핑 (0) | 2023.01.12 |
[JSP] 서블릿 작성하기 (0) | 2023.01.11 |
댓글