TIL/Spring

TIL 2024-11-04 (Spring 입문 - MVC)

myoma 2024. 11. 4. 21:29
  • 스프링을 처음 접하여 처음 배우는 내용이 많아 TIL이 밀려버렸다..ㅠ 더욱 열심히 하자!

 

1 ) Template Engine

  • 동적인 웹 페이지를 생성하기 위해 사용되는 도구이며 템플릿을 기반으로 정적인 부분과 동적인 데이터를 결합하여 HTML, XML 등의 문서를 생성하는 역할을 수행한다.
    • 우리가 흔히 말하는 UI(User Interface)를 만들며, SSR(Server Side Rendering)에 사용된다.

  • 템플릿 엔진이 나온 이유 - 자바 코드로 HTML을 만들어 내는 것이 아닌 HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣을 수 있다면 더 편리하다

 

  • 대표적인 템플릿 엔진
    1. Thymeleaf - Spring과 통합 잘 되어있음 주로 이거 사용하는 것 같다.
    2. JSP - 예전엔 많이 사용했다고 한다.
    3. FreeMarker
    4. Velocity
    5. Mustache

 

  • MVC
    • Controller
      1. HTTP Request를 전달받아 파라미터를 검증한다.
      2. 비지니스 로직을 실행한다.
      3. View에 전달한 결과를 조회하여 Model 객체에 임시로 저장한다.
    • Model
      1. View에 출력할 Data를 저장하는 객체이다.
      2. View는 비지니스 로직이나 Data 접근을 몰라도 되고 View Rendering에만 집중하면 된다.(책임분리)
    • View
      1. Model 객체에 담겨져 있는 Data를 사용하여 화면을 Rendering 한다.

 

 

  • MVC의 문제점
    1. dispatcher.forward(request, response) View로 이동하는 forward가 항상 중복 호출된다.
    2. Spring path = "/WEB-INF/views/new-form.jsp" View의 path를 입력(중복 작업)한다.
    3. HttpServletResponse 객체를 사용하는 경우가 적다.(JSP에서 모두 해결하기 때문)
    4. 공통 기능이 추가될수록 Controller에서 처리해야하는 부분들이 많아진다.

 

  • 프론트 컨트롤러 패턴
    • 공통의 로직을 하나의 입구에서 처리하기 위해서 프론트 컨트롤러 패턴 적용
    • 각각의 핸들러 호출 후 응답을 프론트 컨트롤러에 맞게 변형시켜야 하는 문제

 

  • Spring MVC 사용
    • 프론트 컨트롤러 패턴, 어뎁터 패턴이 모두 적용된 현재
    • 우리가 사용하는 Spring을 이용한 Web Application 개발 방식에 사용됨.
    • Spring은 MVC 패턴에 프론트 컨트롤러 패턴, 어뎁터 패턴이 적용되어있다.

 

 


2 ) Spring MVC

  • 구조

  • DispatcherServlet : Spring의 프론트 컨트롤러
  • View : 인터페이스로 구성되어있다. 확장성을 가지고 있음.

 

  • 실행 순서
    1. Client로 부터 HTTP 요청(Request)을 받는다.
    2. Handler 조회
      •  Handler Mapping을 통해 요청 URL에 Mapping 된 Handler(Controller)를 조회
    3. Handler를 처리할 Adapter 조회
      • Handler를 처리할 수 있는 Adapter 조회
    4. Handler Adapter 실행(Handle)
      • 알맞은 어뎁터가 존재한다면 Handler Adapter에게 요청을 위임한다.
    5. Handler 실행(호출)
      • Handler Adapter가 실제 Handler(Controller)를 호출하여 실행 및 결과 반환
    6. Model And View(return)
      • Handler Adapter는 Handler가 반환 하는 정보를 ModelAndView 객체로 변환하여 반환
    7. viewResolver 호출(알맞은 View 요청)
      • View  Resolver를 찾고 실행
    8. View 반환
      • View Resolver는 View의 논리 이름을 물리 이름으로 전환하는 역할을 수행하고 Rendering역할을 담당하는 view 객체 반환
    9. View Rendering
      • View를 통해서 View를 Rendering

 

 

  • Component
    • Spring Bean에 등록하는 역할을 수행한다.
      • Spring Bean은 애플리케이션의 구성 요소를 정의하는 객체이다.
      • 마치 Servlet이 Servlet Container에 등록되는 것과 같다.

 

 

  • Spring MVC의 주요 Interface
    • Spring MVC는 DispatcherServlet 코드의 변경 없이 기능변경 및 확장이 가능하다. 기능들이 대부분 Interface로 만들어져 있기 때문이다.
      • 인터페이스를 Implements 하여 구현하면 내가 만든 클래스를 사용할 수 있다 ( 다형성 )