gi_dor

[Web] MVC 패턴 - Model1 Model2 본문

Back_End/JSP_Servlet

[Web] MVC 패턴 - Model1 Model2

기돌 2024. 2. 14. 15:25

MVC

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

Model

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

View

  • Model 이 제공하는 데이터의 표현 
  • Model 이 제공하는 데이터를 다양한 컨텐츠 타입으로 변환

Controller

  • 사용자(클라이언트)의 요청처리를  직접적으로 받아서 처리해주는 것
  • 사용자와 상호작용 
                  

  그래서 왜 만들었고 왜 쓰는데 

데이터와 비즈니스 로직을 시각적인 표현(디자인 적인 부분)으로부터 분리함 
덕분에 화면에 신경쓰지 않고 데이터와 비즈니스 로직을 구성 할수 있게된다.

 

📌 적용 사례

  • Model2 개발방식 : 웹 애플리케이션 개발에 MVC 패턴을 적용
  • Spring MVC : 스프링 MVC는 MVC 패턴의 웹 애플리케이션 개발을 지원하는 다양한 라이브러리를 제공한다
  • python django : MVC 패턴의 웹 애플리케이션 개발을 지원하는 프레임워크
  • struts : MVC 패턴의 웹 애플리케이션을 지워나는 프레임워크 (Spring 등장 이전에 사용 하던 프레임워크)

Model 1

- JSP로만 구현한 웹 애플리케이션이다.
- 클라이언트의 요청을 JSP가 받아서 처리하는 구조다.
- JSP 페이지에 비즈니스로직을 처리하는 코드(자바 코드)와 HTML 코드가 섞여있다.

 

Model 2

- 웹 애플리케이션 개발에 MVC 패턴을 적용
- Java 코드(비즈니스 로직)와 디자인 코드(HTML)를 분리해서 개발하기위해 도입.

1️⃣ Model

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

2️⃣ View

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

3️⃣ Controller

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

1. 요청처리(업무로직 호출, 데이터 획득/전달, 뷰 페이지로 이동)

2. 내부이동 - 브라우저에게 sample.jsp의 실행 요청
Controller와 jsp가 같은 요청객체, 응답객체 공유

요청파라미터 - 쿼리스트링, 폼입력값

//요청객체에 속성을 추가(컨트롤러의 데이터를 뷰에 전달하는 방법)

request.setAttribute(”이름1”, 객체1);    //담을 수 있는 데이터 타입의 제한 없음

request.setAttribute(”이름2”, 객체2); 

→ 컨트롤러에서 속성 담아놓으면 JSP까지 전달 가능(getAttribute()로)

→ 자바 코드가 실행된 후 JSP가 실행되도록 할 수 있음

→ /sample로 해도 sample.jsp로 내부이동

 

💡 HttpServletRequest, HttpSession, ServletContext 중 왜 HttpServletRequest에 담을까?
→ 응답이 가면 사라져서

💡 jsp를 직접적으로 호출할 수 없도록 WEB-INF 안에 넣어놓기(서버 바깥에서는 WEB-INF 안의 파일 호출 불가) Controller에서 담기 전이므로 직접 호출 시 jsp에 아무 데이터 출력되지 않음
→ Controller에서 내부이동을 통해서만 jsp 실행 가능

728x90

'Back_End > JSP_Servlet' 카테고리의 다른 글

Redirect , Forward  (0) 2024.03.11
FrontController - 간단  (0) 2024.02.14
세미 프로젝트 - 로그인 , 세션 다루기  (1) 2024.02.14
JSP 개념  (1) 2024.01.07
인텔리제이에서 Web 애플리케이션 프로젝트 만들기  (1) 2024.01.01