MVC 패턴( MVC1,MVC2 )

최현석·2022년 10월 13일
0

JSP

목록 보기
2/13

🧩MVC패턴

  • M : Model
    -> 사용자가 원하는 데이터나 정보를 제공
    -> 애플리케이션의 정보, 데디터를 나타낸다.
    -> 이러한 data, 정보들의 가공을 책임지는 영역을 말한다.

  • V : View
    -> 사용자의 요청을 화면으로 출력
    -> input 텍스트, 체크박스 항목 등과 같은 사용자의 인터페이스 요소를 나타낸다,
    데이터 및 객체의 입력, 그리고 보여주는 출력을 담당한다.
    -> 테이터를 기반으로 사용자들이 볼 수 있는 화면이다.

  • C : Controller
    -> 사용자의 요청을 처리하고, 그 요청에 따른 전체적인 흐름 제어
    -> 데이터와 사용자인터페이스 요소들을 잇는 다리역할을 한다.


    사용자는 얻고자 하는 정보나 기능을 컨트롤러에게 요청한다.
    컨트롤러는 사용자의 요청을 수신하고 그에 맞는 비즈니스 로직을 수행한다.
    비즈니스 로직을 수행하면서 컨트롤러는 필요에 따라 모델을 호출하여 데이터를 요청한다.
    요청을 모두 처리하면 를 통해 사용자가 원하는 정보를 시각적으로 보여준다. (화면으로 출력)


🧩MVC model1(MVC1)

  • MVC1 패턴의 경우 ViewController모두 JSP가 담당하는 형태를 가진다. 즉, JSP하나로 유저의 요청을 받고 응답을 처리하므로 구현의 난이도는 쉽다.

  • 단순한 프로젝트에는 괜찮겠지만, 내용이 복잡하고 거대해질수록 이 패턴은
    힘을 잃는다. 즉 유지보수에 있어서 문제가 발생한다.

  • 웹 브라우저의 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용해서 작업을 처리하고, 결과를 클라이언트에 출력

  • Model 1 아키텍처에서 Model의 기능은 JavaBeans에 의해 이루어짐

  • 모델(Model)은 데이터베이스 연동 로직을 제공하면서, DB에 검색한 데이터가 저장되는 자바 객체를 말함

  • JavaBeans의 Bean는 자바에서 객체를 의미하는 용어이고, JavaBeans는 데이터베이스 연동에 사용되는 자바 객체를 의미함


    1) 클라이언트가 웹 브라우져를 통해서 hello.jsp 파일 요청
    2) 웹 서버가 요청을 받아서 hello.jsp에 대한 요청을 servlet(JSP) Container로 전달
    3) 해당하는 JSP 파일을 실행
    4) JSP와 Java Bean을 사용하여 클라이언트에게 response를 위한 html 문서를 구성
    5) 요청이 들어왔던 곳으로 response


🧩MVC model2(MVC2)

  • MVC2 패턴은 널리 표준으로 사용되는 패턴이다.

  • 요청을 하나의 컨트롤러(Servlet)가 먼저 받는다. 즉 MVC1과는 다르게
    Controller, View, Model분리되어 있다.

  • 따라서 역할이 분리되어 MVC1 패턴에서의 단점을 보완할 수 있다.

  • 그러므로 개발자는 M,V,C 중에서 수정해야 할 부분이 있다면, 그것만
    꺼내어 수정하면 된다.

  • 협업유지보수가 유리하다

  • 규모가 크고 개발 후에도 주기적으로 유지보수가 필요한 프로젝트에 적합


1) 클라이언트가 웹 브라우져를 통해서 hello.jsp 요청
2) 웹 서버가 요청 처리를 위해서 해당 페이지를 찾아서 Web Container로 전달
3) Servlet(Controller)이 응답
4) 이에 필요한 Java Bean을 불러서 데이터를 가져옴
5) 데이터를 이용하여 View와 연결 -> 주로 Controller가 View와 Model1을 합치는 기능을 수행
6) 생성한 웹 페이지를 웹 서버 쪽으로 전송
7) 웹 서버가 전송받은 웹 페이지를 클라이언트에게 전송


🧩 MVC 패턴에서 Service Model 의 역할

  • MVC 패턴의 핵심은 View는 자신이 요청할 Controller만 알고있으면 되고, Controller는 화면에서 넘어오는 매개변수들을 이용해 Service 객체를 호출하는 역할을 한다. Service 는 불필요하게 Http 통신을 위한 HttpServlet을 상속 받을 필요도 없는 순수한 자바 객체로 구성된다(그렇기에 Service 에 request나 response와 같은 객체를 매개변수로 받아선 안된다. 그걸 사용해야하는 작업은 컨트롤러에서 해야한다.).

  • 그렇기에 자신을 어떤 컨트롤러가 호출하든 상관없이 필요한 매개변수만 준다면 자신의 비즈니스로직을 처리하게된다. 즉 모듈화를 통해 어디서든 재사용이 가능한 클래스파일이라는 뜻이다.

  • 단순 Web 기반이 아니라 추후 native app 으로 view단이 변경되더라도 Service는 view에 종속적인 코드가 없기때문에 그대로 재사용 할 수 있어야 한다. 그리고 추가적인 요청사항이 들어오면 기존 소스를 수정하는게 아니라 기존 service 인터페이스를 구현한 다른 클래스를 구현해 그 객체를 사용하게끔 하는것이다.

  • 즉, Service의 역할은 DAO가 DB에서 받아온 데이터를 전달받아 가공하는 것이다.
    컨트롤러에서 서비스로 파라미터를 넘길때 request객체나 model을 그대로 던지는게 아니라 알맞는 POJO형태의 객체로 파라미터를 가공한 후 던지면 됩니다.
    그럼 서비스는 그걸 받아서 비즈니스 로직을 처리하고 결과를 리턴하면 컨트롤러가 다시 그걸 받아서 모델에 담고 뷰로 전달합니다.

💊참고사이트

https://juyoungit.tistory.com/119
https://blog.naver.com/zxxne/222482502102

0개의 댓글