Web Server와 WAS(Web Application Server)의 역할과 차이
1) 웹서버(Web Server) = Apach
클라이언트가 서버에 요청을 하면 가장 앞에서 요청을 받아 정적 컨텐츠(.html, .css, .png 등)를 제공하는 서버 보통 WAS앞에 여러 개 둔다. 1개의 웹서버만 있을 시, 사용자가 몰리면 서버가 터질수 있기 때문에.
①동작순서
1. 정적 컨텐츠는 웹서버가 바로 제공 가능. But 사용자에 맞춰 다른 컨텐츠를 보여줘야하는 동적인 컨텐츠(JSP, Servlet 등)는 웹서버에서 처리 불가능.
2. WAS에게 동적인 컨텐츠의 처리를 부탁하자!
3. WAS는 요청을 처리하고 HTML로 만들어서 보냄. 웹서버가 받아 User(클라이언트)에게 응답(response)
2) WAS(Web Application Server) = Tomcat = servlet container = 웹서버와 웹컨테이너의 결합
- 동적 컨텐츠를 제공하기 위해 만들어진 서버(DB조회 등의 데이터처리가 요구되는 컨텐츠)
- 동적 컨텐츠 뿐만 아니라 정적 컨텐츠도 처리 가능.
※웹컨테이너: 클라이언트의 요청이 있을 때 내부의 프로그램을 통해 결과(데이터처리 요구에 대한)를 만들어내고 이것을 다시 클라이언트에 전달해주는 미들웨어의 역할을 한다.
WAS와 Web Server 관계
① WAS 동작순서
1. 웹서버에서 요청이 오면 컨테이너가 받아서 처리.
2. 컨테이너는 web.xml 참조하여 해당 서블릿에 대한 쓰레드 생성 및 필요한 객체 생성하여 전달.
3. 컨테이너는 서블릿을 호출
4. 서블릿의 작업을 담당하는 메소드가 동적페이지를 Response객체에 담아 컨테이너에 전달.
5. 컨테이너는 전달받은 Response객체를 웹서버에 전달.
3) 아파치와 아파치 톰켓의 차이
- “웹컨테이너”의 기능을 하느냐의 차이.
- 웹서버는 정적데이터 처리를 목적, WAS는 동적인 데이터처리를 목적. 이미지나 단순html 파일의 경우 웹서버가 WAS보다 더 빠르다고 한다.
4) 왜 웹서버(Web Server)와 WAS를 나눈 것일까???
결론부터 먼저 말하자면 효율적인 처리를 위해서이다. WAS는 동적 컨텐츠(DB처리 등)를 처리하는 일을 하기에도 충분히 바쁘기 때문에 웹서버와 역할을 분담하도록 만든 것!
하지만 톰켓5.5버전부터(19년도 1월 기준 최신 톰켓 버전은 9.0버전)는 정적파일을 Httpd의 native모듈을 사용해서 정적파일을 처리하는 기능이 추가됐다. 톰캣에서 Apach Native모듈을 사용하는 것과 순수하게 Apach Httpd만 사용하는 것과 비교해서 성능이 전혀 떨어지지 않는다. 따라서 단지 정적 파일 처리의 성능만을 위해서라면 굳이 톰캣 앞에 Apache Httpd를 두는 것은 불필요하다. 오히려 메모리만 많이 먹고, 관리부담은 커지고, 불필요한 부하만 걸릴 뿐이다.