Web Server란?
웹 서버는 클라이언트로부터 HTTP 요청을 받아 HTML 문서나 각종 리소스(Resource)를 전달하는 컴퓨터
클라이언트는 주문을 하는 고객이라고 생각하고, 웹 서버는 주문을 받는 직원이라고 생각하시면 편함.
직원인 서버는 고객이 주문하기를 기다리는 것처럼 클라이언트의 요청을 기다리고, 고객이 HTTP 요청을 보냄.
요청을 보내면, 직원은 고객의 주문에 대한 상품을 만들어서 주는 것처럼 서버는 클라이언트의 요청에 대한 데이터를 만들어서 응답하는 것이라고 보면 됨.
예를 들어서, 네이버 페이지 같은 경우에는 html, css, 이미지 같은 걸로 되어있을 텐데, 얘네들을 정적인 데이터라고 하고, 웹서버는 클라이언트에게 정적인 데이터만 넘겨줄 수 있음. 이미 만들어져 있는 정적인 데이터가 클라이언트 쪽으로 넘어가는 거임. 근데 내가 동적인 컨텐츠도 서버에서 넘겨주고 싶다? 예를 들어서 구구단하는 로직? 프로그램?을 넘겨주고 싶어. 근데 기본적인 웹서버로만 구구단을 하려면 미리 다 만들어 놔야 되는거임. 구구단 짜기가 얼마나 쉬운데 포문그냥 돌리면 되는건데? 구구단을 다 짠다? 너무 비효율적이라는 거.
WAS(Web Application Server)란?
그래서 동적인 컨텐츠를 넘겨주기 위하여 Web Application Server 줄여서 WAS(와스)를 쓰게 되는 거임.
- Web Application Server의 약자
- 웹 어플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크
- Web Server + Web Container
- HTML같은 정적인 페이지에서 처리할 수 없는 비즈니스 로직이나 DB 조회같은 동적인 컨텐츠를 제공
와스의 구조를 보면, 클라이언트 쪽에서 요청을 보냄. 그럼 웹서버에서 정적인 컨텐츠인지 동적인 컨텐츠인지를 확인하고, 정적이다? 그러면 바로 클라이언트에 응답을 하고, 동적인 컨텐츠이면 웹컨테이너 쪽으로 받은 요청을 보냄. 그러면 웹 컨테이너가 서블렛, JSP같은 걸 통해서 동적인 컨텐츠를 만들어서 웹서버에게 전달하고 웹서버는 그것을 다시 클라이언트에게 넘겨주게 되는 것. (서블렛, JSP 얘네는 Backend에다가 공부한거 글 올릴 예정!)
Web Server와 WAS의 차이
이렇게 와스는 웹서버와 다르게 정적인 데이터 처리와 동적인 데이터 처리, 이렇게 두 개 다 할 수 있음. 그러면 와스만 써도 정적인거 동적인거 다 처리할 수 있는데 아파치(Apache)같은 웹서버는 왜 쓰는거야? 톰캣(Tomcat)만 사용해도 되는거아냐?
라고 생각할 수가 있는데, 사실 아파치도 PHP로 동적페이지를 구성할 수 있다고 하고 예전에는 와스 없이 웹서버만 사용해서 동적인 컨텐츠를 제공했다고 함. 그러니까 동적인 컨텐츠, 데이터를 처리하기 위해서 와스를 쓴다고 하면 반쪽자리 정답이 되는 거임.
Web Server와 WAS가 필요한 이유
대규모 프로젝트를 보면, 이처럼 아파치와 톰캣을 함께 사용하는 경우가 많다고 함. 웹서버 따로, 와스 따로 두는 거임.
왜 굳이 그렇게 할까,,, 왜 웹서버도 필요하고 와스도 필요하냐 를 알아보면,
1. 기능을 분리하여 서버 부하를 방지
와스는 DB 조회 등 페이지를 만들기 위한 다양한 동적인 로직을 처리하는데, 단순한 정적 콘텐츠를 와스에서 제공한다면 다른 작업에 사용하는 리소스들로 인해 지연이 될 수 있고, 다른 동적 컨턴츠를 제공하는데에 방해가 될 수도 있기 때문임.
2. 이렇게 웹서버 따로, 와스 따로 사용하게 되면, 이 둘을 물리적으로 분리하여서 보안을 강화할 수 있기 때문
암호화 처리를 하기 위해서 웹서버를 사용할 수 있는데, 이 이미지에서 클라이언트랑 웹서버 쪽에서는 http요청을 보내고, 정작 중요한 DB 접근이나 로직들은 와스에서 이루어지게 됨. 그러니까 웹서버는 공격을 당해도 그 뒤에 있는 중요한 애들을 가지고 있는 와스는 공격을 받지 않게 되는 거임. 그래서 상대적으로 보안을 강화할 수 있는 것.
3. 여러 대의 와스를 연결할 수 있기 때문
여러 개의 와스를 연결을 하면 트래픽이 많아져도 A 데이터는 뭐 1번 와스 B 데이터는 2번 와스 이런식으로 적절하게 나눠서 데이터를 처리할 수 있기 때문에 데이터 처리 시간이나 효율이 좋아지게 할 수 있음. 그리고 1번 와스가 먹통이 되서 작동을 중지하게 되면, 1번 와스가 처리하던 데이터를 다른 2번 3번 와스로 처리할 수 있게 하는 거임. 이거를 fail over(장애 극복)라고 하고, fail back은 작동이 중지된 애를 재작동 시킨다는 뜻이라고 함. 그래서 대용량 웹 어플리케이션의 경우는 여러 개의 서버를 사용해서 웹서버와 와스를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다고 함.
4. 다른 종류의 와스로 서비스를 가능하게 하는 이점이 있기 때문
이게 뭔소리냐? 예를 들면 하나의 서버에서 php 어플리케이션과 자바 어플리케이션을 함께 사용할 수 있다는 거임. 여러개의 어플리케이션을 사용할 수 있게 되는 것.
💡 그니까 누가 WAS를 왜 쓰냐? 하고 물어보면, 웹 서버와 다르게 정적인 컨텐츠 뿐만 아니라 동적인 컨텐츠도 사용하기 위해서 씁니다~ 가 아니라 아키텍쳐 앞단에 웹서버를 두고 뒷단에 와스를 둠으로써 (1)기능을 분리하여 서버의 부하를 방지하고, (2)물리적으로도 분리하여 보안을 강화하고, (3)여러 대의 와스를 연결하여 무중단 운영을 위한 장애 극복을 쉽게 하고, (4)다른 종류의 와스로 서비스를 가능하게 하는 이점이 있기 때문입니다~ 라고 해야된다!!!