1. Spring Framework 에서의 동작 처리 과정
2. Spring Framework의 각 구성요소
ServletContainer (서블릿 컨테이너)
Client (보통 크롬, 파이어폭스 등과 같은 웹브라우저)로부터
HTTP요청을 받아 서블릿 로직을 처리할 수 있는 구성요소이다
서블릿이란 javax.servlet 패키지에 정의된 인터페이스로
자바 class 파일로 된 서버로직이라고 볼 수 있다
ServletContainer의 대표적인 예로는 Tomcat이 있다
Spring (스프링)
Spring framework (스프링 프레임워크) 영역이다
DispatcherServlet (디스패처 서블릿)
Spring framework (스프링 프레임워크)에서 front controller역할을 한다
실제 동작하기 위한 로직요청에 대해 처리할 수 있도록 해준다
dispatch의 뜻을 보내다라는 뜻으로
이곳에 요청이 오면 실제로 로직을 수행할 컴포넌트로
요청을 보내주는 역할을 하고 반환을 받는 역할을 한다
HandlerMapping (핸들러 매핑)
Spring framework(스프링 프레임워크)에 작성된 여러 Controller(컨트롤러) 중에서
로직을 수해할 contoller를 확인해주는 컴포넌트이다
Controller (컨트롤러)
개발자가 직접 개발하는 컴포넌트로
http request를 개발자가 처리할 수 있도록 개발하는 컴포넌트이다
Service (서비스)
개발자가 직접 개발하는 컴포넌트로
비지니스 로직을 수행하는 컴포넌트이다
DAO (Data Access Object, 디에이오)
개발자가 직접개발하는 컴포넌트로
Database에 직접적으로 접근하는 객체이다
보통 mybatis와 같은 persistence framework를 많이 활용한다
ViewResolver (뷰 리졸버)
ViewName을 기반으로 어떤 View 파일을 사용할것인지 확인해주는 컴포넌트이다
View (뷰)
개발자가 직접개발하는 컴포넌트로
보통 UI화면을 의미한다
3. 시퀀스 다이어그램으로 알아보기
1) HTTP 요청을 client에서 보내면 servlet container에서 이를 처리하도록 한다
2) servlet container에서는 spring이 처리해야한다는것을 인지하고
dispatcherServlet이 처리하도록 http request정보를 전달한다
servlet container에서 spring이 처리해야한다는 내용은 web.xml 파일에 기입이 되어 있습니다
* 그런데 Servlet 3.0으로 스펙이 업데이트 되면서
이 web.xml설정을 WebApplicationInitializer 인터페이스를 구현하여
대신 할 수 있게 되었고, 이를 구현한 SpringBootServletInitializer를 상속받아
외부 Tomcat에서 스프링부트가 실행되도록 해준다
3) dispatherServlet은 http request 중 url과 메서드 등을 확인하여
@RequestMapping으로 매핑되어 있는 controller를 찾는다
4) 앞 단계에서 찾아진 controller가 할당이 되어 로직을 처리하게 된다
5) controller 처리는 service의 조합으로 처리가 된다
6) service는 DAO를 호출하여 비지니스 로직을 수행하게 된다
7) DAO는 DB에 직접접근하여 쿼리를 수행하게 되고, 리턴결과를 자바 객체로 받게 된다
8) DAO -> Service -> Controller로 결과를 리턴받게 되고
Controller는 Viewname과 Model을 리턴한다
9) Viewname을 리턴받은 DispatcherServlet은 ViewResolver로 어떤 View 파일을 활용할지
Viewname을 통해 확인한다
10) 확인된 View파일과 Model을 이용하여 사용자에게 최종적으로 보여질 UI화면을
http response에 실어서 클라이언트에게 리턴해준다
11) client에서는 http response를 받아서(텍스트형식) 결과를 파싱하는 등의 처리를 진행해서
최종적으로 사용자에게 화면을 표시해주게 된다
'Spring' 카테고리의 다른 글
[Spring] 스프링에서 생성자 주입 방식을 권장하는 이유 (0) | 2023.04.07 |
---|---|
[Spring] Spring 과 SpringBoot의 차이 (0) | 2023.04.06 |
[Spring] QueryDSL 메서드 및 활용 예시 모아보기(3) (0) | 2022.11.14 |
[Spring] QueryDSL 메서드 및 활용 예시 모아보기(2) (0) | 2022.11.14 |
[Spring] QueryDSL 메서드 및 활용 예시 모아보기(1) (0) | 2022.11.14 |