클라이언트로 부터 받은 요청을 정적콘텐츠(.html, .jpeg, .css 등)으로 제공하는 서버.
Apache Server, Nginx가 대표적임.
HTTP 프로토콜을 기반으로 클라이언트의 요청을 서비스 한다.
정적인 컨텐츠 제공(WAS를 거치지 않음)
동적인 컨텐츠를 제공하기 위해 WAS로 요청을 보내고, WAS에서 처리된 결과를 다시 클라이언트 한테 전달.
DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위한 서버.
웹 컨테이너, 서플릿 컨테이너 라고 불리기도 함.
Tomcat, JBoss, Jeus가 대표적임.
웹 서버의 기능도 할 수 있음.
프로그램 실행 환경과 DB 커넥션을 제공.
여러 개의 트랜젝션 관리.
비지니스 로직 수행.
정적인 컨텐츠 동적인 컨텐츠란?
정적인 컨텐츠는 변하는게 없이 정해져있는 컨텐츠를 말함. 일반적으로 변할게 없는 html페이지(요즘엔 잘 없는듯), 이미지 파일 같은걸 뜻함.
동적인 컨텐츠는 사용자의 행동에 맞춰 변하는 컨텐츠를 말함. 요즘 인터넷 페이지만 봐도 클릭하면 페이지 전체가 바뀌는게 아니라 일부분만 동적으로 바뀌는 모습임. 이런걸 처리하는게 WAS라고 보면 된다.
WAS는 웹 서버의 기능도 포함하고 있어서 WAS만 써도 상관은 없다. 하지만 웹 서버를 WAS의 앞에 두고서 사용하면 WAS의 부담을 줄일 수 있고 클라이언트 입장에서도 효율이 좋다.
기능을 분리하여 서버 부하 방지
WAS는 제 1목적은 동적인 컨텐츠 제공이다.
WAS는 DB처리, 비지니스로직 처리 등 바쁜일을 하기 때문에 단순한 정적인 컨텐츠는 웹 서버에서 처리하는게 클라이언트 입장에서도 빠르고 좋다.
웹 서버가 정적인 컨텐츠를 분담을 안해주면 WAS의 부하는 커지게 된다. 이는 동적 컨텐츠의 처리 수행 속도가 느려질 수 밖에 없다.
물리적으로 분리하여 보안 강화
여러대의 WAS를 사용가능.
웹 서버 하나에 여러 WAS를 연결하여 여유가 있는 WAS에 요청을 보낼 수 있음. 이걸 로드벨런싱이라함.
여러 WAS중 오류가 있는 WAS가 있다면 웹 서버가 해당 WAS에는 요청을 보내지 않도록 하고 해당 WAS를 재시작 할 수 있음.
즉, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 웹 서버와 WAS를 분리한다. 웹 서버를 WAS 앞에 두고 필요한 WAS들을 웹 서버에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능.
한 줄평 : 대용량 처리를 위해서는 반드시 웹 서버를 로드벨런서로 사용해서 서버의 분산을 줄여주는게 좋다.
참고 -
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html