MVC(Model-View-Controller) 패턴은 어플리케이션을
Model, View, Controller 세 가지 영역으로 나누어 역할을 분리하고,
유지보수성과 확장성을 높이기 위한 웹 어플리케이션 개발 아키텍처이다.

어플리케이션의 데이터와 비즈니스 로직을 담당한다.
DB와 직접 연결되어 있고, 사용자의 요청에 따라 필요한 데이터를 다룬다.
사용자에게 보이는 화면을 담당한다.
Model이 처리한 데이터를 기반으로 어떤 정보를 어떻게 보여줄지를 정의한다.
사용자의 요청을 받아, 어떤 처리를 해야 할지를 결정한다.
Model과 View의 중재자 역할이다.
예를 들어, 웹에서는
1.User가 웹사이트에 접속해 특정 페이지를 요청한다.
2. Controller는 해당 요청을 처리하기 위해 Model에게 필요한 데이터를 요청한다.
3. Model은 DB등과 연동해 필요한 데이터를 조회하거나 처리한 뒤, 그 결과를 반환한다.
4. Controller는 받은 데이터를 View에 전달한다.
5. View는 전달받은 데이터를 기반으로 화면을 구성하고, User가 볼 수 있도록 페이지를 출력한다.
Spring MVC는 Spring Framework에서 제공하는 웹 어플리케이션 구조로,
MVC 패턴(Model-View-Controller)을 기반으로 동작한다.
브라우저에서 /users와 같은 URL을 요청하면,
그 요청은 HTTP 프로토콜을 통해 서버로 전달된다.
(GET, POST 등)
Spring에서는 @Controller 또는 @RestController가 이 요청을 가장 먼저 받는다.
@GetMapping("/users")
public String getUsers() {
...
}
-> Controller는 요청이 왔으니 로직 처리를 위해서 서비스로 보낸다.
실제 로직 처리를 담당한다.
예를 들어, 회원 목록을 가져오거나 게시글을 저장한다.
public List<User> getAllUsers() {
return userRepository.findAll();
}
Service가 데이터를 요청하면,
Repository가 DB에 접근해서 필요한 데이터를 조회하거나 저장한다.
이때 Spring Data JPA 등의 기술을 사용해, Entity 객체를 기반으로 데이터를 주고받는다.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {}
DB에서 조회된 결과는 Entity 또는 DTO 형태로 Controller로 전달이 된다.
Controller는 이 결과를 View에 넘기거나, API로 응답을 생성한다.
Controller는 사용자의 요청 종류에 따라 다음과 같이 응답을 처리한다.
@Controller → HTML 템플릿(예: Thymeleaf, JSP)으로 응답
@RestController → JSON 형식으로 응답
필요에 따라 PDF, Excel 등 다양한 문서 형식으로도 결과를 출력할 수 있다.
(이를 위해 별도의 뷰 리졸버나 라이브러리를 연동)
Model(모델), View(뷰), Controller(컨트롤러)
세 가지로 나뉘어 각 부분을 독립적으로 개발하고 관리할 수 있다.
코드의 역할이 명확하게 분리되어 있어서, 변경 사항을 쉽게 파악하고 적용할 수 있다.
각 구성 요소의 독립적인 개발이 가능하다.
따라서, 다른 프로젝트나 어플리케이션에서 재사용할 수 있는 코드를 작성할 수 있다.
새로운 기능을 추가하거나 변경할 때, 해당 부분만 수정하여 쉽게 확장할 수 있다.
DispatcherServlet은 Spring MVC에서 모든 웹 요청을 처음 받아 처리하는 중앙 컨트롤러이다.
클라이언트가 보내는 모든 HTTP 요청은 DispatcherServlet을 통해서 들어오고,
이 서블릿이 해당 요청을 처리할 적절한 Controller를 찾아 연결한다.
덕분에 개발자는 요청 처리 흐름에 신경 쓰지 않고, 비즈니스 로직에 집중할 수 있다.
HandlerMapping, HandlerAdapter, ViewResolver 등 다양한 컴포넌트를 제공하여, 개발자가 웹 애플리케이션을 유연하고 효율적으로 개발할 수 있도록 돕는다.