MVC
: Model, View, Controller
- 어플리케이션을 개발 할 때 사용하는 디자인 패턴
- 개발 영영을 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식
- UI 영역과 비즈니스 로직 영역이 구분되어 서로에게 영향을 주지 않으면서 개발, 유지보수 가능
Model
: 클라이언트에게 응답으로 돌려주는 작업 처리 결과 데이터
- 서비스 계층 : 클라이언트의 요청 사항을 구체적으로 처리하는 영역
- 비즈니스 로직 : 요청사항을 처리하기 위해 Java코드로 구현한것
View
: Model을 이용하여 어플리케이션의 화면에 보이는 리소스(Resource)를 제공함
Controller
: 클라이언트의 요청을 직접적으로 전달받는 엔드포인트로써 만들어진 Model 데이터를 View로 전달함
Spring MVC
: 웹 계층에 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈
- 클라이언트의 요청을 편리하게 해주는 기능을 제공함
- Spring MVC 내부에서는 서블릿을 기반으로 웹 어플리케이션을 동작함
(스프링 부트는 기본적으로 아파치 톰캣이 내장되어 있음)
- 동작에 필요한 대부분의 기능을 확장할 수 있도록 인터페이스로 제공하기에 인터페이스들만 구현하여 DispatcherServelet에 등록하여 원하는 기능의 컨트롤러 만들 수 있음
Spring MVC 구조
DispatcherServlet
- HttpServlet을 상속받아 사용
- 서블릿으로 동작함
동작 순서
1. 핸들러 조회 : 핸들러 매핑을 통해 URL에 매핑된 핸들러(컨트롤러) 조회
2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터 조회
3. 핸들러 어댑터 실행: 핸들러 어댑터 실행
4. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행
5. ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해 반환.
6. viewResolver 호출: 뷰 리졸버를 찾아 실행한다.
⇒ JSP: InternalResourceViewResolver가 자등 등록되어 사용된다.
7. View 반환: 뷰 리졸버는 뷰의 논리 이름을 물이 이름으로 바꾸고 렌더링 역할을 담당하는 뷰 객체 반환.
⇒ JSP: InternalResourceView(JstlView)를 반환하는데, 내부에는 forward() 가 있다.
8. 뷰 렌더링: 뷰를 통해서 뷰를 렌더링한다.
Annotated Controllers > Handler Method
Handler Method
Handler : 스프링 MVC에서 웹 요청을 처리하는 객체
DispatcherServlet이 전달해준 Http 요청을 처리하고 결과를 model에 저장
@RequestMapping
- 요청 정보를 매핑함
- 해당 URL이 호출되면 이 메소드가 호출됨
- 애노테이션을 기반으로 작동함으로 메소드명은 임의대로 작성 가능
@RequestParam
스프링에서는 Http 요청 파라미터 값을 편리하게 사용할 수 있도록 @RequestParam을 지원함
사용법
- Http 요청 파라미터의 이름으로 바인딩하여 그 값을 변수에 저장
- Http 파라미터 이름이 변수 이름과 같으면 @RequestParam의 value생략 가능
- String, int, Integer 등의 단순 타입이면 @RequestParam 생략 가능
@Controller
- 스프링이 자동으로 스프링 빈으로 등록함
- RequestMappingHandlerMapping에서 사용할 수 있는 핸들러로 인식됨
( 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식)
댓글