웹 서버(Web Server) 와 WAS (Web Application Server)의 차이점
서버를 개발함에 있어 기초적인 개념인 "웹 서버(Web Server)"와 "WAS(Web Application Server)"의 차이점을 포스팅 해보려고 합니다.
💡 웹 서버(Web Server)
HTTP 프로토콜을 기반으로 클라이언트의 요청을 서비스
웹 서버란 클라이언트(사용자)가 웹 브라우저에서 어떠한 페이지 요청을 하면 웹 서버에서 그 요청을 받아 정적컨텐츠를 제공하는 서버이다. ex) Apache, Nginx
여기서 정적 컨텐츠는 html, css, js, 이미지 등 즉시 응답 가능한 컨텐츠이다.
* 클라이언트에서 요청이 올 때 가장 앞에서 요청에 대한 처리를 한다.
그렇다면 웹 서버는 정적 컨텐츠만 제공하냐?
"아니다"
웹 서버가 동적 컨텐츠를 요청받으면 WAS에게 요청을 넘겨주고 WAS에서 처리한 결과를 클라이언트에게 전달하는 역할을 한다.
💡 WAS (Web Application Server)
WAS = Web Server + Web Container
WAS는 웹 서버와 웹 컨테이너가 합쳐진 형태로, 웹 서버 단독으로 처리할 수 없는 DB조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다. ex) Tomcat, Jeus
덕분에 사용자의 다양한 요구에 대해 웹 서비스를 제공할 수 있으며, WAS는 jsp, Servlet 구동환경을 제공해주기 때문에 "웹 컨테이너(Web Container)" or "서블릿 컨테이너(Servlet Container)"라고도 불린다.
* JSP, Servlet을 실행시킬 수 있는 소프트웨어 = 컨테이너
* 동작 프로세스 [클라이언트 -> Web Server -> WAS -> DB]
- 웹 서버로부터 요청이 오면 컨테이너가 받음
- 컨테이너는 web.xml을 참조하여 해당 서블릿에 대한 쓰레드를 생성하고 httpServletRequest와 httpServletResponse 객체를 생성하여 전달함
- 컨테이너는 서블릿을 호출함
- 호출된 서블릿의 작업을 담당하게 된 쓰레드(2번에서 만든 쓰레드)는 doPost() 는 doGet() 호출
- 호출된 doPost() 또는 doGet() 은 생성된 동적 페이지를 Response객체에 담아 컨테이너에게 전달
- 컨테이너는 전달받은 Response 객체를 HTTPResponse형태로 바꿔 웹 서버에 전달하고 생성되었던 쓰레드 종료와 동시에 httpServletRequest, httpServletResponse 객체를 소멸시킴
💡 웹 서버(Web Server)와 WAS를 구분하는 이유
WAS만 써도 되겠네? 라는 질문에 대한 대답은 ❌ 입니다.
WAS는 DB 조회 및 다양한 로직을 처리하는데 집중해야 합니다. 따라서 단순한 정적 컨텐츠는 웹 서버에게 밑기며 기능을 분리시켜 서버 부하를 방지합니다.
만약, WAS가 정적 컨텐츠 요청까지 처리하면, 부하가 커지고 동적 컨텐츠의 처리속도가 느려질수 있으며, 이로 인해 페이지 노출 시간이 늘어나는 문제가 발생하여 효율성이 크게 떨어진다.
👉 웹 서버를 WAS 앞에 두고 필요한 WAS들을 Web Server에 플러그인 형태로 설정하여 사용하면 더욱 효율적인 분산 처리가 가능하다.
💡 근데 왜 Tomcat이 아닌 Apache Tomcat인 것인가?
초반에 정적컨텐츠를 처리하는 웹 서버에는 Apache가 있고, 동적 컨텐츠를 처리하는 WAS 서버는 Tomcat이 있는데 Tomcat은 Apache Tomcat이라는 이름으로 많이 사용되기 때문에 혼란스러울 수 있습니다.
붙여서 쓰는 이유는 Tomcat 5.5 버전부터 정적 컨텐츠를 처리하는 기능이 추가되었는데, 이 기능이 순서 Apache를 사용하는 것에 비해 성능적 차이가 전혀 없고 Tomcat이 Apache의 기능을 포함하고 있기 때문에 Apache Tomcat이라고 부르는 것 입니다.
'Web' 카테고리의 다른 글
문서 객체 모델 DOM은 무엇인가? (0) | 2021.05.26 |
---|---|
DataTables 사용법 및 예제 JSON, jQuery - Grid 라이브러리 (0) | 2021.05.06 |
[React 리액트] 크롬에 React 디버깅 툴 설치 방법 (React Developer Tools) (0) | 2021.03.29 |
[Web/Ajax] Ajax란 무엇인가? 개념 및 동작 원리 (0) | 2020.12.24 |