내가 좋아하는 와스(이름이 귀엽다)와 웹 서버에 대해 알아보자.
웹 서버 (Web Server)
아주 고전적인 역할을 수행하는 서버로써, 클라이언트에서 서버에 정적인 컨텐츠를 요청하면 이를 제공하는 역할을 수행한다. ( HTML, CSS, Image, JS File.. )
위의 그림에서 볼 수 있듯이 클라이언트의 요청(request)을 가장 먼저 받는 곳이다.
만약 정적 컨텐츠 요청이 들어왔다면 웹 서버에서 바로 응답(response)하고 통신이 끝나지만, 동적 컨텐츠라면 WAS에게 다시 Request를 전달한다.
웹 어플리케이션 서버 (a.k.a 와스, Web Application Server)
동적인 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버이다.
여기서 말하는 동적인 컨텐츠란 로직 처리가 요구되는 컨텐츠를 의미한다.
JSP와 Servlet 구동 환경을 제공하며 사실은 와스 혼자서 Web server의 역할까지 모두 수행할 수 있다.
따라서 위의 그림에서 Web Server를 빼버리고 WAS <-> DB만의 구성으로도 시스템을 구성할 수 있다.
고전적인 JSP가 아니라 요즘 대세인 SPA(react, vue.js..)를 사용해서 웹 어플리케이션을 구성하게 될 경우 클라이언트에게 동적으로 HTTP API를 응답하는 역할도 수행한다. 그냥 우리가 코드를 작성해서 어떤 로직을 만들었다면 모두 WAS를 통과해야 한다고 생각하면 편하다.
이름도 귀여운데 그냥 와스 하나만 사용해서 서버 구성하면 안되나요?
WAS가 너무 많은 역할을 담당하게 되면 과부하가 일어날 수 있으며, 만약 과부하가 일어난다면 정적 리소스를 응답하느라 애플리케이션 로직의 실행이 지연되어 서비스가 엉망이 될 우려가 있다.
그래서 대용량 웹 어플리케이션의 경우 일반적으로 Web Server와 WAS를 분리하여 일부 WAS의 서버가 다운됐을 경우 Web Server가 오류가 발생한 WAS를 이용하지 못하도록 한 후 WAS를 재시작하는 등 로드 밸런싱(Load Balancing)의 목적으로도 Web Server를 활용한다.
또한 SSL에 대한 암호화, 복호화 작업 등 보안을 위해서도 Web Server가 사용된다.
이런 부분들은 Web Server 자체의 기능이라고 기술하기는 어려워서 이렇게 밑에 작성하게 되었지만, 이처럼 Web Server도 안정적인 웹 서비스 구축에 꼭 필요한 존재이다.
그래서 보편적인 Web Server와 WAS의 아키텍처는 위와 같다.
통신 흐름을 설명하기 위해서는 Servlet에 대한 설명이 빠질 수 없는데, 이에 대해서는 다음에 Spring framework 기준으로 다시 글을 작성할 예정이다. ( 자바 진영 기준으로 Servlet이 사용 되는 것이고, 각각의 언어마다 별도의 기술이 있다. )
'CS ﹒ Algorithm > (구)Network' 카테고리의 다른 글
네트워크 (7) HTTP 헤더 - 2 - 쿠키와 캐시 (0) | 2022.07.26 |
---|---|
네트워크 (6) HTTP 헤더 - 1 - 종류와 사용 (0) | 2022.07.22 |
네트워크 (5) 자주 볼 수 있는 상태코드 모음 (0) | 2022.07.16 |
네트워크 (4) HTTP 메서드의 종류와 속성 (0) | 2022.07.12 |
네트워크 (3) HTTP의 개요와 특징 (0) | 2022.07.10 |