Spring 의 가장 기본적인 특징 중 하나는 POJO이다. 옛날에 Java로 웹 어플리케이션을 만들기 위해서는 Servlet 클래스를 상속받아 구현하는 방식으로 직접 작성했으나 Spring을 이용하면 POJO만으로 웹 어플리케이션 작성이 가능하다.
Servlet에 대한 작업은 Spring Framework가 알아서 처리해주고 개발자는 비즈니스 로직의 구현에 집중하게끔 한 것이다.
Spring 의 Servlet클래스들은 모두 추상화 라이브러리 형태로 포함되어 있다. 거기에 IoC와 AOP를 지원하는 컨테이너 프레임워크 라는 기능을 붙임으로써 강력한 프레임워크가 되었다.
Spring Container는 객체의 생성과 관리를 담당하며 필요할 때 객체를 생성(Lazy Loading)하고 객체간의 의존관계를 관리한다. 이를 확장한 ApplicationContext는 트랜잭션 관리나 메시지 기반의 다국어 처리 등 다양한 기능을 제공한다. 스프링 컨테이너는 Bean 저장소에 해당하는 XML 설정을 참조하여 Bean의 생명주기를 관리한다.
위의 그림은 Spring Framework의 구동 원리를 나타낸다.
(1) 웹 어플리케이션이 실행되면 Tomcat(WAS)에 의해 web.xml 이 로딩된다.
(2) Web.xml이 등록되어 있는 ContextLoaderListener가 생성된다. 이는 ServletContextListener 인터페이스를 구현하고 있으며 ApplicationContext를 생성한다.
(3) 생성된 ContextLoaderListener는 root-context.xml을 로딩한다.
(4) Root-context.xml 에 등록된 Spring Container가 구동된다. 이 때 개발자가 작성한 비즈니스 로직에 대한 부분과 DAO, VO 객체들이 생성된다.
(5) 클라이언트로부터 Web Application 요청이 들어온다.
(6) 첫 요청이 들어오면 DispatcherServlet(Servlet)이 생성된다. DispatcherServlet은 FrontController의 역할을 수행하며 전송받은 요청 메시지를 분석하여 알맞은 PageController에게 전달하고 응답을 어떻게 할지 결정한다. 이 때, servlet-content.xml 이 로딩되며, 각 Controller 등이 매핑된다.
(7) 실질적인 작업은 PageController에서 일어나므로 이 클래스들을 HandlerMapping / ViewResolver 클래스라 한다. 이 작업은 ThreadPool 을 통해 할당된 유저 Thread 에서 처리된다.
(8) 요청은 매핑된 각 Controller로 전달되고 Request를 ModelAndView 형태의 Object 형식으로 DispatcherServlet 으로 전달한다.
(9) DispatcherServlet 은 응답 결과값을 각 Model 오브젝트와 View page 를 통해 출력한다. 작업을 처리한 유저 Thread 를 다시 Thread Pool 에 반환한다.
(10) 다음 요청부터는 이전에 생성한 DAO, VO, Impl 클래스들과 협업한다.
'Server > Spring' 카테고리의 다른 글
Spring Application Context 에 대한 정리 (0) | 2018.11.01 |
---|---|
Spring PSA(Portable Service Abstraction)의 개념 (0) | 2018.09.09 |
Spring Framework 의 특징과 버전별 주요 Feature 들 (0) | 2018.08.23 |
메이븐(Maven) 을 활용한 Multi Module Project 설정 (4) | 2018.08.13 |
Spring legacy 와 Spring boot 의 차이점 (3) | 2018.08.10 |