개념이 하드웨어, 소프트웨어 두 가지로 구분된다.
- 하드웨어
Web 서버가 설치되어 있는 컴퓨터- 소프트웨어
웹 브라우저 클라이언트로부터 HTTP 요청을 받고, 정적인 컨텐츠를 제공하는 컴퓨터 프로그램
HTTP 프로토콜을 기반으로 클라이언트(웹 브라우저 또는 웹 크롤러)의 요청을 서비스
요청에 따라 아래의 두 가지 기능 중 적절하게 선택하여 수행한다
정적 콘텐츠 제공
WAS를 거치지 않고 바로 자원을 제공한다.
동적 콘텐츠 제공을 위한 요청 전달
클라이언트 요청을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달한다.
Apache, Nginx, IIS 등
DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버
HTTP를 통해 애플리케이션을 수행해주는 미들웨어
WAS는 웹 컨테이너(Web Container) 혹은 서블릿 컨테이너(Servlet Container)라고도 불림
* 컨테이너란 JSP, Servlet을 실행시킬 수 있는 소프트웨어. 즉, WAS는 JSP, Servlet 구동 환경을 제공
Tomcat, JBoss, Jeus, Web Sphere 등
웹서버에서는 정적인 콘텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.
WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어 제공함으로써 자원을 효율적으로 사용할 수 있다.
💡웹 서버를 WAS 앞에 두고, 필요한 WAS들을 웹 서버에 플러그인 형태로 설정하면 효율적인 분산 처리가 가능하다
클라이언트 요청을 먼저 웹 서버가 받아 WAS에 보냄
-> WAS는 관련된 Servlet을 메모리에 올림
-> WAS는 web.xml 참조해 해당 Servlet에 대한 Thread 생성 (Thread Pool 이용)
-> HttpServletRequest와 HttpServletResponse 객체 생성해 Servlet에 전달
-> doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달
-> WAS는 Response 객체를 HttpResponse 형태로 바꿔 웹 서버에 전달
-> 생성된 Thread 종료하고, HttpServletRequest와 HttpServletResponse 객체 제거