Java 백엔드 개발자를 희망하고 있는 나는 Spring 프레임워크를 다루는 일이 많았다.
그래서 더 자세히 이해하고 다루기 위해 공부하고 기록한다.
MVC 패턴
소프트웨어 공학에서 사용하는 디자인 패턴 중 하나로 Model, View, Controller의 앞 글짜를 따서 MVC 디자인패턴이라고 한다.
MVC
- Model
- 어플리케이션의 정보나 데이터, DB등을 뜻함.
- 백그라운드에서 동작하며, 사용자가 원하는 데이터나 정보 제공함.
- View
- 사용자에게 보여지는 화면, UI를 뜻함.
- 모델로부터 정보를 받아 표출.
- Controller의
- 데이터와 비즈니스 로직 사이의 상호 동작을 관리함.
- 모델과 뷰를 통제하며 MVC 패턴에서 View와 Model이 직접 상호 통신을 하지 않도록 관리함.
기본적인 흐름
- 유저(클라이언트)가 원하는 정보를 얻기 위해 Controller에 요청
- 요청을 받은 Controller는 비즈니스 로직 or Model을 통해 원하는 정보를 추출
- 정보를 View를 통해 유저(클라이언트)에게 제공
MVC1
- MVC1의 경우, View와 Controller의 역할이 합쳐져 있는데 이를 JSP가 담당한다.
- JSP에 Java코드와 Html, css등의 코드가 섞이게 되고, 소스가 복잡해지고 가독성이 안좋아져 유지보수가 어렵다.
- 단, Jsp하나로 유저의 요청을 받고 응답을 처리하기 때문에 구현난이도는 쉬운편이다.
MVC2
- MVC1의 유지보수가 힘들다는 단점을 보완한다.
- 기존에 View와 Controller의 역할을 모두 수행하던 Jsp는 뷰의 역할만 하게 되고, 대산 Controller의 역할을 Servlet(서블릿)이 수행한다.
- 사용자의 요청을 하나의 컨트롤러(Servlet)가 먼저 받는다. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 Jsp 페이지로 포워딩한다.
Spring MVC
- 핸들러 조회 : 핸들러 매핑을 통해 URL에 매핑된 핸들러(컨트롤러) 조회
- 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터 조회
- 핸들러 어댑터 실행: 핸들러 어댑터 실행
- 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행
- ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해 반환.
- viewResolver 호출: 뷰 리졸버를 찾아 실행한다.
👉 JSP: InternalResourceViewResolver가 자등 등록되어 사용
- View 반환: 뷰 리졸버는 뷰의 논리 이름을 물이 이름으로 바꾸고 렌더링 역할을 담당하는 뷰 객체 반환.
👉 JSP: InternalResourceView(JstlView)를 반환하는데, 내부에는 forward() 가 있다.
- 뷰 렌더링: 뷰를 통해서 뷰를 렌더링한다.