[Model2] MVC패턴 - Model1과 Model2 비교

류넹·2024년 2월 14일
1

Spring

목록 보기
1/50

# 목적

  • MVC 패턴에 대한 이해와 MVC1, MVC2 차이점 알아보기




❓ MVC 패턴 이란?

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



MVC 패턴 구성

1. Model

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

2. View

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

3. Controller

  • 사용자와 상호작용하여 사용자의 클라이언트 요청을 처리




MVC 패턴의 목적

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

적용사례

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

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

  • Python의 Django : MVC 패턴의 웹 애플리케이션 개발을 지원하는 프레임워크

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





💡 Model2 개발방식

  • 웹 애플리케이션 개발에 MVC 패턴을 적용한 것
    * mvc패턴은 웹어플리케이션에만 특화되어 있는 게 아님

Model2 목적

  • 비즈니스 로직과 디자인 코드를 분리해서 개발하기 위해 도입되었다.
    * 비즈니스 로직 : Java코드, 디자인 코드 : HTML코드



Model2 구성

1. Model

  • 비즈니스 로직 수행(업무로직 수행), 데이터베이스 액세스 담당
  • Java Class로 구현

2. View

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

3. Controller

  • 클라이언트의 HTTP 요청 처리
  • ServletJava Class로 구현




📌 Model1과 Model2

1. Model1

  • View, Controller를 JSP가 모두 담당
    • JSP 1개의 파일 내에 로직 요소(Java) + 디자인 요소(HTML)가 같이 섞여있기 때문에
      디자인이 바뀌면 java코드도 전부 다시 작성해야 함.
      디자이너와 개발자의 분업이 쉽지 않음
  • 장점
    • 단순한 구조로 개발 초기에 복잡한 설정 없이 빠른 개발 시작이 가능

M - HTML 데이터를 담당(h1, p, ul 등의 태그를 변수라고 가정할 수 있음)
V - CSS 디자인 담당
C - Javascript



2. Model2

  • 로직 요소(Java코드)와 디자인 요소(HTML코드)를 분리하기 위해 Model2 발명

M : Java
V : JSP 데이터를 표현만
C : Servlet




Model1과 Model2 응답 차이

1. Model1

  • JSP의 SendRedirect : 외부이동
    • ex) 고객센터에 문의전화 걸었을 때, 상담원이 담당 부서가 따로 있다며 해당 부서의 전화번호를 알려준 후 전화를 끊음

2. Model2

  • Servlet의 forward : 내부이동 (서버 톰캣 내에서만 이동)
    • ex) 고객센터에 문의전화 걸었을 때, 상담원이 담당 부서가 따로 있다며 전화를 끊지 않고 해당 부서로 전화를 돌려줌




Model1과 Model2 작성 순서

1. Model1

1) XML에 DB 쿼리 작성
2) Dao에서 ibatis/xml 호출
3) JSP에서 Dao 호출해서 화면에 출력


2. Model2

1) XML에 DB 쿼리 작성
2) Dao에서 ibatis/xml 호출
3) Service에서 Dao 호출
4) Controller에서 Service 호출
5) JSP에서 el표현식으로 화면에 출력




* Model2의 Controller

  • Model2에서는 JSP를 직접적으로 호출하는 걸 막기 위해
    JSP파일을 webapp 바로 밑에 두지 않고 WEB-INF 하위로 다 숨김
    (WEB-INF에 있는 파일을 실행하려면 Controller를 거치는 방법밖에 없음)

  • Model2 개발할 때는 FrontController 를 사용
    • FrontController는 업무로직을 수행하지는 않고 아래 5가지 작업만 함
      (근데 사실 FrontController는 프레임워크가 다 제공해줌)
        1. 요청 접수
        1. 요청 분석
        1. 적절한 요청핸들러 메소드 실행

        1. 이동할 경로 반환받기
        1. 해당 경로로 내부 이동하기
profile
학습용 커스터마이징 간단 개발자 사전

0개의 댓글