티스토리 뷰
Servlet Application 에 Spring 적용 의미
- Spring이 제공하는 IoC컨테이너를 활용
- Spring이 제공하는 서블렛 구현체 DispatcherServlet을 사용하겠다.
- web.xml 파일 내 Listener 변경(기등록된 리스너를 제거하고, Spring에서 제공하는 ContextLoaderListener 등록)
- ContextLoaderListener는 Spring IoC Container(즉, Application Context)를 Servlet Applicaiton 생명 주기에 맞춰서 바인딩 해준다.
- Applicaiton Context를 Web Application에 등록되어있는 Servlet들이 사용할 수 있도록 Application Context를 만들어서 이 Application Context를 Servlet Context에 ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE라는 이름으로 등록해주고 Servlet Context가 종료될시점에 제거(Servlet Context : Servlet들이 사용할 수 있는 공용의 정보들을 모아두는 공간)
스프링 MVC 구조
DispathcerServlet
- 가장 앞서 요청을 받아들여 FrontController 라고 불림
- 가장 핵심이며 모든 요청은 DispatcherServlet에게 전달된다.
- DispathcerServlet은 HandlerMapping 에게 위임하여 요청을 처리할 Handler(Controller)를 찾는다.
- 각 Controller에 요청을 전달하고 컨트롤러가 반환한 결과값을 view에 전달해 응답.
HandlerMapping
- 클라이언트의 요청 URL을 처리할 컨트롤러를 찾아서 DispatcherServlet에 반환.
- @Controller 어노테이션이 적용된 객체의 @RequestMapping 값을 이용해 요청을 처리할 컨트롤러 탐색
- HandlerAdapter
- DispatcherServlet의 처리요청을 변환해서 컨트롤러에 전달.
- Controller의 응답 결과를 DispatcherServlet이 요구하는 형식으로 변환.
Spring MVC 처리 과정
Spring MVC 는 핵심이 DispatcherServlet 이다.
모든 요청에 대한 서블릿 필터가 실행 됨
모든 요청은 DispatcherServlet 에게 전달 된다.
DispatcherServlet은 HandlerMapping 에게 위임하여 요청을 처리할 Handler(Controller) 를 찾는다.
-HandlerMapping은 요청 URL을 보고 Handler를 찾아서 Handler의 이름과 함께 반환한다.
-이때 반환되는 것은 HandlerExecutionChain 타입이다.(handler과 인터셉터 관련 상태를 가지고 있다.)
DispathcerServlet은 찾아낸 Handler를 실행할 수 있는 HanderAdapter를 찾는다.
찾아낸 HandlerAdapter를 사용 Handler를 실행(invokeHandlerMethod)
-Handler를 실행하면서 Service, Repository, DB 등 비즈니스 로직을 수행.
-Handler의 리턴 값 : view(뷰 파일명), Model(데이터)
DispatcherSevlet은 ViewResolver에게 view 의 이름을 전달하고 view 객체를 얻는다.
-view 이름에 해당하는 view 를 찾음.
-view Resolver는 전략 객체이며 view name 뿐 아니라 헤더 정보도 전달.
-view Resolver는 전달된 정보를 바탕으로 사용자에게 보여줄 view 가 무엇인지 결정.
DispatcherServlet 은 View 객체에게 Model 과 함께 화면 표시를 의뢰한다.
View 는 해당하는 뷰를(ex. JSP, Thymleaf..) 호출하며, Model 객체에서 화면 표시에 필요한 정보를 가져와 화면 표시를 처리한다.
-찾은 뷰에 모델 데이터를 랜더링하고 요청의 응답값을 생성한다.
DispatcherServlet 은 View 로부터 받은 결과를 클라이언트에게 반환한다.
중요 Point :
아래 이미지에 DispathcerServlet의 doDispatch 메소드를 보면 try-catch 구문이 감싸고 있음.
Controller로 들어오는 예외는 catch로 잡아주기 때문에 Controller에서 try-catch문을 쓰는 것은 불필요한 코드.
추가로 Service, Repository 에서 발생하는 예외는 Spring에서 모두 Controller로 위임하여 처리하게 됨
ExceptionHandler를 만들어서 Controller에서 전역으로 예외처리 하는 것이 코드 가독성에 좋음.
'Spring MVC' 카테고리의 다른 글
[Java]Spring DispatcherServlet (0) | 2023.03.21 |
---|
- Total
- Today
- Yesterday
- db
- thread
- lock
- java
- Index
- 비동기
- github
- DispatcherServlet
- TCP
- 논블로킹
- spring mvc
- 쓰레드
- Excel
- spring
- jenkins
- jpa
- mysql
- 인덱스
- 스프링
- 영속성 컨텍스트
- Spring Security
- database
- oauth2
- 공간쿼리
- spring boot
- R-Tree
- 다운로드
- GIS
- 데이터베이스
- 네트워크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |