study/summary

Spring 기초 3주차

으녕오리 2024. 11. 20. 11:40

Chapter 1: MVC 패턴

  • Template Engine
    • 동적인 웹 페이지를 생성하기 위해 사용되는 도구
    • UI(User Interface)를 만들며, SSR에 사용된다.
    • HTML 문서에 동적으로 변경해야 하는 부분만 코드를 넣을 수 있게 하기 위해
    • ex) Thymeleaf, JSP
  • MVC 패턴 개요
    • Servlet이나 JSP만으로 처리하기는 부담이어서 고안된 패턴이다.
    • Web Application은 일반적으로 MVC 패턴을 사용한다.
    • Servlet만 사용 -> 문제점 : Servlet은 View 영역과 비즈니스 로직이 섞여있다.
    • JSP만 사용 -> 문제점 : JSP는 Servlet 코드에서 View만 분리되었다.
  • MVC(Model, View, Controller) 패턴
    • 하나의 Servlet이나 JSP로 처리하던 것들을 Model, View, Controller 영역으로 나눈 것
    • 비즈니스 로직과 View를 완전히 분리시킴
    • Controller
      • Servlet에 해당하는 영역
      • HTTP Request를 전달받아 파라미터를 검증한다. 
      • 비즈니스 로직을 실행(Layered Architecture)
        • Service Layer - 비즈니스 로직
        • Repository Layer - Database와 상호작용
      • View에 전달할 결과를 조회하여 Model 객체에 임시로 저장한다.
    • Model : View에 출력할 Data를 임시저장
    • View
      • JSP에 해당하는 영역
      • Model 객체에 담겨져 있는 Data를 사용하여 화면을 Rendering
  • MVC 패턴이 적용된 Servlet, JSP (실습)
    • @ServletComponentScan : application이 실행될 때 Servlet을 Servlet Container에 등록해준다.
  • MVC 패턴의 문제점
    • Controller에 여전히 문제 있음
      • View로 이동하는 forward가 항상 중복 호출된다.
      • View의 path를 입력(중복 작업)한다.
      • HttpServletResponse 객체를 사용하는 경우가 적다. (JSP에서 모두 해결하기 때문)
      •  공통 기능(모든 컨트롤러에서 공통으로 적용되는 기능)이 추가될수록 Controller에서 처리해야 하는 부분들이 많아진다.
        -> 프론트 컨트롤러 패턴으로 해결!
  • 프론트 컨트롤러 패턴
    • Servlet(Controller)이 호출되기 전에 공통 기능을 하나의 Servlet에서 처리해주는 패턴이다.
    • Controller Mapping(요청을 처리할 수 있는 Controller를 찾아서 호출) 역할을 한다.
    •  프론트 컨트롤러를 제외한 나머지 컨트롤러는 Servlet을 사용하지 않아도 된다.
    • 모든 컨트롤러에서 같은 형태의 응답을 하는 것은 아니다
      -> 어댑터 패턴으로 해결!
  • 어댑터 패턴
    • 다양한 컨트롤러(Handler)를 유연하게 만들기위해 어댑터 패턴을 도입하게 되었다.
    • 서로 다른 인터페이스를 갖는 두 클래스를 연결해주는 패턴이다.
    • 프론트 컨트롤러, 어댑터, 핸들러(컨트롤러) 모두 각자의 역할만 수행한다. (책임 분리)
    • 공통 로직의 변경이 발생 x
  • 정리
    • Servlet : 비즈니스 로직 코드와 View 코드가 함께 존재
    • JSP : View는 분리했지만 여전이 비즈니스 로직이 포함되어 있음
    • MVC 패턴 : 공통 로직을 처리하는 것에 코드가 중복됨
    • 프론트 컨트롤러 패턴 : 각각의 핸들러 호출 후에 다른 형태의 응답이 발생됨
    • Spring MVC : 현재 사용됨, MVC패턴 + 프론트 컨트롤러 패턴 + 어댑터 패턴

 

Chapter 2: Spring MVC

  • Spring MVC 구조
    • DispatcherServlet  : Spring의 프론트 컨트롤러
    • View : 인터페이스로 구성되어 있다, 확장성을 가지고 있다.
    • Handler -> 비즈니스 로직만 처리하면 된다.
    • 실행순서

Spring MVC 구조

  •  Dispatcher Servlet(Servlet의 한 종류이다.) : Spring MVC의 프론트 컨트롤러
    • IntelliJ Class Diagram
      • ***Spring Boot는 Dispatcher Servlet을 서블릿으로 자동으로 등록(내장 Tomcat WAS를 실행하면서 등록한다)하고
        모든 URL 경로에 대해서 Mapping 한다. -> (urlPatterns="/")
    • DispatcherServlet의 service()
      • Servlet이 호출되면 HttpServlet이 제공하는 service()가 호출된다.
      • Spring MVC는 service()를 Override 해두었다.
      • DispatcherServlet.doDispatch()가 호출된다.
  • Spring MVC의 주요 Interface
    • ***Spring MVC는 기능들이 대부분 Interface로 만들어져 있기 때문에,
      DispatcherServlet 코드의 변경 없이 기능변경 및 확장이 가능하다.
    • 인터페이스를 implements하여 구현하면 내가 만든 클래스를 사용할 수 있다. (다형성)
    • 아래의 것들은 모두 interface로 구성되어 있다.
      • HandlerMapping
      • HandlerAdapter
      • ViewResolver
      • View
  • Controller Interface
    • Controller Interface를 implements하여 구현하게 되면 원하는 Controller(Handler)를 사용할 수 있게 된다.
    • @Component : Spring Bean(애플리케이션의 구성 요소를 정의하는 객체)에 등록하는 역할을 한다.
      -> 마치 Servlet이 Servlet Container에 등록되는 것과 같다.
    • ExampleController의 호출 방법
      • Handler Mapping과 Handler Adapter를 통해(Spring Boot가 구현해놓음)
        • Handler Mapping
          • ExampleController를 찾는다.
        • Handler Adapter
          • Handler Mapping을 통해 찾은 핸들러를(=Controller Interface를)
            실행할 수 있는 Handler Adapter를 찾고 실행한다.

  • Spring Boot의 Handler Mapping, Handler Adapter
    • Handler Mapping
      • RequestMappingHandlerMapping
        • HandlerMapping에서 우선순위가 가장 높다.
        • Annotation 기반 Controller의 @RequestMapping에서 사용
    • Handler Adapter
      • RequestMappingHandlerAdapter
        • Annotation 기반 Controller의 @RequestMapping에서 사용
  • HttpRequestHandler로 알아보는 Spring MVC 동작 순서
  • View Resolver
    • 반환된 ModelAndView 객체를 알맞은 View로 전달하기 위해 DispatcherServlet에서 ViewResolver를 호출하여 View 정보를 설정
    • View의 논리 이름을 물리 이름으로 전환하는 역할을 수행하고,
      Rendering 역할을 담당하는 View 객체를 반환
  • Spring Boot의 ViewResolver
    1. BeanNameViewResolver 
    2. InternalResourceViewResolver : application.properties 설정 파일에 등록한 prefix, suffix 설정 정보를 사용하여 ViewResolver 등록
  • InternalResourceViewResolver로 알아보는 Spring MVC 동작 순서

'study > summary' 카테고리의 다른 글

베이직반  (0) 2024.11.30
Spring 기초 4주차  (1) 2024.11.21
기초 Spring 2주차  (0) 2024.11.04
기초 Spring 1주차  (3) 2024.11.02