(1) Web Server란?
- 하드웨어적 개념
- Web 서버가 설치되어 있는 컴퓨터
- 소프트웨어적 개념
- *HTTP *프로토콜을 기반으로 클라이언트의 요청을 받고, HTTP로 응답하여 정적 컨텐츠(.html, .jpg, .css 등)를 제공하는 서비스 프로그램
- Web 서버는 단순히 저장된 웹 리소스들을 클라이언트로 전달하고, 클라이언트로부터 콘텐츠를 전달받아 저장하거나 처리한다.
- 대표적인 Web 서버로 Apache, Nginx, IIS 등이 있다.
* HTTP : 텍스트 기반의 통신 규약으로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
* 프로토콜 : 컴퓨터와 같은 원거리 통신 장비 간의 통신을 위한 규칙이다. 즉, 상호 합의된 통신 규약 및 약속이다.
(2) Web의 동작 예시
- 클라이언트에서 www.naver.com이라는 URL을 네이버 서버에 요청한다.
- 네이버 서버는 저장되어있던 네이머 메인의 html, css 등의 정적 리소스를 응답해준다.
- 클라이언트 측에서는 네이버에 대한 도메인 주소를 요청하지만, 실제로 컴퓨터는 IP를 사용하여 통신한다.
- 따라서 도메인 주소를 IP 주소로 변환시켜주는 중간 서버인 DNS(Domain Name System) 서버를 사용한다.
(3) WAS - Web Application Server란?
- HTTP를 기반으로 동작하고 Web 서버 기능을 포함하여 동적 컨텐츠를 제공하는 Application 서버
- DB 조회나 다양한 로직 처리를 요구하는 동적 컨텐츠(.php, .jsp, .asp 등)를 제공
- WAS 또한 웹서버와 동일하게 HTTP를 기반으로, 컴퓨터나 장치에 애플리케이션을 수행해주는 *미들웨어이다.
- 웹 컨테이너(Web Container) 혹은 서블릿 컨테이너(Servlet Container)라고도 부른다.
- Container란 *JSP, *Servlet을 실행시킬 수 있는 소프트웨어
- 즉, WAS는 JSP, Servlet 구동 환경을 제공
- 대표적인 WAS로 Tomcat, JBoss, Jeus, Wep Shpere 등이 있다.
* 미들웨어 : 운영체제와 해당 운영체제에서 실행되는 응용 프로그램 사이에서 운영체제가 제공하는 서비스 이외에 추가적인 서비스를 제공하는 소프트웨어 or 네트워크를 통해서 연결된 여러 대의 컴퓨터에 있는 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결하여 통신을 담당하는 소프트웨어라고도 한다.
* JSP : JavaServer Pages의 약자로, HTML 코드에 Java 코드를 넣어 동적 웹페이지를 생성하는 웹 어플리케이션 도구이다.
* Servlet : 동적 웹 페이지를 만들 때 사용되는 Java 기반의 웹 어플리케이션 프로그램으로, Java 코드 안에 HTML 태그가 삽입되는 구조이다.
(4) Web 서버와 WAS의 차이
- Web 서버는 정적 리소스를 위주로 제공
- WAS는 정적 리소스 제공 + 동적 리소스를 제공할 수 있는 애플리케이션 로직까지 실행
- 서블릿 컨테이너의 유무
- WAS는 애플리케이션 코드를 실행하는데 더 특화
(5) Web 서버 + WAS
WAS만으로 Web 서버의 일이 전부 가능하다면, 'Web 서버가 굳이 필요한가?'란 의문이 든다.
물론 정적 컨텐츠만을 제공하는 웹 사이트의 경우는 Web 서버만으로도 충분하다.
그러나 WAS만으로 정적 컨텐츠 요청까지 처리하게 된다면 부하가 커지고,
동적 컨텐츠 처리까지 지연되면서 수행 속도가 느려지게 된다.
이에 따라 페이지 노출 시간이 늘어나는 문제가 발생하며 효율성이 크게 떨어진다.
해결 방법은?
WAS는 DB 조회, 로직 처리에 집중해야 한다.
정적 컨텐츠의 처리는 웹 서버에게 맡기며 기능을 분리해 서버의 부하를 줄여야 한다
즉, Web 서버 + WAS의 구성으로 정적 컨텐츠 처리 + 로직 처리(동적 컨텐츠)를 분리한다.
위와 같이 Web 서버를 앞 단에 두고, WAS는 Web 서버가 처리하기 힘든 로직 등을 수행하며 부하를 줄여서 클라이언트에게 양질의 컨텐츠를 제공한다.
이처럼 규모가 커질수록 Web 서버와 웹앱 서버를 분리하는 것을 장애 극복 기능이라고 한다.
장애 극복 기능은 컴퓨터 서버, 시스템, 네트워크 등에서 이상이 생겼을 때,
예비 시스템으로 자동 전환될 수 있도록 처리하는 기능이다.
반면 수동으로 직접 전환 처리하는 것은 스위치 오버라고 한다.
웹 서비스는 아래처럼 다양한 구조를 가질 수 있다.
- Client → Web 서버 → DB
- Client → WAS → DB
- Client → Web 서버 → WAS → DB