CS지식

Tomcat은 정확히 어떤 역할을 하는 도구일까?

indeep 2024. 5. 12. 23:32

이번에 스터디 주제는 조금 생소하면서 익숙한 주제를 담당하게 되었다.

 

톰캣(Tomcat)은 WAS의 종류 중 하나인 것, 그리고 스프링 부트에 내장되어 있다는 것만 알고 있지 다른 얘기에 대해서는 전혀 공부하지 않았었다.

 

 

간단하게 웹 서버, 웹 어플리케이션 서버에 대해 정리해 보면 다음으로 정리할 수 있다.

웹 서버

유저의 HTTP 요청이 들어오면 정적인 콘텐츠를 제공해주는 역할을 수행한다.
또는 동적인 요청이 들어왔을 때 WAS로 넘겨주는 역할을 담당한다.

WAS(웹 어플리케이션 서버)

유저의 HTTP 요청이 들어오면 동적인 콘텐츠를 제공해 주는 역할을 수행한다.

 

즉 WAS의 종류 중 하나가 톰캣이고, 이 톰캣은 동적인 콘텐츠 제공을 담당하는 녀석이다.(동적인 콘텐츠를 서블릿, JSP로 제공을 한다.)

 

https://story.pxd.co.kr/1647

위 이미지가 가장 이상적인 웹 서비스 아키텍쳐이다.

 

1. 유저의 HTTP 요청이 들어온다.

2. 정적 콘텐츠를 요청하면 웹 서버에서 바로 제공한다.

3. 동적 콘텐츠를 요청하면 WAS로 넘겨서 처리한다.

 

정적 콘텐츠는 웹 서버가 담당하도록, 동적 콘텐츠는 WAS가 담당하도록 분리시킨 것.

 

WAS가 전부 담당할 수 있지만, 부하의 문제도 있고 서버가 터졌을 경우 아무 콘텐츠도 제공하지 못한다는 단점이 있어서 분리하는 것이 좋다고 생각한다.

 

 

자 다시 본론으로 돌아가자.

 

가장 많이 들어본 것이 아파치, 톰캣이다.

 

아파치 HTTP 서버

 

즉 요약하면 아파치 HTTP 서버는 웹 서버이며, 주로 정적인 콘텐츠를 제공하는 역할을 담당한다.

(PHP 같은 스크립팅 언어를 사용해서 동적 콘텐츠를 제공할 수 있다고는 하지만 잘 사용하지 않는 것 같다.)

 

아파치 톰캣

 

아파치 톰캣은 자바의 서블릿, JSP를 실행하도록 돕는 웹 어플리케이션 서버다. 즉 WAS.

 

https://github.com/apache/tomcat

 

GitHub - apache/tomcat: Apache Tomcat

Apache Tomcat. Contribute to apache/tomcat development by creating an account on GitHub.

github.com

 

또한 톰캣의 소스 코드는 자바로 구현되어 있다. 즉 자바 기반 웹 어플리케이션에 특화되어 있다.

 

 

처음에 이름 가지고 많이 헷갈렸었다.

 

아파치 : 소프트웨어 재단

아파치 HTTP 서버(웹 서버) : 아파치 재단에서 관리하는 오픈소스 프로젝트

아파치 톰캣(WAS) : 아파치 재단에서 관리하는 오픈소스 프로젝트

 

그래서 공식문서를 살펴보면

이렇게 설명해 놓은 것을 확인할 수 있었다.(즉 전부 아파치 재단의 것)

 

근데 다들 짧게 줄여서 아파치 = 웹서버, 톰캣 = WAS로 부른다.

 

 

여기서 의아한 점이 하나 있다. 스프링 부트에서는 톰캣을 내장으로 지원한다.

그리고 따로 웹 서버를 두지 않아도, 정적 파일을 제공할 수 있고 또 동적 콘텐츠도 톰캣으로 처리할 수 있다.

 

그 말은 톰캣이 웹 서버 + WAS의 역할을 전부 한다는 소리인가?

 

맞다.

 

톰캣은 Connector라는 컴포넌트를 통해서 HTTP의 요청을 직접 받을 수 있게 된다.

여기서 웹 서버는 HTTP 요청을 받아 웹 컨테이너로 넘겨주게 되고, 웹 컨테이너에서 데이터를 처리하여 응답을 웹 서버로 넘겨주게 된다. 

자바에서는 서블릿을 통해 처리하기 때문에 웹 컨테이너 = 서블릿 컨테이너(정확히는 웹 컨테이너가 상위 개념)가 된다.

(즉 요청을 받아 서블릿을 통해 동적 콘텐츠를 생성한다.)

 

 

즉 정리하면

톰캣은 WAS이며 주 역할은 사용자의 요청을 받아 동적 콘텐츠를 제공하는 역할을 담당한다.

톰캣 하나로 정적 콘텐츠를 제공할 수도 있지만, 부하가 몰리면 성능이 떨어지게 되므로 웹 서버와 WAS를 보통 분리해서 사용한다.

 

반응형