이 두 단어는 이전 글인 Servlet의 WAS를 조사하며 나온 단어들이다. WAS는 클라이언트와 웹서버를 연결할 수 있도록 도와주는 미들웨어로 서버와 함께 동작한다고 배웠다. 그럼 Tomcat과 Nginx 둘 모두 서버를 도와주는 미들웨어라는 뜻인데.. 이것이 무엇인지 자세히 알아보자.
둘 모두 서버를 도와주는 친구들이라고 했으니 먼서 웹서버가 무엇인지 살펴본다.
웹 페이지를 클라이언트에게 HTTP나 HTTPS를 이용해 필요한 HTML 문서 혹은 데이터를 전달해주는 기능을 하는 컴퓨터 프로그램.
→ 정적 데이터를 제공해주는 서버.
정적 데이터를 다루는 만큼 당연히 정적 데이터 처리가 주요 역할이다.
이는 곧 단순히 웹 리소스를 클라이언트로 전송하고, 클라이언트로 받은 정보를 저장하거나 처리한다는 뜻이다.
하지만 우리는 정적인 데이터만을 사용하지 않는다.
이를 보조하기 위해 나온 것이 이전에 공부한 WAS 이다.
대표적인 WS의 종류엔 Apache, Nginx 등이 있다고 한다.
둘의 차이를 비교하기 위해 기존에 작성한 것을 가져왔다.
인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어, 주로 동적 서버 컨텐츠를 수행하는 것으로 웹 서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행된다.
→ 웹 서버와 웹 컨테이너가 합쳐져 서버 만으로 처리하기 어려운 비즈니스 로직들을 처리할 수 있도록 해주는 프로그램이다. 이때 JSP, Servlet 등을 제공하기 때문에 웹 컨테이너, 서블릿 컨테이너 등으로 불리기도 한다.
여기서 중요한 부분은 개념에서 보이듯 웹 서버와 웹 컨테이너가 합쳐지면서 동적인 데이터 처리가 가능하다는 것이다.
또한 동적인 것 만이 아니라 정적인 것도 가능하다.
대표적인 WAS의 종류엔 Tomcat, JBoss 등이 있다.
WAS의 설명에서 볼 수 있듯이 WAS는 정적인 데이터와 동적인 데이터 모두 처리 가능하다. 그런데 왜 WS를 쓰는 것일까?
위의 내용 중에서 가장 중요한 점은 서버 부하 방지의 기능인데 이 기능을 이해하기 위해서는 리버스 프록시(Reverse proxy)서버를 알아야 한다.
클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.
→ 그 중계 기능을 하는 것이 프록시 서버

위에서 말하는 프록시 서버는 포워드 프록시 서버를 의미한다.
프록시 서버는 그림처럼 클라이언트 앞에 놓여 있다. 그림을 보면, 클라이언트가 인터넷 웹 서버에 요청을 보내면 중간에서 그 요청을 프록시가 가로챈다.
이후 프록시 서버는 해당 요청을 웹 서버에게 다시 보내고 웹 서버에 받은 응답을 다시 클라이언트에게 전달한다.
이는 해당 기관에 속한 사람들이 웹사이트에 직접적으로 방문하는 것을 방지하고, 특정 사이트에 접속하는 것을 금지하고, 사용자의 정보를 감추기 위해 사용된다.

리버스 프록시 서버는 아래 그림처럼 웹 서버 앞에 놓여 있다. 포워드 프록시 서버는 클라이언트 앞에 놓여 있는 반면, 리버스 프록시는 웹 서버 앞에 놓여 있는 것이다.
WS를 설명할 때 이에 대한 예시로 Apache를 들었다. Apache라는 이름을 많이 들어봤을 텐데 그 이유는 Apache라는 기업은 다양한 영역에서 오픈 소스 소프트웨어를 만드는 비영리단체 이기 때문이다.
Maven, Groovy 등을 비롯해 여기서 말할 Apache HTTP Server도 포함된다.
WS의 대표적인 소프트웨어로 위의 설명처럼 Apache HTTP Server라고 불리기도 하며 HTTP WS이다.
오픈 소스로 운영되는 만큼 굉장히 다양하고 기능적인 면에서 우수하다고 한다. 또한 구축이 쉽다는 점 때문에 많이 사용한다.
하지만 Apache 자체가 무겁다는 단점과 더불어 C10K 문제가 있었다.
이런 문제를 보완하기 위해 나온 소프트웨어가 NginX 이다.
Apache와 마찬가지로 오픈소스 WS이며 고성능과 확장 가능한 웹 응용 프로그램을 제공하기 위해 설계된 소프트웨어이다.
형성된 커넥션에 아무런 요청이 없으면 새로운 커넥션을 형성하거나 이미 만들어진 다른 커넥션으로부터 들어온 요청을 처리한다.
→ NginX는 이런 커넥션 형성과 제거, 새로운 요청을 처리하는 것을 이벤트(event) 라고 부른다.
이런 점 때문에 WAS의 동적 컨텐츠 처리를 할 수 있는 서버가 필요했고 Tomcat이 나왔다.
Tomcat도 위의 서버 프로그램과 마찬가지로 Apache에서 개발한 프로그램이지만 다른 것과 달리 WAS로 동작한다. 즉, 동적인 데이터를 처리할 수 있는 서버이다.
또한 WAS로서 Java Servlet과 JSP의 실행환경을 제공해서 동적 웹페이지를 생성하는 컨테이너의 기능을 담당한다. 여기서 DB 연결 및 데이터 조작, 타 응용프로그램과의 상호작용 등이 가능하다.
→ 이 부분이 Tomcat을 쓰는 가장 큰 이유이지 않을까 한다.
→ 위의 장점들 덕분에 호환성을 높일 수 있고 개발과 배포가 쉬워진다.
WS와 WAS를 말하며 이 두가지 서버를 섞어 사용한다고 하였다. 그렇다면 그럼 이때 우리가 사용해야 하는 WS는 무엇이고 WAS는 무엇일까.
지난 Spring Boot 게시물을 기억할 지 모르겠다. 이때 Spring Boot에는 Tomcat이 기본으로 깔려 있어 웹 서버를 구현할 때 간편하다고 했었다. 즉, Tomcat은 이미 호환이 잘 되어 있고 오히려 다른 WAS를 사용 하는 것이 추가 설정이 필요한 상황이 된다.
따라서 Tomcat은 고정하고 간다면 Apache와 NginX의 차이에 의해 선택이 갈릴 것이다.
→ 가볍고 고성능이 필요한 환경이라면 NginX와의 융합을 / 다양한 환경과 검증된 기능들이 필요하다면 Apache를 사용하는 것이 좋다.
WS는 정적 데이터를 다루는 서버, WAS는 WS에 더해 동적인 데이터를 다룰 수 있는 서버이다 .
WS에는 Apache, NginX가 있고 WAS에는 Tomcat이 있다.
NginX는 Apache의 성능을 올리고자 개발되어 확실히 더 좋은 성능을 보이고 있으나 기존의 검증되고 다양한 라이브러리를 활용하기 위해서 Apache를 사용하는 경우도 있다.