뇌운동일지

spring 실행순서 본문

Spring

spring 실행순서

purpleduck 2021. 3. 9. 13:00

아래의 글을 공부한 내용 

javannspring.tistory.com/231

 

Spring Framework 실행순서

사전지식 POJO 스프링의 특징 중 하나 평범한 옛날 자바 객체 Not POJO = Servlet의 특징 javax.servlet, javax.servlet.http 패키지를 import해야 한다. Servlet, Generic Servlet, HttpServlet 중 하나를 상속해..

javannspring.tistory.com

 

Servlet Container (Servlet Engine) 

- 서블릿 실행

- 세션 관리 

- 네트워크 서비스 

- 메시지 인코딩/디코딩 

- 서블릿 생명주기 관리 

 

spring 실행순서 

1. loading 

웹 어플리케이션이 실행되면 Tomcat(WAS)에 의해 web.xml Loading 

Servlet Container (ex: 톰캣 서버) -> URL 확인 -> 요청 처리할 서블릿 찾아 실행 

web.xml : 설정을 위한 파일 

 

2. create 

web.xml 에 등록되어 있는 ContextLoaderListener (Java Class) 생성 

서블릿 컨테이너가 파일을 읽어서 구동할 때, ContextLoaderListener 가 자동으로 메모리에 생성(Pre-Loading) 

 

ContextLoaderListener 클래스 

ServletContextListener 인터페이스 구현하고 있음. ApplicationContext 생성하는 역할 수행 

Servlet 생명주기 관리 

Servlet 사용하는 시점에 서블릿 컨텍스트에 ApplicaionContext 등록, Servlet이 종료되는 시점에 ApplicationContext 삭제 

 

 

3. loading 

생성된 ContextLoaderListener는 root-context.xml Loading 

 

4.running, create, create 

root-context.xml 에 등록되어 있는 Spring Container 구동 

root-context.xml 에는 view 지원을 제외한 공통 bean 설정 (web 관련 bean들은 등록해주지 않음)

 

5. request from Client 

클라이언트로부터 웹 어플리케이션 요청이 옴. 

최초의 클라이언트 요청에 의해 DispatcherServlet 생성 

 

6. create 

DispatcherServlet 생성됨 

DispatcherServlet 객체는 servlet-context.xml 파일 로딩, 두번째 스프링 컨테이너 구동 

이 두번째 스프링 컨테이너가 Controller 객체를 메모리에 생성 

 

DispatcherServlet은 FrontController 역할 수행. 

클라이언트로부터 요청 온 메시지를 분석하여 알맞은 PageController에게 전달하고 응답받아 요청에 따른 응답 결정 

 

7. loading 

DispatcherServlet은 servlet-context.xml Loading 

web.xml을 보면 DispatcherServlet 이 servlet-context.xml 을 가리키고 있음. 

servlet-context.xml 을 보면 어노테이션을 스캔하여 bean 객체로 등록함을 볼 수 있다. 

 

8. running 

 

----------------------------------------------------------------------

아래의 글을 공부한 내용 

codevang.tistory.com/248?category=847271

 

스프링(Spring) MVC 동작 구조 및 스프링 컨테이너

- Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.1.1 Release - Build Tool : Maven 3.6.3 서블릿을 다루다 스프링으로 넘어온 후..

codevang.tistory.com

 

1. 톰캣(WAS) 구동 (web.xml) 

스프링 MVC 프로젝트 구동 시, WAS 먼저 구동 

스프링 - 자바의 서블릿 컨테이너 구동 방식 위에서 구동되는 라이브러리 집합체 

WAS 도 서블릿 컨테이너 

 

1-1. Context Path 설정 

톰캣 server.xml 

context path 와 프로젝트(어플리케이션) 이름 매핑 ) 이 path 를 달고 들어오는 URL 은 해당 프로젝트에 대한 요청이다. 

ex) path="/" 이면, 별도의 context path 없는 url 로 바로 접속 

 

1-2. 루트 컨테이너 생성 

구동될 때 참조하는 설정 파일 ) 프로젝트 안의 WEB_INF/web.xml 

 

루트 컨테이너 : 어플리케이션(프로젝트 단위)에 딱 하나만 생기는 최상위 부모 컨테이너 

- 웹기술과 관계없는 자원에 대한 빈(Bean) 만들어 관리 

참고) 

스프링 컨테이너 3가지 
- 루트 컨테이너 1개 
- 각 서블릿들이 하나씩 가지는 컨테이너 
- 개발자가 직접 만드는 컨테이너 

루트와 서블릿용 컨테이너 ) 스프링 MVC 구조에 따라 설정 파일에 있는 내용대로 자동 생성 

개발자가 xml 설정 파일 외 자바 코드에서 생성에 관여하는 부분없다. 

 

루트 컨테이너 

모든 서블릿들에서 공유할 전역 설정과 bean 생성해 사용 

 

각 서블릿용 컨테이너 

해당 서블릿 고유 설정과 bean 생성해 사용 

 

서블릿용 컨테이너는  루트 컨테이너의 자식 

부모 컨테이너로부터 필요한 걸 가져와 사용 가능 (반대는 불가) 

 

WAS 구동 시, 루트 컨테이너(어플리케이션 루트 컨텍스트) 생성 


'루트 컨테이너' 설정 

 

1-3. URL 매핑 

스프링에서 DispatcherServlet 클래스 제공 

서블릿 컨테이너가 클라이언트로부터 URL 요청을 받았을 때, 어떤 서블릿 클래스로 넘겨줄지 매핑해주는 설정 

 

이 서블릿으로 모든 요청("/") 매핑해주겠다. 

처음 서블릿 생성 시, 서블릿 컨테이너 설정 파일인 'servlet-context.xml' 파일을 파라미터로 제공해주겠다. 

 

요청이 한번도 안들어왔으므로, 서블릿은 생성되지 않고 대기 설정 파일만 가지고 있음. 

 

1-4. 필터 설정 적용 

필터 설정) 서블릿으로 요청이 들어가기 전, 최종 응답 전 공통적으로 수행되어야 할 기능 구현해주는 설정 

ex) 인코딩, 스프링 시큐리티 등 공통 처리에 사용 

필터 설정 없으면, 요청 객체마다 처리해주어야 함. 

 

=> 서블릿 컨테이너(WAS)가 구동되었으므로, 웹 어플리케이션은 클라이언트 요청을 기다리고 있는 상태 

 

2. 클라이언트 요청에 따른 서블릿 구동 

2-1. DispatcherServlet 로드 및 스프링 컨테이너 생성 

첫 요청이 들어오면, 서블릿 컨테이너가 URL매핑된 서블릿을 찾아 메모리에 로드 

JVM 의 코드 영역에 서블릿의 소스 코드 로드. 힙 영역에 기타 참조 객체 로드. 

 

스프링 MVC 프로젝트) 프론트 컨트롤러의 서블릿 역할로 이미 스프링에서 만들어 둔 DispatcherServlet 클래스 사용 (커스터마이징도 가능)

이 서블릿을 처음 구동시키면서, 초기화 파라미터(init-param)로 'servlet-context.xml' 파일 넘겨줌. 서블릿은 이 파일의 설정대로 동작. 

 

2-2. servlet-context.xml 설정대로 기능 분배 

 

'Spring' 카테고리의 다른 글

JNDI  (0) 2021.03.11
spring 에서 .xml 설정 이해하기  (0) 2021.03.09
[ spring ] spring mvc 구성 기본 예제  (0) 2020.08.03
스프링 프로젝트를 구성하는 방법  (0) 2020.06.17
ibatis  (0) 2020.06.15
Comments