날아라쩡글이의 블로그입니다.

MVC패턴을 웹 개발방식에 사용하는 model2개발방식 본문

중앙 HTA (2106기) story/model2(MVC패턴)

MVC패턴을 웹 개발방식에 사용하는 model2개발방식

날아라쩡글이 2021. 12. 10. 14:02
반응형

model1은 요청1개당 JSP를 1개를 작성한다. 구조가 간단하다. 
JSP는 DB access를 하기위해 html과 java로직 구조를 작성한다. 
그럼 구조가 쉬운 반면, 로직의 재사용성이 떨어지고 유지보수가 떨어진다. 
이를 극복한 것이다. 

model2 개발방식으로 MVC패턴이라는 명칭을 가진다.
MVC패턴으로 웹 애플리케이션 개발 방식을 model2방식이라고 한다.

model2방식은 총 3가지고 나눠져있다.

  • model
    • 데이터(view에 표현될 데이터)
    • 데이터를 획득하는 과정에서 실행되는 자바클래스 전부를  의미한다. 
      • DB access작업으로 업무로직을 수행하는 자바클래스를 의미한다. 
      • Dao, Dto 등  통틀어서 모든 클래스를 모델이라고 한다.
  • view
    • model에 포함된 데이터의 표현을 담당하는 곳이다.
    • JSP에 해당된다. 
  • Controller
    • 클라이언트의 요청 처리를 담당하는 곳이다. 
    • 로직요소에 해당된다. 
    • Controller클래스라고 불린다. 
  • 안드로이드, GUI,UI개발시에 유용하게 사용된다. 
    원래는 프론트컨트롤러가 존재하지 않는다. 
    • 그러나 개발의 편의성을 위하여 앞에 추가한 것이다. 
  • 컨트롤러와 뷰는 특정요청을 진행할 수 있다. 
    • 사용자에게 종속적이다. 
    • 컨트롤러는 http, rest, web, service,Tcp/Ip로 특정요청을 처리하기 위해 변할 수 있다. 
    • 뷰 또한 어떤 소비방식으로 소비가 되냐에 따라서 뷰가 다양하게 출력이 가능하다. 
      JSP외에 다양하게 존재한다. 
  • 그러나 데이터(모델)은 클라이언트에게 비종속적이다.
    • 무슨요청을 하던지 데이터는 데이터일 뿐이다. 
  • MVC 패턴의 구성요소는 어떤 것으로 만들까?
    • 프론트 컨트롤러 
      • HTTP요청을 처리할 수 있는 자바 클래스
      • servlet으로 제작한다. 
    • 컨트롤러 
      • 일반 자바클래스로 제작
      • public void execute(HttpservletRequest request, HttpservletResponse response) {...}
      • 이 메소드를 포함하는 자바클래스를 제작할 예정이자.
        • 프론트컨트롤러로 부터 요청객체와 응답객체를 전달받아서 클라이언트의 요청을 처리하는 메소드이다. 
    • 자바클래스 (자바빈)
      • 업무로직, 데이터베이스에 access작업을 수행한다.
      • view가 표현할 model을 생성한다. 
    • JSP
      • 컨트롤러 혹은 프론트 컨트롤러로부터 전달받은 모델을 표현한다. 
      • 모델로 html컨텐츠를 생성한다. 
  • 프론트 컨트롤러는 우리가 신경쓸 필요가 없다. 
    오늘은 1차원 코딩을 작성해볼 예정이다. 
    우리가 만들어서 사용하지 않고, 라이브러리나 프레임워크를 사용할 예정이다. 

    우리는 컨트롤러와 JSP만 대상이다. 

model2 는 model1의 정반대 이다.

  • model1에서의 단점인 재사용성과 유지보수를 장점으로 승화했다. 
  • model1에서 장점인 어플리케이션이 단순함을 단점인 복잡함으로 변경했다. 

model2의 개발방식

  • 디자인 요소와 로직 요소가 완벽하게 분리된다. 
  • view를 담당하는 JSP에서 스크립틀릿 표현식<%%>을 제거할 수 있다.
    • (EL과 JSTL을 사용해서)
  • 장점 
    • 로직요소의 재사용성이 높아진다. 
    • 디자인요소와 로직요소가 분리되었기 때문에 복잡도가 감소 된다. 
    • 디자인요소와 로직요소가 분리되었기 때문에 유지보수성이 높아진다.
      • 디자인 : JSP 
      • 로직요소 : Controller
  • 단점
    • 프로그램의 구조가 복잡해진다. 
      • 개발구조의 이해가 필요하다. 
      • 라이브러리가 준비되어있어야한다. 
      • 셋팅이 필요하다. 
    • 라이브러리나 프레임워크의 추가 및 설정이 필요하다. 

