현재 대부분의 웹과 앱은 HTTP를 이용해 데이터들을 전송하며 사용됩니다.
HTML,json,xml 등 대부분의 데이터들을 전송할 수 있습니다.
HTTP 기반으로 동작합니다.
정적 리소스를 제공합니다.
정적 파일 (HTML,CSS,JS) 파일을 제공할 수 있습니다.
NGINX,APACHE 등이 있습니다.
HTTP 기반으로 동작합니다.
웹 서버 기능 + 정적 리소스 제공 가능
프로그램 코드를 실행해, 애플리케이션 로직을 수행합니다.
TOMCAT이 대표적입니다.
웹서버도 프로그램을 실행하는 기능을 포함합니다.
웹 애플리케이션 서버도 웹 서버의 기능을 제공합니다.
WAS 는 애플리케이션 코드를 실행하는데 더 특화되어있습니다.
그래서 WAS에서 모든 파일을 제공하는 로직을 만들었습니다.
하지만 애플리케이션이 에러가 나면 WAS가 멈춰버리게 됩니다.
HTML 파일도 WAS에서 제공했기 때문에 WAS가 멈추면 어떤 화면도 볼 수 없습니다.
그래서 우리는 정적 리소스(HTML)을 웹 서버에 두고 WAS에서는 동적인 처리가 필요한 애플리케이션 로직만 처리하게 합니다.
이렇게 되면 오류화면을 보여줄 수 있는 기능이 가능하게 됩니다.
WAS에서 지원해주는 기능입니다.
HTTP 통신에서, 요청,응답 스펙 등을 편리하게 사용할 수 있습니다.
HTTP 요청이 옵니다.
WAS는 Request,Response 객체를 새로 만들어서 서블릿 객체를 호출합니다.
우리는 Request 객체에서 HTTP 요청 정보를 꺼내서 사용합니다.
또한 Response 객체에 응답정보를 편리하게 입력합니다.
WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성합니다.
톰캣처럼 서블릿을 지원하는 WAS를 호칭합니다.
서블릿 컨테이너는 서블릿 객체를 생성 초기화 호출 종료하는 생명주기를 관리합니다.
서블릿 객체는 싱글톤으로 관리합니다.
JSP도 서블릿으로 변환되어서 사용됩니다.
멀티 쓰레드를 지원합니다.
쉬는 쓰레드(?)가 있는 곳입니다.
필요한 쓰레드를 풀에 보관하고 관리합니다.
쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리합니다. (톰캣은 200개를 기본으로 설정합니다.)
쓰레드가 필요하면, 이미 있는 쓰레드를 풀에서 꺼내 사용합니다.
사용을 종료하면 쓰레드 풀에 해당 쓰레드를 반납합니다.
최대치를 넘으면, 대기하거나 거절할 수 있습니다.
장점
WAS 의 주요 튜닝 포인트는 최대 쓰레드 수이다.
적정 숫자는 어떻게 찾나요?
서버에서 최종 HTML을 생성해서 클라이언트에 전달합니다.
보통 정적인 화면에 사용합니다
HTML 결과를 JS를 사용해 웹브라우저에서 동적으로 생성해서 적용합니다.