서버는 역할에 따라 Web Server와 WAS로 나눌 수 있다. 간단하게 Web Server는 정적인 컨텐츠, WAS는 동적인 컨텐츠를 처리한다고 생각하면 된다. 왜 이렇게 나뉘며 처리하는 컨텐츠가 다른지 Web Server와 WAS의 개념과 구조에 대해 좀 더 자세히 알아보자.
Web Server
Web Server는 하드웨어적 개념과 소프트웨어적 개념이 있다. 하드웨어적 개념으론 Web Server가 설치된 컴퓨터를 의미하며, 소프트웨어적 개념으론 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠를 제공하는 컴퓨터 프로그램을 의미한다.
정적인 컨텐츠를 제공하는 과정은 다음 그림과 같다.

Web Server의 역할이 단순히 정적인 컨텐츠를 반환하는 것은 아니다. 클라이언트가 동적인 컨텐츠를 요청하는 경우 이를 제공하기위해 WAS에 해당 요청을 전달하고 WAS가 처리한 결과를 클라이언트에게 전달하는 중개자 역할도 수행한다.

※ Web Server로는 Apache, NGINX, Node.js 등이 있다.
WAS(Web Application Server)
HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다. Web Server의 기능(분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등)들을 분리하여 처리하고자 제시되었으며, 웹 서버와 웹 컨테이너가 합쳐진 형태로 DB 조회나 다양한 로직 처리가 필요한 동적인 컨텐츠를 제공한다.
JSP, Servlet 구동 환경을 제공하기 때문에 "웹 컨테이너(Web Container)" 또는 "서블릿 컨테이너(Servlet Container)"라고도 불린다.

※ WAS로는 Tomcat, JBoss, Jeus 등이 있다.
Web Server? WAS? 어떤 걸 써야할까?
Web Server와 WAS가 역할 분담을 한 것은 요청에 대한 처리와 관리의 효율성, 안정성을 보장하기 위함이다. 어떤 것을 써야 한다고 정해져있는 것은 아니며 제공할 서비스에 따라 더 효율적인 방식을 택하면 된다. 그래서 '어디에 써야한다' 보단 '어떤 때에 써야할까?'에 초점을 맞춰 알아보자.
1. 정적인 컨텐츠 응답이 너무 느린데?
이미지 파일과 같은 정적인 컨텐츠를 클라이언트에서 요청하는 경우 대체로 특별한 처리없이 해당하는 파일을 찾아 전달해주기만 하면 된다. 만약 서버 이용자 수가 많을 때 Web Server에서 정적, 동적 컨텐츠를 전부 처리하고 있다면 어떻게 될까? 동적 컨텐츠 처리에 대한 과정에 의해 빠르게 응답 가능한 정적 컨텐츠에 대해서도 응답이 느려지게 될 것이다. 따라서 Web Server는 동적인 컨텐츠에 대해선 WAS로 넘기고 정적인 컨텐츠에 대한 처리만을 담당함으로써 빠른 응답을 가능케 하고, 서버의 부담을 줄일 수 있다.



2. 서버가 대박나서 증설했는데 이용자들을 어떻게 분할하지?
서버 이용자 수가 증가하며 하나의 WAS로는 감당이 불가능해 WAS를 증설하였다. 증설된 WAS에도 클라이언트를 고르게 분할(LoadBalancing)하여 안정된 서비스를 제공하려고 할 때 Web Server를 이용할 수 있다. WAS 이용 상태 및 현황에 따라 Web Server에서 클라이언트의 요청을 처리할 WAS를 선택하여 각 WAS에 걸리는 부하를 조절할 수 있다.


3. WAS에서 문제가 발생했어! 서비스를 잠시 종료해야 할까?
클라이언트 요청 처리 중 한 WAS에서 문제가 발생할 수 있다. 이 경우 WAS에서 발생한 에러를 Web Server에서 받아 처리할 수 있다. 요청에 대한 처리가 다시 필요한 경우, 정상적으로 서비스 중인 WAS로 요청을 재전송하고 발생한 에러에 대해 이를 기록하고 담당자에게도 알릴 수 있다. 즉, 클라이언트는 문제없이 서비스 이용이 가능하며, 서버측은 서비스 중단없이 에러에 대한 빠른 대처가 가능해진다.





4. 2개 같은 1개의 서비스!
서로 다른 로직을 처리하는 WAS를 Web Server와 연결함으로써 클라이언트는 동일한 Web Server를 통해 다른 2가지의 서비스를 제공받을 수 있다. 즉, 클라이언트의 요청에 따라 Web Server에서 처리에 필요한 WAS를 선택할 수 있게 된다.

5. Web Server에서 다 처리하면?
정적인 컨텐츠를 처리하는 Web Server에서 동적인 컨텐츠를 처리하기 위해선 클라이언트의 요청에 대한 결과값을 미리 만들어두어야 한다. 하지만 이렇게 처리하기 위해선 자원이 매우 부족하기 때문에 실현하기에는 한계가 있다. 따라서 WAS를 이용해 필요한 경우에 동적으로 결과를 만들어 제공하는 편이 자원을 효율적으로 사용할 수 있다.
결국 Web Server와 WAS를 분리한 근본적인 이유는 자원 이용에 대한 효율성과 유지보수의 편의성을 위함이다.
Web Service Architecure
서비스의 목적에 따라 다양한 구조가 가능해진다.
- Client - Web Server - DB
- Client - WAS - DB
- Client - Web Server - WAS - DB
Q&A
Q. Web Server란?
A. 클라이언트 요청에서 이미지 파일과 같은 정적인 컨텐츠를 주로 처리하는 프로그램을 의미한다. 동적인 컨텐츠의 경우 WAS로 요청을 전달한다.
Q. WAS란?
A. 클라이언트 요청에서 DB 조회나 다양한 로직처리가 필요한 동적인 컨텐츠를 주로 처리하는 프로그램을 의미한다.
Q. Web Server와 WAS를 왜 분리하였는가?
A. 자원 이용의 효율성과 유지보수의 편의성을 위해 분리하였다. 처리하는 컨텐츠와 담당하는 역할을 구분함으로써 서버 부하를 방지하고 에러에 대한 유연한 대처, 그리고 지속적이고 다양한 서비스를 제공할 수 있게 되었다.
참고자료
'개념서 > Web' 카테고리의 다른 글
| [Web] 이메일 전송 (0) | 2023.02.13 |
|---|---|
| [Web] Multipart/form-data (0) | 2023.02.01 |
| [Web] 정적인 웹 & 동적인 웹 (0) | 2022.07.19 |
| [Web] 시작하기 (0) | 2022.06.03 |
댓글