[기초] SpringBoot WAS 기본 이해

xlwdn·2022년 10월 20일
0

기본적으로 서버는 WebServer를 앞에 두고, WAS를 통해 db 커넥을 비롯한 작업들을 수행한 뒤 다시 내보내게 되는데, 이때 WebServer에는 Nginx, Apache 등이 있고, WAS에는 Tomcat 등이 있다.

기본적으로 Spring Boot에는 아파치 톰캣이 내장되어있어 사용자가 서버로 요청을 보내게되면, 특정 포트로 오는 요청을 잡아 SpringBoot 어플리케이션으로 연결시켜주는 것이다.

그렇다면 WAS는 어떻게 스프링 어플리케이션 서블릿과 연동하는걸까?

ServeltWebServerFactoryCustomize에서 servlet 생성 → DispatcherServletAutoConfiguration에서 DispatcherServlet 생성

ServeltWebServerFactoryAutoConfiguration

어노테이션순서대로 읽어보자면, ServletRequest가 classpath에 있으면 자동으로 설정하도록 하고, BeanPostProcessorsRegistrar, EmbeddedTomcat, EmbeddedJetty, EmbeddedUndertow를 임포트 한다.

이후 아래에서 tomcatServletWebServerFactoryCustomizer를 자동으로 생성해준다. 이렇게 내장 서블릿 컨테이너가 만들어지게되면,

DispatchServletAutoConfiguration에서 SpringMVC에서 핵심이 되는 DispatchServlet을 만들게 되고 서블릿 컨테이너에 등록하게된다.

DispatcherServletConfig와 ServletWebServerFactoryConfig가 분리된 이유는 어떠한 서블릿 컨테이너를 사용하던지 간에 서블릿 자체는 변하지 않기에 따로 분리하여 생성하게 된다.

다른 종류의 웹서버 사용

"How-to" Guides

...
//WebStarter
    implementation("org.springframework.boot:spring-boot-starter-web"){
        exclude(module = "spring-boot-starter-tomcat")
    }
...

위와 같이 SpringWebStarter에서 tomcat을 제외하여야 다른 웹서버를 사용할 수 있다.

//undertow
implementation("org.springframework.boot:spring-boot-starter-undertow")

이런 식으로 설정 시 undertow, jetty, netty 다양한 웹서버를 사용할 수 있는데, 나는 JBoss에서 제공하는 Netty 기반의 WAS, undertow를 주로 사용한다.

사실 undertow를 딱 고집해야하는 것은 아니지만 tomcat에 비해 좋은 성능을 낸다고 하니 굳이 안쓸 이유도 없어서 사용하고 있다.

0개의 댓글