Client <- dto -> controller(web) - service - repository(JPA) <- domain(entity) -> DB
MVC 패턴
- Model-View-Controller의 약자
- 개발을 할 때 아래의 3가지 형태로 역할을 나누어 개발하는 방법
- Model
- 어플리케이션이 무엇을 할 것인지 정의하는 부분
- 데이터와 비즈니스 로직을 담당
- DB와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룸
- 어플리케이션이 무엇을 할 것인지 정의하는 부분
- View
- 사용자에게 시각적으로 보여주는 부분
- 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현
- 사용자에게 시각적으로 보여주는 부분
- Controller
- Model이 데이터를 어떻게 처리할지 알려주는 역할
- 사용자에 의해 클라이언트가 보낸 데이터가 있으면 모델을 호출하기 전에 적절히 가공하고 모델을 호출함
- 이후 모델이 업무 수행을 완료하면 그 결과를 가지고 View에게 전달하는 역할
- Model과 View 사이의 상호작용을 조정하고 제어
- 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트 함
- Model
- 위의 3가지 형태로 분리해 각자의 역할에 집중할 수 있게 개발하여 유지보수성, 애플리케이션의 확작성이 증가하고 중복코딩 문제점을 해결할 수 있어 MVC 패턴을 사용
Spring MVC
- Spring에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리하는 것
- Spring 공식 문서에서 Spring MVC에 대한 설명으로 ‘DispatcherServlet이 중앙에서 HTTP 요청을 처리해주는데 이는 Front Controller 패턴으로 설계되어있다’라고 설명하고 있음
Servlet (서블릿)
- 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양
- 사용자가 (HTTP) API 요청했을 때 서버 서블릿의 동작
- 사용자가 Client(브라우저)를 통해 서버에 HTTP Request ( ⇒ API ) 요청
- 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성
- 약속된 HTTP의 규격을 맞추면서 쉽게 HTTP에 담긴 데이터를 사용하기 위한 객체
- 설정된 정보를 통해 어떠한 Servlet에 대한 요청인지 찾음
- 해당 Servlet에서 service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost 등의 메서드를 호출
- 호출한 메서드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client(브라우저)에 반환
- 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse 객체를 소멸
Front Controller
- 모든 API 요청을 앞서 살펴본 서블릿의 동작 방식에 맞춰 코드를 구현한다면 무수히 많은 Servlet 클래스를 구현해야함
- 그런 문제를 해결하기 위해 Spring은 DispatcherServlet을 사용하여 Front Controller 패턴 방식으로 API 요청을 효율적으로 처리
Front Controller 패턴의 특징
- 프론트 컨트롤러 서블릿 하나로 클라이언트의 모든 요청을 수행
- 해당 요청을 수행할 컨트롤러를 찾아서 호출
- 공통 로직을 처리 가능(코드의 중복 제거)
- Front controller 공통 로직을 처리하고, 각 상황에 따라 해당 역할을 수행할 컨트롤러를 실행
'🗂️ Study > 🌿Spring' 카테고리의 다른 글
정적 페이지 & 동적 페이지 (0) | 2024.05.21 |
---|---|
Controller (0) | 2024.05.21 |
Lombok & application.properties (0) | 2024.05.21 |
Test Code (0) | 2024.05.21 |
HTTP (HyperText Transfer Protocol) (0) | 2024.05.20 |