도당탕탕

MVC와 MVC FrameWork 본문

Spring

MVC와 MVC FrameWork

backlo 2020. 1. 16. 00:18

INTRO

  1. MVC 패턴에 대해 알기
  2. Spring MVC 프레임워크에 대해 알기
  3. Spring MVC 아키텍쳐를 이해하기
  4. 둘의 차이 살펴보기

MVC 디자인 패턴

MVC-Pattern

  • MVC패턴이란?
    • 디자인 패턴 중에 하나다.
    • Model, View, Controller 로 구성하여 세가지 역할로 구분한다.
    • 사용자가 controller를 조작하여 controller는 model를 통해 데이터를 가져오고 그정보를 바탕으로 view에 시각적인 표현을 나타냅니다.
  • Model
    • 애플리케이션의 정보, 데이터 즉 상태를 가지고 있다.
    • 모델에서는 정보, 데이터들의 가공을 책임지고 있다.
    • 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
      • 모든 정보들을 가지고 있어야 한다.
    • 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
      • UI를 직접 수정하는 로직이나 뷰를 참조하는 내부 속성값을 가지고 있지 말아야 한다.
    • 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야만 한다.
      • 모델이 가지고 있는 정보는 모델만 가지고 있어야 한다.
  • View
    • 사용자 인터페이스 요소를 나타낸다.
    • 데이터 및 객체의 입력, 출력을 담당한다.
    • 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
      • 즉, 화면에 표시하기만 하는 로직만 가지고 있어야 한다.
    • 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다.
      • 다른 요소를 참조하거나 어떻게 동작하는지 알아서는 안된다. 즉 뷰는 데이터를 받으면 화면에 표시해주는 역할만 가진다.
    • 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.
      • 데이터가 변경하면 이를 모델에게 전달해서 모델을 변경하는 로직을 구현해야한다.
    • 재사용이 가능하게끔 설계를 해야 하며 다른 정보들을 표현할 때 쉽게 설계를 해야 한다.
  • Controller
    • 모델과 뷰를 잇는 다리 역할이다.
    • 사용자가 데이터를 만들거나 수정하는 이벤트를 발생하면 그 이벤트를 처리하는 부분을 뜻한다.
    • 모델이나 뷰에 대해서 알고 있어야 한다.
      • 변경 이벤트가 발생하면 컨트롤이 중재하기 위해 모델과 그에 관련된 뷰에 대해서 알고 있어야 한다.
    • 모델이나 뷰의 변경을 모니터링 해야 한다.
      • 모델이나 뷰의 변경 통지를 받으면 해당 로직에 맞게 바꿔 각각의 구성 요소들에게 통지를 해야한다.
  • 왜 MVC패턴을 사용해야 할까?
    • 사용자가 보는 화면, 데이터 처리, 이를 중재하는 컨트롤을 나눠서 구현을 하면 각각 맡은바에만 집중을 할 수 있다. 즉 공장에서도 하나의 역할만 하면 효율적인 분업 효과를 받을 수 있듯이 이러한 패턴을 사용한다.
    • 이러한 패턴을 사용함으로써 애플리케이션을 만들면 유지보수, 확장성, 유연성이 증가하고 개발의 치명적인 문제점인 중복코드도 사라진다.

FrameWork

  • 프레임워크란?

    • 정의에 따르면 특정한 목적에 사용되는 사고체계이다.

    • 즉 공통으로 사용하는 라이브러리, 개발 도구, 인터페이스를 제공하는 공간이다.(ex: 스프링 프레임 워크)

    • 개발자들이 따라야 하는 가이드라인을 가진다.

    • 개발할 수 있는 범위가 정해져 있다.

    • 개발자를 위한 다양한 도구들이 지원된다.

    • 장점 및 단점

      장점
        1. 개발 시간을 줄일 수 있다.
        2. 오류로부터 자유로워 질 수 있다.
      단점
        1. 프레임 워크에 너무 의존하면 개발능력이 떨어져 프레임 워크 없이 개발하는 것이 불가능 할 수 있다.

Spring MVC 프레임워크

Spring MVC에서 Model, View ,Controller

  • Model
    • 애플리케이션 상태(data)를 나타낸다.
    • 일반적으로 POJO로 구성된다.
    • Java Beans이다.
  • Model Implementations
    • Map<Stirng, Object> model : Controller 메소드에 argument로 값을 넣어주면 Spring FrameWork에서 자동으로 Model을 만들어주고 해당 주소값만 넘겨준다. 하지만 name을 반드시 지정해야하는 단점이 있다.
    • Model model : 모델이라는 인터페이스를 넣어주면 자동으로 생성해 model 값을 넣어준다. 가장 자주 사용하는 model 형식이다.
    • ModelMap model : Model 인터페이스의 체인형식이다.
  • View
    • 디스플레이 데이터 또는 프레젠테이션이다.
    • 모델 데이터의 랜더링을 담당하며, HTML output을 생성한다.
    • JSP, Thymeleaf등 템플릿 엔진들을 지원한다.
  • Controller
    • View와 Model 사이의 인터페이스 역할을 한다.
    • Model/View에 대한 요청을 적절한 로직으로 수행하고 결과를 Model에 담아 View에 전달한다.
    • 즉 Model Object와 View Name을 반환 한다.
    • Servlet 이라 본다.
  • Controller가 가지는 Annotation
    • @Controller: Spring Container에 bean으로 등록해준다. (@Component 의 구체화 이다.)
    • @Requestmapping: value에는 실행시킬 url이 들어가고 method에는 HTTP 메소드가 들어간다.
    • Class Level Mapping : 모든 메소드에 적용되는 경우를 말한다. (ex: /home)
    • Handler Level Mapping : 요청 url에 대해 해당 메서드에서 처리해야 되는 경우를 말한다. (ex: /home/login)
    • @RequestParam : Get요청에 대한 파라미터 값을 자동으로 들어간다.

SpringFrameWork가 제공하는 객체들

MVC-Architecture

  • DispatcherServlet

    • 사용자의 요청을 받는다.
    • Dispatcher가 받은 요청은 HandlerMapping으로 넘어간다.
  • HandlerMapping

    • 사용자의 요청을 처리할 Controller을 찾는다.
    • 요청 url에 해당하는 Controller 정보를 저장하는Table을 가진다.
    • 실질적 프로덕션 코드들이 있는 클래스들을 Reflection을 통해 스케쥴링 하고 매핑 시켜 클라이언트의 요청이 오는 url을 통해 맞는 매핑 값을 실행시킨다.
  • View Resolver

    • Controller가 반환한 view Name에 Prefix, Suffix를 적용하여 View Object를 반환 한다.
    • 이후 해당 View에 이 Model data를 이용하여 적절한 페이지를 만들어 사용자에게 보여준다.

그 외

  • Gradle 빌드 프로젝트 일 경우 application.properties를 통해 프로젝트를 설정 할 수 있다. (.yml, .xml)
  • Filter: Dispatcher Servlet에 들어가기전에 요청에 대해 점검하여 바로 응답을 할지 거절할지 Dispatcher Servlet 로 빠질지 결정하는 구간이다.

MVC 패턴과 Spring MVC Framework의 차이

  • MVC 패턴은 말그대로 디자인 패턴이고 Spring MVC 프레임 워크는 MVC 기반의 개발 공간이라 보면 된다.
  • 굳이 표현하자면 스프링 프레임 워크는 MVC 패턴 기반으로 만들어 졌다고 보면 된다.

'Spring' 카테고리의 다른 글

JDBC Template에 대해서  (0) 2020.01.16
Comments