본문 바로가기
Spring/기타 여러가지

ServletContainer 01

by doriver 2025. 2. 1.

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