Spring Boot가 내장 톰캣(org.apache.catalina.startup.Tomcat)을 실행


Catalina , Tomcat 클래스 둘 다 Tomcat을 실행하는 역할
| org.apache.catalina.startup.Catalina | org.apache.catalina.startup.Tomcat |
| 표준 실행용( server.xml을 기반 ) | 코드 기반 실행용( 내장 Tomcat 실행을 위한 API ) |
| bin/catalina.sh start로 실행되는 Tomcat의 핵심 부팅 클래스 | Spring Boot에서 내장 Tomcat 실행 시 사용 |
org.apache.catalina.startup패키지 : Tomcat 시작 관련
org.apache.catalina.core패키지 : 컨테이너 관리
package org.apache.catalina.startup;
import jakarta.servlet.Servlet;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardEngine;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.core.StandardService;
import org.apache.catalina.core.StandardWrapper;
public class Tomcat { }
Tomcat은 여러 개의 구성 요소( Engine → Host → Context → Wrapper )로 계층적으로 구성되는데,
StandardEngine은 톰캣의 모든 웹 애플리케이션을 관리하는 최상위 컨테이너
StandardEngine (서블릿 엔진)
├── StandardHost (가상 호스트, 여러 개 가능)
│ ├── StandardContext (각 웹 애플리케이션)
│ │ ├── StandardWrapper (각 서블릿)
│ │ │ ├── DispatcherServlet (Spring MVC 서블릿)
🚀 요청 처리 흐름 정리 ( CoyoteAdapter → StandardHost → 서블릿 )
✔️ 클라이언트 요청이 Tomcat의 Coyote HTTP Connector로 들어옴
✔️ CoyoteAdapter가 요청을 받아 StandardHost로 전달
✔️ CoyoteAdapter → StandardHost → StandardContext → StandardWrapper 로 전달
✔️ StandardWrapper가 DispatcherServlet 같은 서블릿을 실행
jakarta.servlet.ServletContext
서블릿 컨텍스트를 표현하는 표준 인터페이스

org.apache.catalina.core.StandardContext 여기에 ' getServletContext() '라는 메소드가 있음
package org.apache.catalina.core;
public class StandardContext extends ContainerBase implements Context, NotificationEmitter {
public ServletContext getServletContext() {
if (this.context == null) {
this.context = new ApplicationContext(this);
if (this.altDDName != null) {
this.context.setAttribute("org.apache.catalina.deploy.alt_dd", this.altDDName);
}
}
return this.context.getFacade();
}
}
package org.apache.catalina.core;
public class ApplicationContext implements ServletContext {
private final StandardContext context;
private final ServletContext facade = new ApplicationContextFacade(this);
}
'Spring > 기타 여러가지' 카테고리의 다른 글
| 읽어볼 주제들 (0) | 2025.02.08 |
|---|---|
| @Scheduled을 이용해 일정 시간 마다 코드 실행 (0) | 2025.02.04 |
| Spring WebSocket 01 (1) | 2025.02.01 |
| STOMP (1) | 2025.01.30 |
| Spring WebSocket, 스프링 공식문서 (0) | 2025.01.29 |