MVC(모델-뷰-컨트롤러)는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있으며, 이러한 관심사 분리 는 더나은 업무의 분리와 향상된 관리를 제공한다.
소프트웨어를 Model, View, Controller라는 3가지 구성 요소로 구분한 개발 방법론이라고 한다.
( MDN Web Docs -https://developer.mozilla.org/ko/docs/Glossary/MVC)
각각 무엇이기 살펴보기 이전에 사진을 보면서 관계를 설명하자면

Model
로직에 의해 처리된 결과를 저장하고 꺼내는 것을 담당하는 파트(DB쪽 파트)
View
<사용자가 보는 화면>
View는 입력값이나 체크박스 등과 같은 사용자 인터페이스 요소를 나타낸다. Controller에게 받은 Model의 데이터를 사용자에게 시각적으로 보여주기 위한 역할을 수행한다.
Controller
Controller는 Model과 View 사이에서 데이터 흐름을 제어한다. 사용자가 접근한 URL에 따라 요청을 파악하고 URL에 적절한 Method를 호출하여 Service에서 비즈니스 로직을 처리한다. 이 후 결과를 Model에 저장하거나 View에게 전달하는 역할을 수행한다. Controller는 Model과 View의 역할을 분리하는 중요한 요소이다.
그냥 어느 순간 나온 패턴이 아닐 것이다. mvc 패턴은 무엇을 목적으로 사용되는 걸까?
(개인적인 생각)
각각의 역할을 한 곳에 다 뭉쳐놓았던 시기가 있었을 것이고 그 프로그램은 유지보수 및 디버깅을 하는데 엄청나게 애를 먹지 않았을까...
Spring의 mvc 패턴은 조금 더 세분화되었다 (프로그램의 복잡성과 크기가 증가하면서 세분화 되었다)

1.클라이언트의 요청을 디스패처 서블릿이 받음
2.요청 정보를 통해 요청을 위임할 컨트롤러를 찾음
3.요청을 컨트롤러로 위임할 핸들러 어댑터를 찾아서 전달함
4.핸들러 어댑터가 컨트롤러로 요청을 위임함
5.비지니스 로직을 처리함
6.컨트롤러가 반환값을 반환함
7.핸들러 어댑터가 반환값을 처리함
8.서버의 응답을 클라이언트로 반환함
(출처: https://mangkyu.tistory.com/18 [MangKyu's Diary:티스토리] > 코드에 대한 설명도 있지만 아직 이해할 수 없어서 패스합니다 )
실제로 개발자가 구현해야 하는 부분은

사진과 같다