1) 웹 서버란?
- 웹 서버의 특징은 다음과 같습니다.
(1) HTTP를 기반으로 동작합니다.
(2) 주로 정적 리소스를 제공하고, 기타 부가 기능을 제공합니다.
-> 정적 리소스에는 HTML, CSS, JS, 이미지, 영상 등이 포함됩니다.
(3) 대표적인 예에는 Nginx, Apache 등이 있습니다.
2) WAS(Web Application Server)란?
- WAS의 특징은 다음과 같습니다.
(1) HTTP를 기반으로 동작합니다.
(2) 웹 서버의 기능을 대부분 포함하면서, 프로그램 코드를 실행해서 애플리케이션 로직을 수행합니다.
(3) 서블릿, JSP, 스프링 MVC 등이 WAS에서 동작합니다.
(4) 대표적인 예에는 Tomcat, Jetty, Undertow 등이 있습니다.
3) 웹 서버와 WAS의 차이점
- 웹 서버와 WAS의 차이점은 다음과 같습니다.
(1) 웹 서버는 정적 리소스, WAS는 애플리케이션 로직을 실행할 수 있습니다.
(2) 사실은 둘의 경계가 다소 모호합니다.
-> 웹 서버도 프로그램을 실행하는 기능을 포함하기도 합니다.
-> WAS도 웹 서버의 기능을 제공합니다.
(3) 자바는 서블릿 컨테이너 기능을 제공하면 WAS라고 합니다.
(4) WAS는 애플리케이션 코드를 실행하는데 더 특화되어 있습니다.
4) 웹 시스템 구성
- 일반적으로 웹 시스템은 WAS, DB만으로 시스템 구성합니다.
WAS는 정적 리소스, 애플리케이션 로직을 모두 제공 가능합니다.
-> 단, 이렇게 WAS가 너무 많은 역할을 담당을 하면,
(1) 서버 과부하에 대한 우려가 있습니다.
(2) 가장 비싼 애플리케이션 로직이 정적 리소스 때문에 수행이 불가능할 수 있다는 문제가 있습니다.
-> 또한, WAS 장애 시 오류 화면도 노출 불가능하다는 문제가 있습니다.
- 이러한 경우 웹 시스템 구성을 웹 서버- WAS - DB로 구성할 수 있습니다.
웹 서버는 애플리케이션 로직같은 동적인 처리가 필요하면 WAS에 요청을 위임하고,
WAS는 중요한 애플리케이션 로직을 처리합니다.
-> 이렇게 구성하면 추가적으로 효율적인 리소스 관리가 가능합니다.
(1) 정적 리소스가 많이 사용되면 웹 서버를 증설하고,
(2) 애플리케이션 리소스가 많이 사용되면 WAS를 증설하면 됩니다.
-> 또한, 정적 리소스만 제공하는 웹 서버는 잘 죽지 않고,
애플리케이션 로직이 동작하는 WAS 서버는 잘 죽습니다.
만약에 WAS나 DB에 장애가 발생하면 웹 서버가 오류 화면을 제공할 수 있습니다.
-> 요즘에는 CDN이라는 정적 리소스를 캐싱할 수 있는 서버를 둡니다.
참고
김영한 스프링 MVC 1편