🤔 MVC ?
어플리케이션의 확장을 위해 Model, View, Controller로 분리하여 개발 하는 방법
- 컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치지 않음
- 컴포넌트 간의 결합성이 낮아 프로그램 수정이 용이
장점
- 화면과 비즈니스 로직을 분리해서 작업 가능
- 영역별 개발로 확장성이 뛰어남
- 표준화된 코드를 사용하여 공동작업 및 유지보수가 편리함
단점
- 개발과정이 복잡, 초기 개발속도가 늦을 수 있음
- 초보자가 활용하기엔 난이도가 높음
MVC 패턴 구조 순서
Dispatcher Servlet : url의 요청을 받아서 연결 시켜줌
Handler Mapping : Dispatcher Servlet이 Controller로 매핑 하는 방식을 결정
Controller : 로직을 처리
ModelAndView : view 이름, data를 담는다
ViewResolver : view 타입을 정함
View : 받은 data를 출력
요청 처리 순서
- Dispatcher Servlet이 request를 수신 -> 어느 컨트롤러에 요청할지 Handler Mapping에게 보냄
- Handler Mapping은 Dispatcher Servlet에게 요청을 받아 URL과 Mapping
- Dispatcher Servlet은 요청을 Controller에게 전송하여 Controller는 요청을 처리 후 Model을 생성하고 View를 return
- ModelAndView 오브젝트는 수행결과를 포함하여 Dispathcer Servlet에 return
- ViewResolver가 JSP로 출력하도록 논리적 이름을 실제로 변환
- View에 출력
Maven 셋팅
- Spring MVC : mvc를 사용하기 위함
- validator : @valid, @InitBinder 어노테이션을 주기 위함
Dispatcher Servlet 셋팅
- springapp인 servlet-name을 선언
- mapping시 동일한 name을 선언
- url-pattern은 /를 주어 모든 요청에 대한 Dispathcer Serlvet이 처리하는 URL Mapping 패턴을 정의
- web.xml에서 주었던 name으로 xml 생성
- context 태그를 이용하여 kosta 패키지 안의 어노테이션을 scan
- mvc 태그를 이용하여 Mapping되는 Controller가 없어도 Handler가 default로 빈 객체로 등록되어 요청을 전달
- ViewResolver는 Controller가 넘긴 view 이름을 받아 view를 찾음
📘 MVC 예제
- getMessage 메소드에서 String 타입을 return
- @Controller로 Controller인 클래스를 지정해주고 setter를 통해 의존성 주입
- @RequestMapping을 통해 URL 지정을 해주고 ModelAndView 객체를 생성하여 view의 이름과 메세지의 data를 담아 return