웹 서버와 웹 애플리케이션 서버의 차이점
웹서버와 웹 애플리케이션 서버
(1) 웹서버
웹서버란 웹에서 서버 기능을 수행하는 프로그램으로서 HTTP라는 프로토콜을 기반으로 하여 웹 클라이언트(브라우저)로부터의 요청을 서비스하는 기능을 담당한다. HTTP라는 프로토콜을 기반으로 동작하므로 웹서버를 HTTP 서버라고도 한다.
웹서버의 역할은 클라이언트로부터의 요청을 받는 일과 처리된(서비스) 결과를 클라이언트로 응답하는 일로 나뉘며, 구체적으로 다음 기능들을 처리한다.
- 클라이언트가 요청한 웹 문서를 찾아서 전달하는 기능을 처리
- 요청 파일이 없거나 문제가 발생하면 정해진 코드 값으로 응답
- 클라이언트로부터의 요청에 대한 기본 사용자 인증(Basic Authentication)을 처리
- 서버 프로그램에 대한 요청을 웹 애플리케이션 서버에 수행시키고 그 결과를 응답
(2) 웹 애플리케이션 서버
웹서버에서는 클라이언트로부터의 요청을 다양한 목적으로 서비스하기 위해 HTML뿐만 아니라 다양한 형식의 문서와 웹 애플리케이션을 처리한다. 그런데 여러 웹 클라이언트로부터의 요구를 웹서버 단독으로 처리하면 서버의 처리량이 많아지고 속도 및 보안 같은 성능에 문제가 생긴다. 또한, 웹과 C/S(Client / Server) 환경을 모두 필요로 할 때는 웹 기반의 요청과 C/S 환경 기반의 요청을 각각 개별적으로 처리하도록 구축해야 한다.
이러한 여러 가지 이유로 여러 개의 서버를 병렬로 처리하는 방법을 쓰기도 하지만, 웹 서버의 기능을 분리해서 처리하려는 목적으로 웹 애플리케이션 서버(WAS, Web Application Server)를 사용한다. 클라이언트로부터 요청받는 일과 화면에 표현하는 로직(Presentation Logic)까지만 웹서버에서 담당하고, 다양한 기능을 수행하는 로직(Business Logic)은 컨테이너가 담당하도록 WAS에서 일을 나누어 역할을 분담하는 것이다.
WAS는 크게 웹서버 기능과 컨테이너 기능으로 구성된다. 대부분 상용화된 WAS는 웹서버나 컨테이너 기능 외에 엔터프라이즈 환경에서 필요한 트랜잭션, 보안, 트래픽 관리, DB 커넥션 풀, 사용자 관리 등의 다양하고 강력한 기능을 제공한다.
톰캣(Tomcat)
아파치 톰캣은 아파치에서 개발한 WAS이다. 일반 상용 WAS 제품처럼 Java EE 스펙을 모두 갖추고 있지는 않고, JSP와 서블릿을 실행하는 컨테이너와 웹서버만 제공한다. 톰캣에서 제공하는 웹서버의 기능은 아주 기본적인 기능만 하므로 일반적으로 독립적으로 웹서버를 설치한 후 톰캣과 연동하여 실행되는 구조로 구축한다.
컨테이너
서블릿과 JSP와 같은 웹서버 애플리케이션들은 동적 콘텐츠를 생성하는 웹 컴포넌트이다. 이러한 웹 컴포넌트를 저장하는 저장소 역할, 메모리 로딩, 객체 생성 및 초기화 등 서블릿의 생명주기를 관리하고 JSP를 서블릿으로 변환하는 기능을 수행하는 프로그램이 바로 컨테이너이다.
(1) 서블릿 컨테이너
서블릿 컨테이너는 클라이언트의 요청에 따라 서블릿을 수행하는 프로그램이다. 대부분 서블릿 컨테이너는 자바로 구현된 프로그램이다. 서블릿 엔진이라고도 한다.
(2) JSP 컨테이너
JSP 컨테이너는 JSP를 서블릿으로 변환하는 프로그램이다. JSP 컨테이너 역시 서블릿으로 구현된 프로그램이다. JSP 컨테이너는 JSP 파일을 서블릿 소스로 변환 및 컴파일까지만 담당하는 프로그램이며, 변환된 서블릿의 수행은 서블릿 컨테이너가 담당한다.
대부분 WAS에서는 서블릿 컨테이너와 JSP 컨테이너를 내장하고 있다.