- WEB ( WEB SERVER)
웹 서버는 사용자가 브라우저 주소창에 url을 입력하여 어떤 페이지를 요청하면, http 요청을 받아들여 HTML 문서와 같은 정적인 콘텐츠를 사용자에게 전달해주는 역할을 한다.
단순히 저장된 웹 리소스들을 사용자들에게 전달하고, 사용자로부터 콘텐츠를 전달받아 저장하거나 처리한다.
사용자로부터 동적인 요청이 들어왔을 때, 해당 요청을 웹 서버 자체적으로 처리하기 어렵기 때문에 WAS에 요청한다.
대표적인 WEB서버 종류 : Apach, Nginx, IIS(window 전용 웹 서버)
- WAS (WEB APPLICATION SERVER)
웹 서버와 동일하게 HTTP 기반으로 동작합니다.
웹 서버가 할 수 있는 기능 대부분이 WAS에서도 처리가 가능하며, 비즈니스 로직(서버사이드 코드)을 처리할 수 있어 사용자에게 동적인 콘텐츠를 전달할 수 있습니다.
주로 데이터베이스 서버와 같이 수행된다.
즉 WAS의 주요 임무는 동적인 요청을 받아 처리해주는 서버입니다.
웹 애플리케이션 서버는 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크이다.
대표적인 WAS의 종류: Tomcat, Jboss, jeus
동일한 부분도 있지만 사용의 목적이 다름
웹서버는 정적인 데이터 처리로 이미지나 단순한 HTML 같은 정적인 리소스를 전달하며, WAS만을 이용할 때보다 빠르고 안정적, 반면 WAS는 동적인 데이터를 위주로 처리하는 서버, DB와 연결되어 사용자와 데이터를 주고받고, 조작이 필요한 경우 WAS를 활용
그렇다면 웹서버가 할 수 있는 일을 WAS로만 전부 가능하다면 웹 서버는 굳이 사용하지 않아도 될까?
물론 정적인 콘텐츠만을 제공하는 웹사이트를 서버에 배포한다면 웹서버만으로 충분하다.
하지만 동적인 콘텐츠를 제공하는 웹서비스 배포해야 할 때는 정적, 동적 요청 처리가 모두 가능한 WAS만을 사용해도 되지 않겠냐? 생각 할 수 있지만 WAS는 DB 조회 및 다양한 로직을 처리하는데 집중해야 한다.
따라서 단순한 정적 콘텐츠는 웹 서버에게 맡기고, 기능을 분리해 서버 부하를 방지해야 한다.
만약 WAS만을 이용해 정적 콘텐츠 요청까지 처리하게 된다면, 부하가 커지고 동적 콘텐츠 처리가 지연되면서 수행 속도가 느려진다. 이에 따라 페이지 노출 시간이 늘어나는 문제가 발생하여 효율성이 크게 떨어진다.
위의 그림처럼 웹 서버를 앞단에 두고, WAS는 웹 서버가 처리하기 힘든 서버 사이드 코드의 로직 등을 수행하여서 웹 서버와 함께 효율적인 콘텐츠를 제공할 수 있다.
사람들이 많이 접속하는 대용량 WAS인 경우, 서버의 수가 여러 대일 수도 있을텐데 만약 사용 중에 WAS에서 문제가 생겨 WAS를 재시작해야 하는 경우가 생긴다면 이때 웹서버에서 WAS를 사용하지 못하도록 요청을 차단한다. 그다음 WAS를 재시작한다면, 사용자들은 WAS에 문제가 발생한지 모르고 이용할 수 있다.
이러한 처리를 '장애 극복 기능'이라고 한다. 즉 규모가 커질수록 WEB과 WAS를 분리하는 것이다. 그리고 자원을 이용하면서 효율성, 배포 및 유지 보수 편의성을 위해 대체로 분리하여 둡니다.
소프트웨어 공학에서 장애 극복 기능이란 컴퓨터 서버, 시스템, 네트워크 등에서 이상이 생겼을 때, 예비 시스템으로 자동 전환될 수 있도록 처리하는 기능입니다. 반면 수동으로 직접 전환 처리하는 것을 스위치 오버라고 합니다.
1) 사용자 -> 웹 서버 -> DB
2) 사용자 -> WAS -> DB
3) 사용자 -> 웹 서버 -> WAS -> DB
또한 리버스 프록시 구조를 가져가며 서버 부하 방지와 보안적 효율을 얻을 수 있습니다.