본문 바로가기

Tech/Spring | SpringBoot

[Spring] Spring 과 Tomcat

반응형

스프링을 사용하다 보면 톰캣  (Tomcat) 이라는 이름을 듣게된다. 예전에 공부했었던 웹서버, WAS 등의 기억을 더듬어서 막연하게 스프링에 내장되어 있는 WAS 정도로 이해하고 넘어갔었다. 이번 글에서는 톰캣이 무엇인지, 스프링과 톰캣이 어떤 관계를 가지는지에 대해서 정리해보려 한다.

1. Web Server WAS (Web Application Server)

톰캣에 대해서 본격적으로 알아보기 전에 Web Server WAS 의 개념부터 정리해보자. 일반적인 웹 서비스에서 클라이언트는 서버의 규격에 맞는 HTTP 요청을 보내고 서버로부터 응답을 받는다. Web Server WAS 는 둘다 클라이언트의 요청에 알맞은 응답을 보내는 역할을 하는데, 이때 어떤 요청에 대응하는지 목적과 기능에 따라서 Web Server WAS 는 차이를 보인다.

- Web Server

Web Server 는 클라이언트의 HTTP 요청을 처리하는데 주로 html, css, javascript, 이미지, 비디오 파일 등의 정적 컨텐츠를 전달하는 역할을 한다. 특정 경로를 입력받아서 서버의 해당 위치에 있는 파일을 반환하는 식으로 동작한다.

 

특정한 로직을 수행할 필요없이 정적인 컨텐츠만 가져와서 반환하기 때문에 처리속도가 빠르다는 장점이 있다. 이때문에 WAS 앞에 위치하여 정적이니 컨텐츠만 대응하여 서버 부담을 줄이거나 요청을 여러 서버로 분산하는 로드밸런서의 역할을 하기도 한다. 많이 사용하는 Web Server 로는 Apache HTTP Server 와 nginx 등이 있다.

- WAS (Web Application Server)

웹 페이지를 구성하는 컨텐츠는 정적인 컨텐츠 뿐만 아니라 동적인 컨텐츠들도 필요하다. DB 나 다른 서비스로부터 값을 가져오거나 요청을 처리하고 이를 화면에 출력해야 하는 경우도 있다. 이를 해결하기 위해 WAS 를 사용한다.

 

WAS 는 웹 어플리케이션을 실행하기 위한 환경을 제공하는 소프트웨어이다. 클라이언트의 요청에 맞는 정적인 컨텐츠를 제공하는 Web Server 와 달리 웹 어플리케이션에 의해 생성된 동적인 컨텐츠를 제공한다.

 

WAS 는 Web Server 와 Web Container 로 함께 구성된다. Web Server 는 HTTP 요청을 받아서 Web Container 로 넘겨주고, Web Container 는 웹 어플리케이션의 처리에 따라서 데이터를 만들어서 Web Server 로 반환하여 요청을 처리한다. 자바에서는 Servlet 으로 통해서 이를 처리하기 때문에 Servlet Container 라고 부르기도 한다.

 

이번 글에서 알아볼 Apache Tomcat 이 WAS 에 해당된다.

2. Apache Tomcat

Apache Tomcat 은 자바 애플리케이션을 위한 Servlet Container 이다. 또한 내부적으로 일부 Web Server 의 기능을 내장하고 있어서 HTTP 요청을 받을 수 있다. 이떄문에 WAS 로 간주되기도 하지만 분산 트랜잭션과 같은 기능을 가지고 있지 않기 떄문에 완벽한 WAS 로 구분되지는 않는다고 한다.

 

Tomcat 은 클라이언트로부터 요청을 받아서 Servlet 과 JSP 로 해당 요청을 처리하고 그 결과를 알맞은 HTTP 응답으로 반환하는 순으로 동작한다. 요청을 처리할 때 Servlet Container 를 통해서 처리하는데, Servlet Container 는 요청이 들어오면 해다 Servlet 스레드를 생성하여 처리한다. Servlet Container 는 Servlet 의 라이프사이클을 관리하고 URL 에 따라 요청을 Servlet 과 매핑하고, HTTP 요청의 응답과 처리를 보장하는 기능을 제공한다.

※ Servlet

Servlet 은 자바 스레드 기반으로 클라이언트의 요청에 따라서 동적으로 작동하는 구성요소이다. 코드상으로는 Servlet 인터페이스를 구현한 추상 객체를 상속받아서 구현되어 있으며, 요청에 따라 각기 다른 Servlet 이 실행된다. 이때 Servlet 을 생성하고 요청에 연결 시켜 주는 것이 Tomcat 의 Servlet Conatiner 이다.

3. Spring Tomcat

Spring HTTP 요청을 받고 Servlet 을 관리하고 위해 Tomcat 을 내장하여 사용하고 있다. Spring 을 실행하면 자동으로 Tomcat 이 실행되어 HTTP 요청을 받을 수 있다. 이때문에 Web Server WAS 에 대한 특별한 지식이 없이도 동적인 웹 서비스를 제공할 수 있다.

 

Spring 에 내장되어 있는 Tomcat HTTP 요청이 들어왔을때 Spring 애플리케이션을 통해서 동적인 요청을 처리한다. 이때 사용되는 Servlet Spring DispatcherServlet 이다. Spring 에서는 DispatcherServlet 이라는 Servlet 이 모든 요청을 담당하게 하고, DispatcherServlet 에서는 Controller 에 위임하여 요청을 처리하도록 한다. 이때문에 Tomcat Servlet Conatiner 에서는 DispatcherServlet 을 통해서 요청을 처리하고 그 결과를 반환하는 흐름으로 동작한다.

[Reference]

- https://tecoble.techcourse.co.kr/post/2021-05-24-apache-tomcat/

- https://taes-k.github.io/2020/02/16/servlet-container-spring-container/

반응형

'Tech > Spring | SpringBoot' 카테고리의 다른 글

[SpringBoot] Logging - 3 (log4j2)  (1) 2024.01.13
[Spring] JaCoCo  (0) 2023.02.23
[Spring] lombok - @Builder  (0) 2023.01.30
[Spring] MapStruct  (1) 2023.01.08
[Spring] ResponseEntity  (0) 2022.12.31