서버 개발에 있어서 가장 기초적인 개념인 웹 서버
와 WAS (Web Application Server)
의 차이점을 서술할 예정이다.
웹 서버의 사전적 정의는 웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고 HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램
이다.
위 내용을 이해하기 쉽게 그림으로 나타내면 밑과 같다.
여기서 HTML 문서와 같은 웹페이지
라는 문구가 살짝 모호하다고 생각할 수 있다. 사전적 정의에서 조금 더 풀어쓰면, 웹 서버는 클라이언트가 웹 브라우저에서 어떠한 페이지 요청을 하면 웹 서버가 그 요청을 받아 정적 컨텐츠
를 제공하는 서버이다.
그러니까 정적 컨텐츠
는 단순 HTML 문서, CSS, javascript, 이미지, 파일 등 즉시 응답 가능한 컨텐츠이다. 그렇다고 웹 서버가 정적 컨텐츠만을 제공하는 것은 아니다.
웹서버가 동적 컨텐츠 요청을 받으면
WAS에게 해당 요청을 넘겨 주고, WAS에서 처리한 결과를 클라이언트에게 전달해주는 역할
도 한다.
WAS는 Web Application Server의 약자이며, 사전적 정의는 인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행하주는 미들웨어로서, 주로 동적 서버 컨텐츠 수행하는 것으로 웹 서버와 구별되며, 주로 DB 서버와 같이 수행
되는 것을 의미한다.
위 사전적 정의를 이해하기 쉽게 그림으로 나타내면 밑과 같다.
WAS는 웹 서버와 웹 컨테이너가 합쳐진 형태
로서, 웹 서버 단독으로는 처리할 수 없는 데이터베이스의 조회나 다양한 로직 처리
가 필요한 동적 컨텐츠
를 제공한다. 덕분에 사용자의 다양한 요구에 맞추어 웹 서비스를 제공할 수 있다. WAS는 JSP, Servlet 구동 환경을 제공해주므로 웹 컨테이너
혹은 서블릿 컨테이너
라고 불린다.
❓ 웹 컨테이너 (Web Container)
웹 서버가 보낸 JSP, PHP 등의 파일을 수행한 결과를 다시 웹 서버로 보내는 역할을 한다.
❓ Middleware
- Client - MiddleWare Server - DB Server
동작 과정
1. Client는 단순히 요청만 중앙에 있는 미들웨어 서버에게 보낸다.
2. 미들웨어 서버에서 대부분의 로직이 수행된다.
3. 데이터 조작 관련 task는 DBMS에게 부탁한다.
4. 로직 결과츷 Client에게 전송한다.
- 비즈니스 로직을 Client와 DBMS 사이의 미들웨어 서버에서 동작하게 함으로써 Client는 입력과 출력만 담당한다.
웹 서비스 아키텍쳐는 다양한 구조를 가질 수 있다.
1. Client - Web Server - DB
2. Client - WAS - DB
3. Client - Web Server - WAS - DB
여기서 우리가 주로 사용하는 아키텍처는 3번 아키텍처이다.
위 사진은 Client -> Web Server -> WAS -> DB
구조의 동작 과정이다.
- Web Server는 웹 브라우저 클라이언트로부터
HTTP 요청
을 받는다.- Web Server는 클라이언트의 요청을
WAS
로 보낸다.- WAS는 관련된 Servlet을 메모리에 올린다.
- WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다. (이때 Thread Pool을 사용한다.)
- HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달된다.
5-1. Thread는 Servlet의 service() 메서드 호출
5-2. service()메서드는 요청에 맞게 doGet() 혹은 doPost()를 호출한다.- protected doGet(HttpServletRequest req, HttpServletResponse res)
- doGet() 혹은 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response에 담아 WAS에 전달한다.
- WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
- 생성된 Thread를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.
우리는 위 과정에서 의문이 들 것이다. 동적인 컨텐츠
를 제공하는 WAS가 정적인 컨텐츠까지 다루도록 하면 Web Server가 필요 없을 텐데 왜 굳이 Web Server를 사용하는 것일까?
서버의 부담을 줄일 수 있다.