서블릿

  • 클라이언트의 요청을 처리할 수 있는 자바클래스다. 
  • 클라이언트의 HTTP요청을 처리하는 자바클래스로 반드시 httpServlet을 상속받아야한다. 
  • 서블릿을 실행하기 위해서는 서버가 필요하다. 
    • 서버가 없으면 사용이 불가능하다. 
  • 서블릿의 객체 생성, 유지, 관리, 폐기, 요청에 적정한 서블릿의 실행을 전부 서버가 담당한다. 
  • http요청을 처리하는 서블릿은 반드신 웹어플리케이션 서버가 필요하다. 
    • Tomcat, Jboss, webLogic, 제우스 : 톰켓외에는 EJB서버도 포함한다.
      웹어플리케이션 서버의 프로그램이다.
    • 여기서 Tomcat은 대표적인 웹어플리케이션의 서버 프로그램이다. 
      • 웹어플리케이션의 대표적인 전용 서버이다. 
        • http의 요청만 처리한다.
      • httpservlet/JSP의 생성, 유지, 관리, 폐기 요청에 대한 적절한 httpservlet/JSP를 담당한다. 
        • 생성 : 객체생성
        • 유지 : 보유
        • 관리 : 기존 객체 삭제하고 새로운 객체로 update
        • 폐기 : 삭제
      • 서블릿/JSP의 엔진이다. 
        • 서블릿을 실행시키기 위한 엔진이다. 
      • 서블릿/ JSP의 컨테이너다. 
        • 제일중요한 부분
        • 컨테이너 
          • 객체의 라이프사이클을 관리한다. 
          • 객체를 담고있는 객체이다. 
          • 객체를 담고 라이프사이클을 관리한다. 
          • 객체에 대한 적절한 유지관리 및 객체의 실행(사용), 객체의 제공들을 지원한다. 
        • 즉, 서블릿을 담고 필요시에 내보내고, 유지관리와 실행과 사용을 도맡아서 진행한다. 
  • 자바클래스에서 context는 컨테이너의 역활을 수행하며, 객체를 담고있다는 것으로 받아들이면된다. 

HttpServlet

  • http요청을 처리하는 모든 웹 어플리케이션의 부모클래스다. 
  • JSP의 부모는 httpBasic이고 그의 부모는 httpServlet이다. 
  • 주요메소드는 
    • void init()
      • httpServlet 객체의 초기화를 담당하는 메소드이다.
      • Tomcat이 HttpServlet객체를 생성하면 init()메소드를 실행한다.
      • init()메소드를 재정의하면 싱행할 작업을 구현할 수 있다. 
      • 원래 객체의 초기화는 생성자가 도맡아하는 데 왜안할까? 
        원래 생성자는 default값이 없고, 매개변수를 이용한 생성자 재정의를 한다. 
        • 그래서 그냥 default값으로 init()메소드를 사용하는 것이다. 
        • Tomcate은 기본 생성자만 호출하기 때문
    • void destory()
      • httpservlet객체가 폐기되기 전에 실행되는 메소드이다. 
      • httpservlet에서 사용한 컴퓨터의 리소스를 해제하는 코드를 포함할 수 있다. 
    • void service(HttpServletRequest request, HttpServletResponse response)
      • http요청이 올때마다 무조건 실행되는 메소드이다. 
      • http요청을 분석해서 요청방식을 확인하고 (분석)
        요청방식에 따라서 아래에 나열된 메소드들 중 하나를 실행한다. 
      • httpServlet의 service(request, response)의 구현된 기능을 사용하는 대신, service(request, response)를 재정의해서 클라이언트의 http요청을 처리하는 코드를 직접 작성한다. 
        •  get이나 post를 사용하면 따로 작성해야하지만 servie로 한번에 사용하면 따로 작성하지 않아도 된다. 
      • 요청방식에 따라서 아래의 메소드 중 하나를 재정의하는 것이 아니라, 요청방식에 상관없이 실행되는service(request, response)를 재정ㅇ의하는 경우가 흔하다. 
        • 무조건 실행되기 때문이다. 
      • 메소드 : 원래 메소드는 7가지이고, 이 4가지가 제일 사용되며, get과 post가 제일많이 사용된다.  
        • void doGet(HttpServletRequest request, HttpServletResponse response)
          • get 방식으로 Http를 처리하는 메소드이다.
          • get방식은 데이터를 조회하는 요청이다. (조회)
        • void doPost(HttpServletRequest request, HttpServletResponse response)
          • post방식으로 Http를 처리하는 메소드이다. 
          • post방식은 클라이언트가 전달한 데이터를 서버에 저장하는 요청이다. (추구 후 저장)
        • void doPut(HttpServletRequest request, HttpServletResponse response)
          • put방식으로 Http를 처리하는 메소드이다. 
          • put방식은 서버의 기록데이터를 수정하는 요청이다(수정)
        • void doDelete(HttpServletRequest request, HttpServletResponse response)
          • Delete방식으로 Http요청을 처리하는 메소드이다.
          • Delete방식은 서버의 기존데이터를 삭제하는 요청이다(삭제)
    • 사용자 정의 httpServlet작성하기 : 원래는 프론트컨트롤에서 사용하기 때문에 라이브러리를 사용한다. 
      • 1. httpservlet 클래스를 상속받는다. 
      • 2. httpservlet클래스의 void service(HttpServletRequest request, HttpServletResponse response)메소드를 재정의한다. 
      • 3. 사용자정의 httpservlet클래스를 요청 URL와 매핑시킨다.
        • mapping이란 이런 url이 오면 실행해줘, JSP는 상관없지만 Servlet에서는 필요하다.
      • model2방식에서 프론트컨트롤러를 httpServlet을 상속받아서 작성하는 경우가 많다. 
        servlet이 클라이언트의 서버처리하기 위해 요청하는 경우가 httpServlet이다. 
반응형

'중앙 HTA (2106기) story > model2(MVC패턴)' 카테고리의 다른 글

JSTL(fmt태그)  (0) 2021.12.15
JSTL(Core태그)  (0) 2021.12.14
EL  (0) 2021.12.13
URL과 URI의 차이  (0) 2021.12.13
Comments