Apache와 Tomcat은 웹을 공부해본 사람이라면 알고있는, 적어도 한번쯤은 들어본 이름일 것이다.
오늘은 이 개념에 대해서 정리해보고자 한다.
아파치를 알아보기 전에 Web Server와 Web Application Server에 대한 이해가 필요하다.
Web Server는 보통 HTTP 서버를 의미한다. HTTP 서버란 URL(웹 주소) 및 HTTP(프로토콜 주소)를 이해하는 소프트웨어이다.
HTTP 서버는 저장하는 웹 사이트의 도메인 이름을 통해 액세스 할 수 있으며 이러한 호스팅 된 웹 사이트의 콘텐츠를 최종 사용자의 장치로 전달한다.
- 클라이언트에서 HTTP를 통해 파일을 요청한다.
- 요청이 올바른 Web 서버에 도달하면 HTTP 서버가 요청을 수락하고 요청된 문서를 찾는다.
- 찾는 문서를 HTTP를 통해 브라우저로 다시 반환한다.
(이때, 요청된 문서를 찾지 못한다면, ‘404 Not Found’ 를 반환)
여기서 Web Server의 역할은 정적인 자료를 처리하는 서버이다.
HTML, CSS, IMAGE 등 정적 파일들을 서버에 저장하고, 요청시마다 서버에 저장된 파일을 사용자에게 HTML로 반환해준다.
그렇기 때문에 Web Server는 서버 자원의 한계가 생기고, 리소스를 많이 차지한다는 단점이 발생한다.
위의 웹 서버의 단점을 해결하고자 나온 것이 WAS이다.
WAS는 웹서버 + 웹 컨테이너로 구성되어 있다. 여기서 웹 컨테이너는 Servlet과 JSP를 실행할 수 있는 서블릿 컨테이너(Servlet Container)이며, 동적 컨텐츠(Servlet, JSP)를 처리한다.
WAS는 웹서버와 웹 컨테이너의 결합으로 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행할 수 있는 서버를 말한다.
- 클라이언트에서 HTTP 요청을 한다.
- 해당 요청은 우선 Web Server에서 정적데이터만 필요한 요청인지 확인한다.
- 확인 결과 정적 데이터만이 필요하다면, 그대로 요청에 대한 응답을 클라이언트에게 보내준다.
- 만약 동적 데이터가 필요한 요청이라면, 웹 컨테이너(서블릿 컨테이너)에 넘겨준다.
- 웹 컨테이너는 요청정보를 파악하여 실시간으로 페이지에 필요한 파일을 생성하여 클라이언트에 반환한다.
이처럼 웹 컨테이너는 클라이언트 요청에서 실시간으로 결과를 만들어내고 이것을 다시 클라이언트에 전달해주는 역할을 한다.
Web Server와 WAS의 가장 큰 차이점은 이 웹 컨테이너가 있느냐 없느냐의 차이이다.
Web Server와 WAS에 대해 알아보았으니, Apache와 Tomcat은 무엇인지 알아보자.
Apache는 아파치 소프트웨어 재단의 오픈소스 프로젝트로, HTTP Request를 처리하는 웹 서버이다. 클라이언트 요청이 왔을때만 응답하는 정적 웹페이지에 사용된다. 즉, 정적 데이터(HTML, CSS, IMAGE)만을 처리한다.
Tomcat은 흔히 WAS(Web Application Server)라고 한다.
동적인 웹(Dynamic Web)을 만들기 위한 웹 컨테이너, JSP와 Servlet을 구동하기 위한 서블릿 컨테이너 역할을 수행한다.
웹서버에서 정적으로 처리해야할 데이터를 제외한 JSP, ASP, PHP 등은 웹 컨테이너(톰캣)에게 전달한다.
동적인 데이터 처리가 가능하고, DB 연결, 데이터 조작, 다른 응용 프로그램과 상호 작용이 가능하다.
많은 사람들이 Apache-Tomcat은 사실 Tomcat을 말하는 것이다. 위에서 알아봤듯이, 아파치와 톰캣의 기능은 나뉘어져 있지만 Tomcat안의 웹 컨테이너를 통해 일부 Apache의 기능을 하기 때문에, Apache-Tomcat이라는 이름으로 불리게 되었다.
웹페이지는 정적 데이터뿐만 아니라 동적 데이터도 함께 존재한다.
만약 Tomcat에서 정적 데이터와 동적 데이터 모두를 처리하게 한다면, 그만큼 부하도 커질 것이고, 응답 또한 느려질 가능성이 크다. (WAS는 정적 데이터를 바로 반환하는 Web Server보다 데이터 처리 속도가 느리다.)
그래서 정적 데이터는 아파치가 동적 데이터는 톰캣이 분산 처리하는 것이다.
Apache - 정적인 파일을 처리해주는 Web Server (80 포트)
Tomcat - DB처리와 같은 동적인 기능들을 가공하여 HTML 파일로 만들어 클라이언트에게 제공하는 WAS (8080 포트)
Web Server - HTTP, HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등의 정적 콘텐츠)를 전송해주는 서비스 프로그램
Web Application Server - 서버 계층에서 애플리케이션이 동작할 수 있는 환경을 제공하고, 안정적인 트랜잭션 처리와 관리, 다른 시스템과의 애플리케이션 연동을 지원하는 서버로 동적 콘텐츠(Sevlet, JSP)를 처리하기 위해 사용