웹 서버란 HTTP 프로토콜을 기반으로 클라이언트가 웹 브라우저에서 어떠한 요청을 하면 그 요청을 받아 정적 컨텐츠를 제공하는 서버다.
정적 컨텐츠란 단순 HTMl 문서, CSS, 이미지, 파일 등 즉시 응답 가능한 컨텐츠다.
이때 웹 서버가 정적 컨텐츠가 아닌 동적 컨텐츠를 요청받으면 WAS에게 해당 요청을 넘기고, WAS에서 처리한 결과를 클라이언트에게 전달하는 역할도 해준다.
이러한 웹 서버에는 Apache, Nginx 등이 있다.
WAS란 DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버다.
HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어로, 주로 DB 서버와 같이 수행이 된다.
WAS는 JSP, Servlet 구동환경을 제공하기 때문에 서블릿 컨테이너 혹은 웹 컨테이너로 불린다. 이러한 WAS는 웹 서버의 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시되었다.
분산 트랜잭션, 보안, 메시징, 스레드 처리 등 기능등을 처리하는 분산 환경에서 사용된다. WAS는 프로그램 실행 환경과 DB 접속 기능을 제공하고, 여러 트랜잭션을 관리 가능하다. 또한 비즈니스 로직을 수행할 수 있다.
이러한 WAS에서는 Tomcat, JBoss, WebSphere 등이 있다.
WAS는 Web Server와 Web Container의 역할을 모두할 수 있다. 여기서 컨테이너는 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말한다. 현재 WAS의 웹 서버도 정적 컨텐츠를 처리하는데 성능상 큰 차이가 없다.
WAS가 웹 서버 기능까지 모두 수행하면 된다고 생각할 수 있지만 웹 서버와 WAS를 분리해야한다. 그 이유는 다음과 같다.
이러한 이유로 웹 서버를 WAS 앞에 두고 필요한 WAS들을 웹 서버에 플러그인 형태로 설정하면 효율적인 분산 처리가 가능하다.
(위 그림은 WAS 구조를 나타낸 사진이다.)
(위 그림은 웹 서비스 구조이다.)
웹 서비스는 다양한 구조를 가질 수 있다.
웹 서비스 구조 그림은 3번 구조를 나타낸다. 클라이언트가 웹 서버에 HTTP 요청을 보내면 웹 서버는 정적 컨텐츠 요청을 바로 응답하고, 동적 컨텐츠 요청은 WAS에게 넘겨서 처리하고 결과를 WAS에게 받아서 클라이언트에게 넘겨준다.