html, 텍스트, 이미지, 음성, 영상, json 등 거의 모든 확장자의 데이터를 전송할 수 있으며 서버 간 데이터를 주고 받을 때에도 대부분 HTTP 프로토콜을 사용한다.
HTTP 기반으로 동작하며 특정 디렉토리에 정적 리소스 파일
(html, css, js, 이미지, 영상 등)을 보관해 두면 서버에서 파일들을 클라이언트로 전송해준다. 즉, HTTP 프로토콜로 파일을 주고 받을 수 있다!
ex) 대표적 웹 서버 : NGINX, APACHE
HTTP 기반으로 동작하며 웹 서버 기능을 포함한 다른 기능들을 제공한다. 프로그램 코드를 실행
해서 애플리케이션 로직을 수행한다. 프로그래밍을 하므로 사용자마다 다른 화면을 제공할 수 있다. (동적)
ex) 톰캣, jetty
웹 서버는 정적 리소스(파일 단위)를 제공하지만 WAS는 애플리케이션 로직까지 실행할 수 있다. 사실, 둘의 용어와 경계도 모호하다고 볼 수 있는데, 웹 서버도 프로그램을 실행하는 기능을 포함하기도 하고 WAS도 웹 서버의 기능을 제공하기 때문이다.
그중, 자바는 서블릿 컨테이너 기능을 제공하면 WAS라고 한다. 요즘, 서블릿 없이 자바코드를 실행하는 서버 프레임 워크도 존재한다.
WAS는 애플리케이션 코드를 실행하는데 더 특화되었다고 생각하면 된다~
WAS와 데이터베이스 만으로도 시스템 구성이 가능하다. WAS는 정적 리소스와 애플리케이션 로직 둘 다 제공하기 때문이다.
하지만, WAS가 너무 많은 역할을 담당하게 되면 서버 과부하 문제가 발생할 수 있다. 가장 비싼 애플리케이션 로직이 정적 리소스라서 수행하는데 어려울 수 있으며 WAS가 장애가 나면 오류 화면도 노출시킬 수 없는 단점이 있다.
위의 문제를 해결하기 위해 웹 서버를 WAS 앞에 추가해서 정적 리소스들을 처리할 수 있도록 구조를 바꾼다. 웹 서버는 애플리케이션 로직같은 동적인 처리가 필요하면 WAS에 요청을 위임시키면 되고 WAS는 중요한 애플리케이션 로직 처리를 전담하게 둔다.
정적 리소스를 제공하는 웹 서버는 왠만해선 장애가 발생하지 않는데 애플리케이션 로직이 동작하는 WAS는 잘 다운된다. 따라서 WAS와 데이터베이스에서 장애가 발생할 때, 웹 서버에서 관련 오류 화면을 제공해 줄 수 있게 된다.