본문 바로가기
📌 Back End/└ Spring

[Spring] Spring Framework 구동원리 기본동작 순서 및 구조

by 쫄리_ 2023. 3. 13.
728x90
반응형

1. Spring Framework 실행순서


2. Log명 도식화


구분 프로세스 파일명 실제 LOG
Tomcat
서버 가동시
Apache 실행 commons-daemon.log Apache Commons Daemon procrun (1.2.4.0 64-bit) started.
Tomcat 실행 및 server.xml 로딩 [info] ( prunsrv.c:1325) [ 5740] Starting service...
프로토콜 핸들러 초기화 catalina.log [main] org.apache.coyote.AbstractProtocol.init 프로토콜 핸들러 ["http-nio-7080"]을(를) 초기화합니다.
[main] org.apache.coyote.AbstractProtocol.init 프로토콜 핸들러 ["ajp-nio-127.0.0.1-7009"]을(를) 초기화합니다.
엔진가동 [main] org.apache.catalina.core.StandardEngine.startInternal 서버 엔진을 시작합니다: [Apache Tomcat/8.5.70]
ROOT (WAR 파일) 배치 정보 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR 웹 애플리케이션 아카이브 [C:\Tomcat\apache-tomcat-8.5.70\webapps\ROOT.war]을(를) 배치합니다.
JAR 파일 불러오기 (초기화 > Start) [org.apache.catalina.webresources.JarResourceSet@6e4827fd]을(를) 위한 상태를 [INITIALIZING](으)로 설정합니다.
Java API 실행 [WebappLoader[]]을(를) 위한 상태를 [STARTING](으)로 설정합니다.
ROOT 폴더 생성되며 web.xml 로딩 Root(WAR 파일) 서버내 setup 완료
contextLoaderListner 생성 web.xml <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
root-context.xml 로딩 <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/spring/applicationContext*.xml</param-value>
</context-param>
bean으로 등록된 클래스 생성 (bean 설정) root-context.xml
(applicationContext.xml)
root-context.xml
<context:component-scan base-package="egovframework,teleweb,telewebinside,chestlove">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
실행 완료 [main] org.apache.catalina.startup.Catalina.start Server startup in 17527 ms
클라이언트 요청시 디스패처 서블릿 생성 실제 요청이 들어가야 객체가 할당이 되는 것이기 때문에 로그상에는 없을 수 있지만, 이를 확인하기 위해서는 java Monitoring & Management Console라는 프로그램을 사용하면 된다.
servlet.context.xml 로딩되며 controller 서블릿 생성  
Tomcat
서버 종료시
프로토콜 핸들러 일시정지 및 Catalina 중지 catalina.log [Thread-7] org.apache.catalina.core.StandardService.stopInternal 서비스 [Catalina]을(를) 중지시킵니다.
Bean 종료 (STOPPED > DESTROYED) java.lang.Thread.sleep(Native Method)
JDK내 JDBC 드라이버 등록 제거 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc 웹 애플리케이션 [ROOT]이(가) JDBC 드라이버 [net.sf.log4jdbc.DriverSpy]을(를) 등록했지만,
웹 애플리케이션이 중지될 때, 해당 JDBC 드라이버의 등록을 제거하지 못했습니다. 메모리 누수를 방지하기 위하여, 등록을 강제로 제거했습니다.
API STOPPED > 컨테이너가 있을때만 Wrapper, Session, 리소스(util), 파일압축(deploy) [localhost-startStop-2] org.apache.catalina.util.LifecycleBase.setStateInternal [org.apache.catalina.authenticator.FormAuthenticator[/examples]]을(를) 위한 상태를 [STOPPED](으)로 설정합니다.
API DESTROYED
- Wrapper, Session, 리소스(util), 파일압축(deploy)
[Thread-7] org.apache.catalina.util.LifecycleBase.setStateInternal [org.apache.catalina.authenticator.FormAuthenticator[Container is null]]을(를) 위한 상태를 [DESTROYED](으)로 설정합니다.
JAR 파일 STOPPED [localhost-startStop-2] org.apache.catalina.util.LifecycleBase.setStateInternal [org.apache.catalina.webresources.JarResourceSet@5357d1d8]을(를) 위한 상태를 [STOPPED](으)로 설정합니다.
JAR 파일 DESTROYED [localhost-startStop-2] org.apache.catalina.util.LifecycleBase.setStateInternal [org.apache.catalina.authenticator.FormAuthenticator[/examples]]을(를) 위한 상태를 [STOPPED](으)로 설정합니다.
프로토콜 핸들러 및 커넥터 중지, 소멸 [Thread-7] org.apache.coyote.AbstractProtocol.destroy 프로토콜 핸들러 ["ajp-nio-127.0.0.1-7009"]을(를) 소멸시킵니다.
엔진 DESTROYED [Thread-7] org.apache.catalina.util.LifecycleBase.setStateInternal [Pipeline[StandardEngine[Catalina]]]을(를) 위한 상태를 [DESTROYED](으)로 설정합니다.
Tomcat 종료 [Thread-7] org.apache.catalina.util.LifecycleBase.setStateInternal [StandardServer7005]을(를) 위한 상태를 [DESTROYED](으)로 설정합니다.

3. 참고사이트

[블로그] 웹서버 구동 및 종료와 서블릿의 라이프사이클

[블로그] Tomcat Log 파일 종류

[블로그] Server.xml 설명

[블로그] Tomcat 구조 및 server.xml과 context.xml의 차이

[블로그] 서버 프로그래밍에 대한 이해 context.xml /server.xml / web.xml

728x90
반응형