본문 바로가기

Room 102. Back-end/Spring

[실전 개발자를 위한 Spring Framework ] 강의 - MVC 패턴

07강 Spring MVC

  • 목차
    • 내용
      • MVC 패턴과 Spring MVC
      • Spring MVC 설정
    • 학습 목표
      • MVC 웹 개발 패턴에 대해 이해하고 Spring MVC 프로젝트를 설정합니다.
      • Front Controller 패턴과 ServletDispatcher 에 대해 이해합니다.
  • SpringMVC
    • MVC(Model-View-Controller) 패턴의 개념
      • 모델-뷰-컨트롤러는 소프트웨어 공학에서 사용되는 아키텍처 패턴으로,
        MVC 패턴의 주 목적은 Business Logic과 Presentation Logic을 분리하기 위함입니다.
      • Model : 애플리케이션의 정보 (데이터, 비즈니스 로직 포함)
      • View : 사용자에게 제공할 화면
      • Controller : 모델과 뷰 사이의 인터페이스 역할.
    • SPA : Single Page Application.
      HTML 이 클라이언트쪽에 존재하여, JSON 만을 클라이언트에게 반환하여
      JSON 데이터만을 바인딩하여 화면을 보는 방법.
  • 각각의 MVC 컴포넌트의 역할
    • Model 컴포넌트
      • 데이터 저장소. 사용자에게 출력할 데이터를 다루는 일
      • 여러 개의 데이터 변경 작업을 하나의 작업으로 묶는 트랜잭션을 다루는 일.
      • DAO 클래스, Service 클래스, Domain 객체, VO 객체
    • View 컴포넌트
      • 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일을 함.
      • 생성된 화면을 웹 브라우저가 출력하고, 뷰 컴포넌트는 HTML과 CSS, Java Script를 사용하여 웹 브라우저가 출력할 UI를 만듬
      • HTML 과 JSP 를 사용하여 작성할 수 있음.
      • 서버 템플리팅 기술. 서버에서 뷰를 만들어 주는 기술이 최근에 다양하게 존재하고 있음.
        ex) Thyme leaf. 
    • Controller 컴포넌트
      • 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출하는 일을 함.
      • 클라이언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게 데이터를 가공하는 일을 할 수 있음.
      • 모델이 업무 수행을 완료 하면, 그 결과를 가지고 화면을 생성하도록 뷰에게 전달.
        (클라이언트 요청에 대해 모델과 뷰를 결정하여 전달)
      • Servlet과 JSP를 사용하여 작성할 수 있음.
  • Front Controller 패턴 아키텍처
    • Front Controller 프로세스
      • 클라이언트 -> Front Controller(Servlet/JSP) -> 애플리케이션 Controller -> 뷰
      • 역할 : 클라이언트의 모든 요청을 받으며 검수하는 역할을 담당.
        일반적으로 J2EE, 자바 웹 어플리케이션은 주로 Servlet 으로 구현해왔지만,
        스프링에서는 미리 프론트 컨트롤러를 내장시켜 놓고 
        프론트 컨트롤러에서 적절한 컨트롤러를 호출하도록 설정하여 동작시키고 있음.
      • Front Conroller 는 적절한 세부 Controller에게 작업을 위임.
      • 각각의 애플리케이션 Controller는 클라이언트에게 보낼 뷰를 선택해서
        최종 결과를 생성하는 작업.
      • Front Controller 패턴은 인증이나 권한 체크처럼 모든요청에 대하여
        공통적으로 처리해야 하는 로직이 있을 경우 전체적으로 클라이언트 중앙 집중적으로
        관리하고자 할 경우에 사용!
        (퍼사드 패턴? 벽 같은 느낌!)

 

  • Spring MVC 의 특징
    • Spring 은 DI나 AOP 같은 기능 뿐만 아니라,
      서블릿 기반의 웹 개발을 위한 MVC 프레임워크를 제공합니다.
    • Spring MVC는 모델2 아키텍처와 Front Controller 패턴을 프레임워크 차원에서 제공합니다.
    • Spring MVC 프레임워크는 Spring을 기반으로 하고 있기 때문에
      Spring이 제공하는 트랜잭션 처리나 DI 및 AOP 등을 손쉽게 사용 가능합니다.
  • Spring MVC와 Front Controller 패턴
    • 대부분의 MVC 프레임워크들은 Front Controller 패턴을 적용해서 구현합니다.
    • Spring MVC도 Front Controller 역할을 하는 DispatcherServlet 이라는 클래스를 계층의 맨 앞단에 놓고,
      서버로 들어오는 모든 요청을 받아서 처리하도록 구성되어 있습니다다.
    • 예외 처리도 Front Controller의 역할입니다.
  • Spring MVC의 주요 구성 요소
    • DispatcherServlet - 클라이언트에게서 전달 받고, 전달 하는 데이터를 다루는 객체
    • Controller - 개발자가 작성하는 로직 컨트롤러 타워.
    • HandlerMappinig - 내장되어 있는 객체이며, DispatcherServlet 이 처음으로 요청을 받고, DispatcherServlet이 어떤 컨트롤러를 호출해야 할 지 결정을 해주는 클래스입니다.
    • ModelAndView/View - 뷰와 관련된 클래스들. ModelAndView는 리턴타입으로 사용되는 객체이며 바인딩 되어있는 데이터와 뷰 데이터를 포함하고 있음. 
    • ViewResolver - 컨트롤러에서 뷰를 찾는 데 도움을 주는 클래스.

 

  • Servlet 맵핑과 Servet 설정
  • 한글 코딩을 깨지지 않게 하기 위한 encoding 설정

 

  • 실습 내용!
    • Spring MVC 라이브러리 설정
      • pom.xml 내 Spring MVC 라이브러리 인폴트.
    • DispatcherServlet 설정 ... web.xml
      • WEB-INF/web.xml 파일 내에 아래 그림과 같이 코드를 설정.
      • servlet을 설정하고 파라미터를 설정.
        • 파라미터 xml 은 새로 만들어 주어, 아래 맵핑된 url을 탈 때 가져가는 파라미터임.

  • 스프링 빈 설정 파일..  servlet-context.xml
    • <context: component-scan .. >
      • namespace 에서 contextnamespace 를 추가해야함.
    • <mvc:annotation-driven />
      • mvc name space 를 추가해야함.
    • ViewResolver 설정
      • 아래 그림은 web.xml 에서 사용한 dispatcherServlet 의 init param value 인 
        servlet-context.xml 파일이며, 
        뷰 리졸버를 컨테이너에 담는 코드를 포함하고 있음.