스프링
스프링 동작 원리
lroot
2022. 10. 21. 09:12
728x90
반응형
스프링 전체적인 동작 구성도
1. Dispatcher Servlet
Servlet Container에서 Http 프로토콜을 통해 들어오는 모든 요청을
프레젠테이션 계층의 제일 앞에 둬서 중앙 집중식으로 처리해주는 프론트 컨트롤러(Front Controller)
- 들어오는 모든 Request를 우선적으로 받아 처리해주는 서블릿이다.
- HandlerMapping에게 Request에 대해 매핑할 Controller 검색을 요청한다.
- HandlerMapping으로부터 Controller 정보를 반환받아 해당 Controller와 매핑시킨다.
- Dispatcher라는 단어가 '배치 담당자'라는 뜻이 있듯이, 말 그대로 Request에 대해 어느 컨트롤러로 매핑시킬것인지 배치하는 역할을 한다
- 클라이언트로부터 어떤 요청(Request)을 받으면, 모든 요청을 한 곳에서 받아서 필요한 처리를 한 후, 요청에 맞는 Handler로 요청을 보내고(Dispatch)
해당 Handler의 실행 결과를 Http Response 형태로 만드는 역할을 한다.
2. Handler Mapping
사용자가 요청한 URL을 분석하여 이것을 처리할 Handler를 찾아주는 인터페이스
- DispatcherServlet으로부터 검색을 요청받은 Controller를 찾아 Dispatcher Servlet으로 정보를 리턴해준다.
- DispatcherServlet에서는 Contoller 정보를 받아 해당 Controller와 매핑시킨다.
3. Handler Adapter
Handler Mapping이 찾아낸 Handler를 호출하고 처리하는 인터페이스
- HandlerMapping을 통해 찾은 컨트롤러를 직접 실행하는 기능을 수행한다.
4. Handler Interceptor
Dispatcher Servlet이 컨트롤러를 호출하기 전과 후에 요청, 응답을 가공할 수 있는 일종의 필터
- Request가 Controller에 매핑되기전 앞단에서 부가적인 로직을 끼워넣는다.
- 주로 세션, 쿠키, 권한 인증 로직에 많이 사용된다.
5. Controller
- Request와 매핑되는 곳이다
- Request에 대해 어떤 로직(Service)으로 처리할 것인지를 결정하고, 그에 맞는 Service를 호출한다
- Service Bean을 스프링 컨테이너로부터 주입받아야 한다.(Service Bean의 메소드를 호출해야 하기 때문)
6. Repository
- DB에 접근하는 객체이다. DAO(Data Access Object)라고 부른다.
- Service에서 DB에 접근할 수 있게 하여 데이터의 CRUD를 할 수 있게 해준다.
7. ViewResolver
Handler에서 반환하는 View 이름에 해당하는 View를 찾아내는 인터페이스
- Controller에서 리턴한 View의 이름을 DispatcherServlet으로부터 넘겨받고, 해당 View를 렌더링한다.
- 렌더링한 View는 DispatcherServlet으로 리턴하고, DispatcherServlet에서는 해당 View 화면을 Response 한다.(View 이름으로부터 View 객체를 맵핑하는 역할)
최종
- 컨트롤러는 최종적으로 결과를 출력할 뷰와 뷰에 전달할 객체를 담고 있는 ModelAndView 객체를 리턴한다.
- DispatcherServlet은 ViewResolver를 사용하여 결과를 출력할 View 객체를 구하고, 구한 View 객체를 이용하여 내용을 생성한다.
- 컨트롤러는 뷰의 논리적인 이름만을 return 한 후 역할을 종료한다.
- 이를 Dispatcher Servlet의 View Resolver가 받아서 사용할 View Object를 찾고 생성하는 작업을 진행한다.
간단한 DispatcherServlet 흐름도
- 클라이언트의 요청을 DispatcherServlet에 전달
- 요청한 URL에 맞는 Controller 검색하여 HandlerMapping에 전달
- HandlerMapping에서 해당 Controller에 처리 요청
- Controller에서 처리 결과를 HandlerAdapter에서 ModelAndView 객체로 변환하여 DispatcherServlet에 전달
- DispatcherServlet에서 전달받은 ModelAndView 객체를 이용하여 매핑되는 View를 검색
- ViewResolver에서 처리 결과를 View에 전달
- 처리결과가 포함된 view를 DispatcherServlet에 전달
- DispatcherServlet에서 최종 응답 결과를 클라이언트에게 출력
Reference :
https://ee-22-joo.tistory.com/20
https://jckim-dev.tistory.com/12