클라이언트에게 네트워크를 통해 정보나 시스템을 제공하는 컴퓨터 시스템
사전적 개념은 이렇지만 확 와닿지는 않을 것이다.
우리가 온라인 쇼핑을 한다고 생각해보자.
아이디, 비밀번호 그리고 주소와 전화번호 등등 입력까지 다양한 데이터가 존재한다.
그럼 나중에 다시 들어왔을 때 데이터가 사라지는가?
아니다. 데이터는 그대로 남아있다.
정보를 다 입력해놨지만 나갔다 다시 들어온다고 사라지는 것이라면
온라인 쇼핑의 수요는 현저히 줄어들 것이다.
그리고 웹상에서 정리되어있는 쇼핑 상품들은? 그것들 또한 데이터에 속한다.
상품은 유동적이다. 품절이 될 수도 있고, 새로운 상품이 생길 수도 있다.
이렇듯 클라이언트라고 불리는 사용자들이 원하는 정보들을 제공해주는 것이 서버의 역할이다.
즉, 서버는 누군가에게 서비스를 제공한다.
서버의 종류는 웹 서버, 도메인 서버, DB 서버, 게임 서버 등등 굉장히 다양하다.
궁극적으로 서비스를 제공하는 역할은 동일하지만, 그 성격들이 상이하다.
그 중에서도 웹 서버와 웹 애플리케이션 서버(WAS)에 대해 알아볼 것이다.
Web Server
클라이언트가 요청한 정적인 컨텐츠를 HTTP를 통해 제공해주는 서버
웹 서버는 크게 두 가지 측면으로 나눌 수 있다.
소프트웨어
웹사용자가 어떻게 호스트 파일들에 접근하는지 관리
하드웨어
웹서버의 소프트웨어와 웹사이트의 컴포넌트 파일들을 저장
가장 기본적인 단계에서, 브라우저가 웹 서버에서 불려진 파일을 필요로 할 때, 브라우저는 HTTP를 통해 파일을 요청한다. 요청이 올바른 웹 서버(하드웨어)에 도달했을 때, HTTP 서버(software)는 요청된 문서를 HTTP를 이용해 보내준다.
이처럼 웹서버는 클라이언트가 요청한 정적인 컨텐츠를 HTTP를 통해
제공해주는 서버이다.
그렇다면 동적인 요청은 처리하지 못하는 것일까? 당연히 아니다. 다만
동적인 요청은 정적인 요청과는 좀 다르게 동작한다.
웹 서버에서는 정적인 요청만 처리할 수 있기 때문에 컨테이너(Container)에게 그 도움을 구한다. 컨테이너에게 동적인 요청을 넘겨주면 컨테이너에서 처리한 결과를 받아 클라이언트에게 제공한다.
*컨테이너(Container): 서블릿의 생명 주기를 관리하고, JSP를 서블릿으로 변환하는 기능을 지닌 프로그램
*서블릿(Servlet): 자바를 사용하여 웹을 만들기 위해 필요한 기술로, 클라이언트의 요청에 대한 응답을 전송하는 역할을 수행한다.
*JSP: HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이지를 생성하여 웹 브라우저에 돌려주는 서버 사이드 스크립트 언어

웹 서버의 예시로는 Nginx, Apache 등이 있다
Nginx는 추후 React를 사용할 때 다시 사용해보도록 하겠다.
웹 서버로부터 오는 동적인 요청을 처리하는 서버
WAS = Web server + Web container라고 생각하면 편하다.
즉, 웹 서버로부터 동적인 요청을 받아 처리하고 응답 결과를 웹 서버에게 다시 돌려주면 웹 서버는 받은 결과를 클라이언트에게 보여준다.

WAS의 예시로는 Tomcat, Jetty 등이 있다.
기능을 분리하여 서버 부하를 방지한다.
정적인 요청까지 WAS에게 맡겨버리면 부하가 커질 수 있어
정적인 컨텐츠는 웹 서버에게 맡겨 빠르게 처리하는 편이 좋다.
