본문 바로가기

Theory/Infrastructure & Network

WAS와 Web Server의 차이점

Hi, There!
안녕하세요, 바오밥입니다.


목차

  1. 개요
  2. 본문
  3. 마치며

개요

WAS와 Web Server는 웹 개발자를 목표로 공부를 하고 있다면 한 번쯤은 지나가면서 들어봤을 법한 용어입니다.

그럼에도 불구하고 WAS와 Web Server 간의 차이점을 정확하게 알고 있지 못하고 있는 사람들이 많습니다.

저 또한 마찬가지입니다.

이에, 관련된 내용을 조사하여 다음과 같이 정리해 보았습니다.


본문

Web에 대한 간단한 이해

웹이란 인터넷을 기반으로 정보를 공유할 수 있게 해주는 서비스입니다.

정보를 공유하는 과정에서 URL(주소), HTTP(프로토콜, 통신 규칙), HTML(내용, 웹 문서)를 사용합니다.

 

Server에 대한 간단한 이해

서버는 클라이언트에게 네트워크를 통해 무언의 서비스를 제공하는 컴퓨터 시스템을 말합니다.

서비스를 제공하는 과정에서 Apache, Nginx 등 웹 서버 패키지를 사용합니다.

 

그렇다면, Web Server는 무엇일까요?

 

Web Server에 대한 간단한 이해

즉, Web + Server = 웹 서버란 클라이언트에게 웹 서비스를 제공하는 컴퓨터 시스템 입니다.

 

Client와 Web Server의 상호 작용에 대한 간단한 이해

클라이언트가 웹 브라우저(IE, EDGE, Firefox, Chrome 등)을 이용하여 URL, HTTP(HTTPS)를 통해 웹 서버에게 데이터를 요청합니다.

서버는 클라이언트의 요청(URL, HTTP(HTTPS))에 대한 데이터를 인식하여 웹에서 처리할 수 있는 웹 문서 및 정적 리소스(이미지 등)를 반환합니다. 

 

그러나 웹 생태계가 빠르게 발전함에 따라 정적인 리소스만 제공하는 웹 서버만으로는 원하는 서비스를 구현할 수 없게 됩니다.

그래서 동적인 처리가 가능한 무언가가 나오게 됩니다.

 

바로 WAS입니다.

 

Web Application에 대한 간단한 이해

웹 어플리케이션은 웹에서 실행되는 응용 프로그램을 뜻하며, 이를 통해 동적인 처리가 가능합니다.

 

WAS(Web Application Server)에 대한 간단한 이해

즉, Web Application + Server = 웹 어플리케이션 서버란 웹 어플리케이션과 해당 웹 어플리케이션이 처리될 수 있는 서버 환경을 만들어 제공하는 소프트웨어(미들웨어) 프레임워크입니다.

 

WAS를 엄밀히 분리해 보자면 웹 서버와 웹 컨테이너로 나눌 수 있습니다.

WAS의 웹 서버는 클라이언트가 요청한 데이터가 동적인지 정적인지 판단하여 웹 컨테이너에게 전달하는 역할을 수행합니다.

WAS의 웹 컨테이너는 전달받은 데이터를 처리한 후 다시 웹 서버에게 전달하는 역할을 수행합니다.

 

Client와 WAS의 상호 작용에 대한 간단한 이해

클라이언트가 웹 브라우저를 통해 URL, HTTP(HTTPS)를 이용하여 웹 서버에게 데이터를 요청합니다.

WAS의 웹 서버는 클라이언트로부터 인입된 요청이 동적 페이지 요청일 시 웹 컨테이너에게 전달합니다.

(이때, 정적 페이지 요청일 시 웹 서버가 해당 페이지를 반환하게 됩니다.)

전달받은 웹 컨테이너는 Web Application이 구동될 수 있는 환경을 제공하고, 동적 컨텐츠를 생성하여 웹 서버에게 전달합니다.

동적인 리소스들을 전달 받은 웹 서버가 클라이언트에게 해당 데이터를 반환합니다.

 

위 글을 따르면 WAS 안에 Web Server가 있다는 것입니다.

그런데도 불구하고 WAS와 Web Server를 분리하는 이유는 무엇일까요?

 

Web Server와 WAS를 분리하는 이유

분리 이유를 이해하기 위해서는 웹 서버가 클라이언트에게 정적인 리소스를 전달하는 과정에 대해서 이해해야 합니다.

 

웹 서버가 정적인 리소스를 전달하는 과정

클라이언트가 데이터를 요청하면, 웹 서버에서는 우선적으로 웹 문서 파일(HTML)을 반환합니다.

클라이언트는 서버로부터 전달받은 HTML 문서에 읽어들인 후 문서 내의 정적 리소스를 다시 웹 서버에 요청합니다.

웹 서버는 다시금 정적인 리소스(이미지 등)들을 클라이언트에게 반환합니다.

 

이를 통해 알 수 있는 점은 WAS와 Web Server를 분리함으로써 정적인 파일들을 Web Container(Application Server)까지 가지 않고 Web Server 단에서 빠르게 제공할 수 있다는 것입니다.

따라서 웹 서버는 정적 리소스를 제공하는 데에만 초점을 둘 수 있고 WAS 내의 Application Server는 동적인 리소스를 처리하는 데에만 초점을 둘 수 있게 됩니다.

이를 통해 서버 부하를 방지할 수 있게 됩니다.

 

이와 더불어 여러 대의 WAS를 연결함으로서 Load Balancing을 구축할 수 있습니다.

  • Fail Over Cluster (장애조치 클러스터)

 

  • 여러 WAS에서 다양한 웹 어플리케이션 서비스 가능
    • 예시) 하나의 Web Server에서 2개의 WAS를 운영하여 PHP Application Server, Java Application Server를 사용하는 경우가 있습니다.

 

  • Web Server, WAS 분리를 통해 무중단 운영 가능
    • 예시) WAS가 오류난 경우 Web Server 단에서 오류가 발생한 WAS를 사용할 수 없도록 한다음 WAS를 복구할 수 있습니다. 이 경우 다른 WAS으로 Fail Over 됨에 따라 실사용자들은 서비스 사용에 큰 불편함을 느끼지 못합니다. (트래픽이 몰릴 경우에는 처리하는 WAS의 수가 줄었기 때문에 불편함을 느낄 수 있습니다.)

 

이외에도 WAS가 아니라 자체적인 웹 서버에서 처리하면 효율적인 Access Host IP 관리, Server Session 관리 등이 분리하는 이유들입니다.

 

한줄 정리

고효율성의 자원 이용 및 배포와 유지보수 편리성(장애 조치)를 위해 WAS와 Web Server를 분리해야 합니다.

 


마치며

올해 안에 위의 내용들을 가상 환경에서라도 직접 구현해 보아야 겠다는 생각이 들었습니다.

실 서비스에서 이를 적용하면 더할 나위 없겠지만 제 직업인 상담사 특성상 좀 어려울 것 같습니다.

저는 언제쯤 개발자가 될 수 있을까요?


 

'Theory > Infrastructure & Network' 카테고리의 다른 글

웹 표준과 웹 접근성  (0) 2021.07.30
Broswer Rendering의 이해  (0) 2021.07.28
Load Balancer의 이해  (0) 2021.07.26
POP3와 IMAP의 차이  (0) 2021.07.19
Forward Proxy, Reverse Proxy의 이해  (0) 2021.07.16