이번에 스터디 주제는 조금 생소하면서 익숙한 주제를 담당하게 되었다.
톰캣(Tomcat)은 WAS의 종류 중 하나인 것, 그리고 스프링 부트에 내장되어 있다는 것만 알고 있지 다른 얘기에 대해서는 전혀 공부하지 않았었다.
간단하게 웹 서버, 웹 어플리케이션 서버에 대해 정리해 보면 다음으로 정리할 수 있다.
웹 서버
유저의 HTTP 요청이 들어오면 정적인 콘텐츠를 제공해주는 역할을 수행한다.
또는 동적인 요청이 들어왔을 때 WAS로 넘겨주는 역할을 담당한다.
WAS(웹 어플리케이션 서버)
유저의 HTTP 요청이 들어오면 동적인 콘텐츠를 제공해 주는 역할을 수행한다.
즉 WAS의 종류 중 하나가 톰캣이고, 이 톰캣은 동적인 콘텐츠 제공을 담당하는 녀석이다.(동적인 콘텐츠를 서블릿, JSP로 제공을 한다.)
위 이미지가 가장 이상적인 웹 서비스 아키텍쳐이다.
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를 보통 분리해서 사용한다.
'CS지식' 카테고리의 다른 글
HTTP/1.1과 HTTP/2의 차이점 (0) | 2024.05.17 |
---|---|
HTTP 응답(상태) 코드에 대한 정리 (0) | 2024.05.16 |
@Transactional 어노테이션의 역할 (0) | 2024.05.09 |
Interceptor와 Filter는 뭐가 다를까? (0) | 2024.05.06 |