MVC 디자인 패턴

  • Model-View-Controller
  • 소프트웨어 디자인 패턴

Model

  • 데이터와 비즈니스 로직 담당
  • 데이터베이스와 연동하여 데이터를 저장하고 불러오는 작업 수행

View

  • 사용자 인터페이스 담당
  • 사용자가 보는 화면을 디자인하고 구현

Controller

  • Model과 View 사이의 상호작용을 조정하고 제어
  • 사용자의 입력을 받아 Model에 전달하고 Model의 결과를 바탕으로 View 업데이트

Spring MVC

  • Servlet API를 기반으로 구축된 독창적인 웹 프레임워크
  • 중앙에 있는 DispatcherServlet이 요청을 처리하기 위한 공유 알고리즘을 제공하는 Front Controller 패턴을 중심으로 설계
  • Spring에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리하고 있음

Servlet

  • 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양
  1. 사용자가 Client(브라우저)를 통해 서버에 **HTTP Request(API 요청)**을 함
  2. 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성함
  3. 설정된 정보를 통해 어떠한 Servlet에 대한 요청인지 찾음
  4. 해당 Servlet에서 service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost 등의 메서드를 호출
  5. 호출한 메서드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client에 반환
  6. 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse 소멸

Front Controller

  • 모든 API 요청을 서블릿 동작 방식에 맞춰 코드 구현 무수히 많은 Servlet 클래스를 구현해야 함
  • Spring은 DispatcherServlet을 사용하여 Front Controller 패턴 방식으로 API 요청 처리
  1. Client(브라우저)에서 HTTP 요청이 들어오면 DispatcherServlet 객체가 요청 분석
  2. DispatcherServlet 객체는 분석한 데이터를 토대로 Handler mapping을 통해 Controller를 찾아 요청 전달
  3. 해당 컨트롤러는 요청에 대한 처리 완료 후 처리에 대한 결과 데이터 전달**(Controller DispatcherServlet)**
  4. ViewResolver를 통해 View에 Model을 적용하여 View를 Client에게 응답으로 전달**(DispatcherServlet Client)**

@Controller

  • 유사한 성격의 API를 하나의 Controller로 관리
  • 해당 클래스가 Controller의 역할을 수행할 수 있도록 등록해줄 수 있음

정적 페이지와 동적 페이지

정적 페이지 처리

  • static 폴더에 있는 파일들을 찾아서 반환
  • thymeleaf : 동적 페이지 처리를 위한 템플릿 엔진, 자동으로 controller에서 html 파일 찾는 경로를 /resources/templates로 설정