2023년 07월 28일
Web Server
란 클라이언트(브라우저)로부터 HTTP 요청을 받아 HTML 문서나 각종 리소스를 전달하는 서버이다. 클라이언트의 요청을 기다리고 요청에 대한 데이터를 만들어서 응답한다. 응답하는 데이터는 즉시 응답이 가능한 정적 컨텐츠 (HTML, CSS, 이미지 등)
로 한정된다.
이 때 Web Server가 동적 컨텐츠를 요청 받으면 WAS에게 해당 요청을 넘겨주고 WAS에서 처리한 결과물을 클라이언트에게 전달하는 역할도 수행한다.
이러한 웹 서버에는 Apache
, NginX
등이 있다.
WAS
란 DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠
를 제공하기 위해 만들어진 애플리케이션 서버이다. HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어로서, 주로 데이터베이스 서버
와 같이 수행된다. WAS는 JSP, Servlet 구동환경을 제공해주기 때문에 서블릿 컨테이너
혹은 웹 컨테이너
로 불린다.
이러한 WAS는 웹 서버의 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시되었다. 분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용된다. WAS는 프로그램 실행 환경과 DB 접속 기능을 제공하고 DB와 소통한다. 이 때 사용하는 언어가 SQL이다. 또 여러 개의 트랜잭션을 관리 가능하고 비즈니스 로직을 수행할 수 있다. 즉 WAS
역할은 Web Server + Web Container
라고 볼 수 있다.
이러한 WAS에는 Tomcat
, JBoss
, WebSphere
등이 있다.
웹 페이지는 정적 컨텐츠
와 동적 컨텐츠
가 모두 존재한다. 이 때 정적 컨텐츠를 제공하는 Web Server만을 사용한다면 사용자가 원하는 요청에 대한 결과 값을 미리 모두 만들어놓은 후 서비스해야 한다. 하지만 이러한 작업을 수행하기에는 자원이 절대적으로 부족하다. 그렇기 때문에 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와 비지니스 로직에 맞게 결과를 만들어 제공함으로써 자원을 효율적으로 사용할 수 있다.
WAS
는 Web Server
와 Web Container
의 역할을 모두 할 수 있다. 여기서 Container
는 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말한다. 현재 WAS의 Web Server도 정적인 컨텐츠를 처리하는 데 성능상 큰 차이가 없다. 하지만 Web Server
와 WAS
를 분리하는 것이 좋다. 이유는 다음과 같다.