Web Server
Web Server란?
웹 서버란 HTTP 프로토콜을 기반으로 클라이언트로 부터 요청을 받아 그에 해당하는 정적 콘텐츠를 제공하는 소프트웨어입니다.
이때 정적 콘텐츠는 HTML, CSS, 이미지 등 즉시 응답가능 자원을 말하며 개발자가 변경하지 않는이상 항상 동일하게 유지되는 자원을 말합니다.
Web Server의 기능
- WAS(Web Application Server)를 거치지않고 바로 자원(정적 콘텐츠)을 제공한다.
- 동적 콘텐츠 제공을 위해 클라이언트 요청(Request)을 WAS에 전달하고 WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)한다.
- 대표적으로 사용되는 웹 서버의 예
NginX
Apache Server
IIS(Window 전용 Web Server)
Web Application Server
WAS(Web Application Server)란?
WAS란 웹 서버와 웹 컨테이너의 기능을 모두 수행하는 프로그램으로 웹 서버가 클라이언트로부터 동적 콘텐츠에 대한 요청을 받을 경우 해당 요청을 전달받아 DB조회 또는 비즈니스 로직처리 등의 작업을 수행하여 클라이언트에게 동적 콘텐츠를 제공하는 기능을 한다.
WAS의 기능
- WAS는 HTTP 프로토콜을 기반으로 애플리케이션을 수행시켜주는 미들웨어이다.
- 웹 어플리케이션 실행 환경과 DB접속 기능을 제공한다.
WAS = Web Server + Web Container
- 즉, 웹서버의 기능을 포함하고 있어 정적 콘텐츠를 제공할 수 있다.
- WAS는 웹 컨테이너 혹은 서블릿 컨테이너라고도 부른다.
- 웹 컨테이너는
JSP
, Servlet
을 실행시킬 수 있는 구동환경을 제공한다. 자바 계열에서는 웹 어플리케이션 컨테이너라고도 부른다. 웹 어플리케이션 컨테이너는 웹 어플리케이션이 배포되는 공간을 말한다.
- 여러 웹 어플리케이션 서비스가 가능하다.
jsp
, asp
, php
와 같은 언어들을 사용해 동적인 페이지를 생성가능하다. 프로그램(웹 어플리케이션)을 실행시켜 비즈니스 로직을 처리해 그 결과를 웹 서버에 전달해준다.
Web Server와 WAS
WAS만 사용했을 경우
- WAS는 웹 서버의 기능을 포함하기 때문에 웹 서버의 기능을 제공할 수 있다.
- WAS와 DB만으로도 시스템 구성이 가능하지만, WAS가 너무 많은 기능을 담당해 서버 과부하의 우려가 생긴다.
- 정적 컨텐츠의 요청까지 WAS가 처리한다면 정적 데이터 처리로 인해 서버에 부하가 커지게 되고, 동적 컨턴츠의 처리가 지연됨에 따라 서비스의 속도가 느려질 수 있다.
Web Server와 Was를 함께 사용하는 이유
- 웹 서버를 통해 정적인 파일들을 WAS까지 가지 않고 앞단에서 빠르게 처리할 수 있다.
- 비즈니스 로직같은 동적인 처리가 필요하면 WAS에 요청을 위임한다.
- WAS는 기본적으로 애플리케이션 로직을 처리하여 동적 페이지를 제공하기 위해 최적화 되어있는 서버이다.
- 위처럼 웹 서버와 WAS를 함께 사용하면 효율적인 리소스 처리가 가능해진다.
- 정적 리소스의 요청 증가시 웹 서버만 별도로 증설할 수 있으며 동적 리소스의 요청 증가시 마찬가지로 WAS만 증설하여 서버를 안정적으로 관리할 수 있다.
Web Server와 WAS를 구분함으로써 얻는 이점
- 기능을 분리하여 서버 부하 방지
- WAS가 웹 서버의 기능을 포함해 모든 역할을 혼자 수행할 수 있지만 그만큼 WAS가 감당해야하는 작업이 많아지게 된다. 그렇기 때문에 각 서버가 감당하는 작업을 줄여 보다 효율적인 사용이 가능하도록 하기 위해 웹 서버와 WAS를 분리한다.
- 물리적으로 분리하여 보안 강화
- WAS에는 웹 어플리케이션이 올라가있기 때문에 외부와 직접 연결되어 있다면 중요한 설정이나 파일들이 외부로 노출될 위험이 있다. 웹 서버를 WAS 앞에 위치시켜 리소스를 보다 안전하게 보호할 수 있다.
- 웹 서버에 여러대의 WAS를 연결 할 수 있다.
- Load Balancing(서버나 컴퓨터에 가해지는 부하를 분산해주는 기술)을 위해서 Web Server를 사용한다.
- fail over(작동 중지된 WAS 대신 다른 WAS를 사용해 장애 극복)에 유용
- fail back(작동 중지된 WAS를 재작동 시킴)에 유용
- 특히 대용량 웹 어플리케이션의 경우(여러개의 서버 사용) Web Server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
- 예를 들어, 앞 단의 Web Server에서 오류 발생시 WAS를 이용하지 못하도록 한 후 WAS를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다.
- 여러 웹 어플리케이션 서비스 가능
- 예를 들어, 하나의 서버에서 PHP Application과 Java Application을 하나의 웹 서버에 연결해 함께 사용할 수 있다.
Web Service Architecture
웹 시스템은 다양한 구조로 설계가 가능하다.
Client - Web Server - DB
Clinet - WAS - DB
Client - Web Server - WAS - DB
이중에서 Client - Web Server - WAS - DB
의 웹 시스템 구성이 가장 효율적으로 리소스를 관리할 수 있는 구성이다.
Web Server를 WAS앞에 두고 정적 콘텐츠를 Web Server가 처리하고 동적 콘텐츠는 WAS에게 요청을 위임함으로써 WAS는 중요한 애플리케이션 로직 처리를 전담할 수 있게 된다.
Client - Web Server - WAS - DB 웹 시스템 구조의 요청 처리 순서
- Web Server는 클라이언트로부터
HTTP 요청
을 받는다.
- Web Server는 클라이언트의 요청을 WAS에 보낸다.
- WAS는 관련된 Servlet을 메모리에 올린다.
- WAS는
web.xml
을 참조하여 해당 Servlet에 대한 Thread를 생성한다. (Thread Pool 이용)
HttpServletRequest
와 HttpServletResponse
객체를 생성하여 Servlet에 전달한다.
- Thread는 Servlet의
service()
를 호출한다.
service()
는 요청에 맞게 doGet()
또는 doPost()
메서드를 호출한다.
doGet()
, doPost()
메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response
객체에 담아서 WAS에 전달한다.
- WAS는
Response
객체를 HttpResponse
형태로 바꾸어 Web Server에 전달한다.
- 생성된 Thread를 종료하고,
HttpServletRequest
와 HttpServletResponse
객체를 제거한다.
DBMS와 MiddleWare
DBMS(DataBase Management System)
- 다수의 사용자들이 DB내의 데이터를 접근할 수 있게 해주는 소프트웨어
- DBMS는 보통 서버의 형태로 서비스를 제공한다.
- DBMS에 클라이언트 시스템이 많이 접속하여 동작하면 여러 문제가 발생할 수 있다.
- Client에 로직이 많아지고 Client 프로그램의 크기가 커진다.
- 로직이 변경될때마다 매번 다시 배포해줘야한다.
- Client에 대부분의 로직이 포함되어 배포되기 때문에 보안문제가 발생할 수 있다.
- 이런 문제를 해결하기 위해 MiddleWare가 등장했다.
MiddleWare
Client - MiddleWare - DB Server(DBMS)
의 구조를 갖는다.
- MiddleWare의 동작과정
- Client는 단순히 요청만 중앙에 있는 MiddleWare Server에 보낸다.
- MiddleWare Server에서 대부분의 로직이 수행된다.
- 이때, 데이터 조작이 필요할 경우 DBMS에게 요청한다.
- 로직 결과를 Client에게 전송한다.
- Client는 그 결과를 화면에 보여준다.
- 비즈니스 로직을 Client와 DBMS사이에 MiddleWare가 담당하면서 Client는 입출력만 담당하게 된다.
[Reference]
Heee's Development Blog
김영한 - 스프링 MVC 1편
Tecoble - 로드 밸런싱
Joo Studio
테코톡 - 웹서버 vs 와스
toy-crane
유익한 글 감사합니다!