HTTP 기반
정적 리소스 제공(HTML, CSS, 이미지, 영상, JS 등)
예) NGINX, APACHE...
HTTP 기반
웹서버 기반 정적 리소스 기능 + 프로그램 코드를 실행해 애플리케이션 로직 수행
예) 동적 HTML , HTTP API, 서블릿, JSP, SPring MVC 등...
was,DB만으로 시스템 구성 가능(was는 정적 리소스, 애플리케이션 로직 모두 제공 가능)
하지만 was가 너무 많은 역할을 담당하게 되어 서버 과부하 우려 된다.
was가 장애시 오류 화면도 노출 불가능 해짐
따라서 정적 리소스는 웹서버가 처리
애플리케이션 로직이나 동적인 처리가 필요하면 was에 요청을 위임한다.
was는 중요한 애플리케이션 로직 처리를 전담하게 되어 서버 과부하 우려를 해결할 수 있다.
장점
동시에 요청을 처리할 수 있게된다.
CPU나 메모리등 리소스가 허용할 때 까지 처리가 가능하다.
하나의 쓰레드가 지연이 되어도, 나머지 쓰레드는 정상 동작한다.
단점
고객의 요청이 올 때 마다 쓰레드를 생성하면, 응답 속도가 늦어진다.
쓰레드는 컨텍스트 스위칭 비용이 발생하고 비용은 매우 비싸다.
쓰레드 생성에 제한이 없어 고객 요청이 너무 많이 오면 CPU나 메모리의 임계점을 넘게 되어 서버가 다운될 수 있다.
멀티 쓰레드에 대한 부분은 WAS가 처리한다.
따라서 개발자가 멀티 쓰레드 관련 코드를 신경쓰기 않아도 되어 마치 싱글 쓰레드 프로그래밍 하듯 편리하게 소스 코드를 개발할 수 있게 된다. 다만 멀티 쓰레드 환경이므로 싱글톤 객체(서블릿, 스프링 빈)는 주의해서 사용 해야한다.