웹 브라우저(클라이언트)로부터 HTTP요청을 받아 HTML 문서와 같은 정적 컨텐츠를 제공하는 프로그램
DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 프로그램 웹 컨테이너 혹은 서블릿 컨테이너라고도 불린다. (컨테이너란 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말한다. 즉 WAS 는 JSP, Servlet 구동 환경을 제공한다.)
WAS = Web Server + Web Container
클라이언트로부터 HTTP 요청을 받을 수 있다. (대부분의 WAS는 Web Server 내장)
요청에 맞는 정적컨텐츠를 처리하고 DB 조회나 다양한 로직 처리를 통해 동적 컨텐츠까지 제공
WAS가 다해주는데 Web Server가 굳이 왜 필요??
1. 책임 분할을 통한 서버 부하 방지- 정적 컨텐츠는 웹서버, 동적 컨텐츠는 WAS가 담당 - 웹서버를 통해 정적인 파일들을 Application Server까지 가지 않고 앞단에서 빠르게 보낼 수 있음
2. 여러 대의 WAS 로드밸런싱 - WAS가 처리해야 하는 요청을 여러 WAS가 나누어서 처리할 수 있도록 설정
📎 Load Balancing이란?
하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 여러 대의 서버가 적절히 분산처리하여 해결해주는 서비스
📎 여러 개의 WAS를 관리하는 Health Check
서버에 주기적으로 HTTP 요청을 보내 서버의 상태를 확인(특정 url 요청하여 응답이 오는지 확인하는 것)
서버에 이상이 생기면 was 에 대한 연결을 자동으로 차단한다. fails 설정만큼 정상 응답이 오지 않으면 비정상 서버로 간주, 복구 후에 passes 설정만큼 정상 응답이 온다면 해당 서버로 요청을 다시 전달함
3. 물리적으로 분리하여 보안강화 - 리버스 프록시를 통해 실제 서버를 외부에 노출하지 않을 수 있다.
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
http://cybersecuritynews.co.uk/popular-web-application-attacks-and-recommendations/
https://www.youtube.com/watch?v=mcnJcjbfjrs