인터넷을 기반으로하여 정보를 공유, 검색할 수 있게 해주는 서비스
클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터시스템.
하나의 컴퓨터가 네트워크로 연결된 다른 하나 또는 그 이상의 컴퓨터들에게 어떠한 서비스를 제공해주면, 그 서비스를 제공하는 컴퓨터가 서버, 서비스를 받는 컴퓨터는 클라이언트가 된다.
서버인 컴퓨터는 클라이언트가 될 수도 있다.
예를들면 컴퓨터 A는 컴퓨터 B,C,D등에게 맛집들의 정보를 제공해주는 기능을한다. A는 여기서 서버의 역할을 한다.
A는 그 맛집들의 위치정보를 제공해주기위해서 컴퓨터 X에게 그 정보를 제공받는다. 그럼 이때 A는 클라이언트가 된다.
우리의 컴퓨터도 서버가 될수 있지만 컴퓨터의 부하, 통신의 질이 떨어진다.
따라서 보통의 회사나, 개인등은 IDC에 있는 컴퓨터를 사용하거나. 본인 회사에 서버컴퓨터를 구축하거나, AWS 클라우드 컴퓨팅 서비스를 이용한다.
웹에서 실행되는 응용프로그램
JSP나 서블릿을 구동할 수 있는 환경을 제공, 동적인 컨텐츠를 생성하는 역할
웹서버(Web Server)
클라이언트로부터 HTTP요청을 받아서 HTML, css, image와 같은 정적인 컨텐츠를 제공하는 프로그램
정적컨텐츠?
-> 요청인자값에 상관없이 달라지지않는 컨텐츠. 어떤 사용자이건 동일한 응답을 제공 (HTML, css, image)
기능
-> 클라이언트로부터 HTTP요청을 전달받음
-> 정적컨텐츠 요청일 경우 요청에 대한 데이터를 만들어서 응답
-> 동적컨텐츠 요청일 경우 WAS에게 전달하고, WAS가 처리한 결과를 클라이언트에게 응답으로 제공
웹어플리케이션 서버 (WAS:Web Application Server)
DB조회나 다양한 비지니스로직처리를 요구하는 동적인 컨텐츠요청에 대해서, 이를 제공하기 위해 만들어진 프로그램
동적컨텐츠?
-> 요청인자값에 따라 바뀔 수 있는 컨텐츠
기능
-> 클라이언트로부터 HTTP요청을 받을수 있고, 요청에 따른 정적컨텐츠 제공가능
-> 정적인 페이지에서 처리할 수 없는 DB조회나 다양한 로직처리를 통한 동적컨텐츠 제공가능
-> php, jsp와 같은 언어들을 사용해서 동적인 페이지 생성가능
Web Server (정적) vs WAS (정적 + 동적)
WAS와 Web Server의 차이는 한마디로,
"사용자와, 상황의 변화에 따라서 서로다른 응답을 줄 수 있는가의 여부이다"
기능을 분리하여 서버의 부하를 방지한다.
클라이언트에게 요청이 오면 Web Server가 먼저 받아서 정적,동적처리인지 확인을 하고
정적인처리면 응답을 제공하고, 동적인 처리면 WAS에게 넘긴다
-> WAS는 동적인처리에 집중할 수 있어서 서버의 부하가 덜하다.
보안강화에 유리하다.
Web Server와 WAS를 물리적으로 분리하면, 공격이 왔을 때 Web Server가 앞단에 존재하므로 중요한정보다 담긴 DB나 비지니스로직가지 접근하지 못하게 한다.
(실제서버 외부에 노출하지 않음)
여러대의 WAS연결이 가능
대용량의 웹 어플리케이션 같은 경우 여러대의 WAS를 사용한다.
웹서버는 여러대의 WAS에 대한 로드밸런싱 기능을 할 수 있어서, WAS가 처리해야하는 요청을 여러대의 WAS가 나누어서 처리할수 있도록 설정할 수 있다.
여러대 WAS의 Health Check를 통해서 서버의 상태를 확인해서 정상적인 서버에만 요청을 할 수 있다.
여러대의 WAS가 존재하면 다른종류의 WAS로 서비스가 가능하다.
(한대는 jsp, 한대는 php 등...)
+ 로드밸런싱이란?
'부하분산' 이라고도하며 컴퓨터 네트워크 기술의 일종으로, 서버의 부하를 방지하기 위해 서버를 분산하여 가햐지는 부하를 적절하게 분산하는 작업이다.
한마디로 두대이상의 컴퓨터에 작업을 나누는 것 이라고 볼 수 있고, 이 작업을 담당하는 장비를 '로드밸런서'라고 한다.
+ Health Check란?
서버에 주기적으로 HTTP요청을 보내서 서버의 상태를 확인하는 것 (200응답이 정상적으로 오는지)
interval : Health Check를 통해서 서버 상태를 확인하는 주기
fail : 요청의 n회이상 실패하면 서버가 비정상이라고 인지
passes : 서버가 다시 복구되어 n번 연속 성공하면 서버가 정상적인 상태라고 인지
-> n값은 지정이 가능하다