사전적 정의:
웹브라우저로부터 요청을 받아들이고, HTML와 같은 정적 파일들을 반환해주는 컴퓨터 프로그램
여기서의 정적 파일들이란, JS, HTML, CSS, XML과 같이 전처리/후처리가 없이 바로 반환이 가능한 파일들을 말한다.
만약 정적파일이 아니라 동적파일에 대한 요청이 들어온다면, Web Server가 처리가 불가능 하므로 WAS에게 요청을 넘기는 역할을 담당하기도 한다.
대표적인 Web Server로는 Apach가 있다
사전적 정의:
WAS는 HTTP프로토콜을 사용하여 사용자의 컴퓨터에 애플리캐이션이 작동할 수 있도록 처리해주는 미들웨어이다. 웹서버와는 다르게, 동적인 처리를 주로 담당한다. 때문에, 주로 DB와도 연동되어
웹 에플리케이션 서버는, 유추 가능했다시피 동적인 처리를 해주는 서버이다. WAS는 보통 동적으로 데이터들을 처리해주는 서버를 뜻한다.
WAS는 JPA, Servlet같은 구동환경도 제공해주기 때문에, 웹 컨테이너 혹은 서블릿 컨테이너라고도 불린다.
WAS의 대표적 예로는 Tomcat이 존재한다.
[주의] SpringBoot 프로젝트는 WAS가 아닙니다. WAS는 미들웨어로, 개발자와 사용자가 배포/개발/실사용시 수고를 덜어주기 위해 존재하는 프로그램입니다.
이를 토대로 보면 총 3가지의 웹서비스 구조가 생성될 수 있다.

이중, [Client(사용자) - 웹서버 - WAS - DB]의 작동 흐름을 살펴보겠다.
1. Web Server는 Client로부터 HTTP Request를 받는다
2. Web Server는 해당 요청를 파악후, 필요한 정보를 WAS로 넘긴다
3. WAS는 관련된 Servlet 메모리에 올린다
4. WAS는 web.xml을 참조하여, 해당 Servlet대한 스레드를 생성한다
5. 스레드는 Servlet의 service를 호출한다
6. service는 요청의 형식에 따라서 doGet() 또는 doPost()를 호출한다
7. 해당 함수는 DB에 접근해서 동적페이지를 제작해서 Response에 담아서 준다.
8. WAS는 Response를 HTTPResponse형식으로 바꾸어 WebServer에 전달한다.
9. 생성된 스레드 종료후 HTTPServlet에 저장된 데이터들을 제거한다.
Servlet : JSP, Servlet을 실행시킬 수 있는 소프트웨어
컨테이너: 동적데이터들을 가공하여 정적 데이터로 만들어주는 소프트웨어
*서블릿 컨테이너(servlet container): Servlet을 관리함 (Thread 생성, 메모리에서 스레드 제거, Servlet 통합 관리 등)
알 수도 있겠지만, Apache는 대표적인 Web Server고, Tomcat은 대표적인 WAS이다. 그런데, 검색해보면 Apache Tomcat이라는 프로그램이 있다.
이는, 말 그대로 Apache와 Tomcat이 결합되있는 프로그램으로, Tomcat 5.5버전 이후,Tomcat이 정적 처리 기능을 포함하게 되고, Tomcat이 Apache의 기능을 포함하게 되면서 이렇게 불리게 되었다.
[주의] Apache Tomcat의 WebServer는 Apache를 포함하고 있지 않습니다. Apache Tomcat은 그저 Apache와 비슷한 기능들을 제공하기 때문에 Apache Tomcat이라는 이름이 붙은 것입니다.