MVC 디자인 패턴

- Model-View-Controller
- 소프트웨어 디자인 패턴
Model
- 데이터와 비즈니스 로직 담당
- 데이터베이스와 연동하여 데이터를 저장하고 불러오는 작업 수행
View
- 사용자 인터페이스 담당
- 사용자가 보는 화면을 디자인하고 구현
Controller
- Model과 View 사이의 상호작용을 조정하고 제어
- 사용자의 입력을 받아 Model에 전달하고 Model의 결과를 바탕으로 View 업데이트
Spring MVC
- Servlet API를 기반으로 구축된 독창적인 웹 프레임워크
- 중앙에 있는 DispatcherServlet이 요청을 처리하기 위한 공유 알고리즘을 제공하는 Front Controller 패턴을 중심으로 설계
- Spring에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리하고 있음
Servlet
- 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양

- 사용자가 Client(브라우저)를 통해 서버에 **HTTP Request(API 요청)**을 함
- 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성함
- 설정된 정보를 통해 어떠한 Servlet에 대한 요청인지 찾음
- 해당 Servlet에서 service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost 등의 메서드를 호출함
- 호출한 메서드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client에 반환
- 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse 소멸
Front Controller
- 모든 API 요청을 서블릿 동작 방식에 맞춰 코드 구현 → 무수히 많은 Servlet 클래스를 구현해야 함
- Spring은 DispatcherServlet을 사용하여 Front Controller 패턴 방식으로 API 요청 처리

- Client(브라우저)에서 HTTP 요청이 들어오면 DispatcherServlet 객체가 요청 분석
- DispatcherServlet 객체는 분석한 데이터를 토대로 Handler mapping을 통해 Controller를 찾아 요청 전달
- 해당 컨트롤러는 요청에 대한 처리 완료 후 처리에 대한 결과 데이터 전달**(Controller → DispatcherServlet)**
- ViewResolver를 통해 View에 Model을 적용하여 View를 Client에게 응답으로 전달**(DispatcherServlet → Client)**
@Controller
- 유사한 성격의 API를 하나의 Controller로 관리
- 해당 클래스가 Controller의 역할을 수행할 수 있도록 등록해줄 수 있음
정적 페이지와 동적 페이지
정적 페이지 처리
- static 폴더에 있는 파일들을 찾아서 반환
- thymeleaf : 동적 페이지 처리를 위한 템플릿 엔진, 자동으로 controller에서 html 파일 찾는 경로를 /resources/templates로 설정