스프링은 기본적으로 MVC 아키텍처를 근간으로 하고 있다.
모델 M : 프레젠테이션 계층의 구성요소 정보를 담고있다.
뷰 V : 화면 출력 로직을 담고있다.
컨트롤러 C : 제어 로직을 담고있다.
MVC의 프론트 컨트롤러 패턴
프론트 컨트롤러:
1. 보통 프레젠테이션 계층의 제일 앞에 둬서 서버로 들어오는 모든 요청을 먼저 받아서 처리하게 만든다.
2. 클라이언트가 보낸 요청을 받아서 공통적인 작업을 먼저 수행한 후에 적절한 세부 컨트롤러로 작업을 위임.
3. 클라이언트에게 보낼 뷰를 선택해서 최종 결과를 생성하는 등의 작업을 수행한다.
4. 예외가 밸생했을때 이를 일관된 방식으로 처리한다.
여기서 HTTP 요청은 명령에 따라서 GET과 POST로 구분된다.
또한 HTTP의 사용자 요청은 URL의 '?' 뒤에 이어지는 쿼리 스트링이나 폼 파라미텉, 쿠키나 헤더 정보를 통해 전다뢸 수 있다.
여기서 Spring 의 DispatcherServlet 은 URL이나 파라미터 정보 HTTP 명령 등을 참고로 해서 어떤 컨트롤러에게 작업을 위임할지 결정한다.(내장 핸들어 매핑 전략을 이용)
controller == 핸들러 라고 봐도 무방하다.
controller의 동작방식:
1. Model 생성과 정보 등록
- Model은 맵에 담긴 정보라고 생각하면 된다. 이름과 그에 대응하는 오브젝트 값의 깡으로 만들어진다.
2. 뷰 준비
- 뷰도 하나의 오브젝트이다. 컨트롤러가 뷰 오브젝트를 직접 맅턴할 수도 있지만, 보통은 뷰의 논리적인 이름을 리턴해주면 뷰 리졸버가 이를 이용해 뷰 오브젝트를 생성해준다.
- 대표적으로 JSP뷰를 사용한다. JSP + 뷰 오브젝트 ==> HTML 생성 이때 Controller는 파일의 이름을 리턴
결국 컨트롤러가 리턴해주는 정보는 모델과 뷰 두 가지이다.
(최근에는 뷰를 JSON으로도 많이 생성함)
DispatcherServlet의 DI 전략
1. HandlerMapping
핸들러 매핑은 URL과 요청 정보를 기준으로 어떤 컨트롤러를 사용할 것인지를 결정하는 로직을 담당한다.
default 핸들러 매핑:
BeanNameUrlHandlerMapping
DefaultAnnotationHandlerMapping
2. HandlerAdapter
핸들러 어댑터는 핸들러 매칭으로 선택한 컨트롤러/핸들러를 DispatcherServlet이 호출할 때 사용하는 어댑터다.
컨트롤러의 타입이는 제한이 없으며, 컨트롤러 호출 방법은 타입에 따라 다르다.
그래서 컨트롤러 타입을 지원하는 HandlerAdapter가 필요하다.
3. HandlerExceptionResoler
예외를 처리하는 로직을 갖고 있다. 예외가 발생했을때 예외의 종류에 따라 에러 페이지를 표시한다거나, 관리자에게 통보해주는 등의 작업은 개발 컨트롤러가 아니라 프론트 컨트롤러를 통해 처리되어야 한다.
4. ViewResolver
뷰 리졸버는 컨트롤러가 리턴한 뷰 이름을 참고해서 적절한 뷰 오브젝트를 찾아주는 로직을 가진다. ex) JSP
등등..
'2024 웹 > Spring & Spring Boot' 카테고리의 다른 글
spring mvc (0) | 2024.04.15 |
---|---|
Spring (0) | 2024.04.11 |
[SpringBoot] Google 이메일 인증 (0) | 2024.04.04 |
지도위의 스토리 .v2 로 다시 시작 (0) | 2024.03.13 |
[Spring & Spring boot] directory 구조 (0) | 2024.03.13 |
댓글