이 길고 긴 글의 세 줄 요약은 다음과 같습니다:

<aside> 💡 웹 서버는 CGI로 동적 콘텐츠를 처리했는데, 효율적인 처리를 위해 애플리케이션 서버가 등장한다.

</aside>

<aside> 💡 웹 서버와 애플리케이션 서버가 각자의 프로세스에서 돌아가기 때문에 노드를 분리할 수 있었다.

</aside>

<aside> 💡 웹 서버, 애플리케이션 서버라는 용어로 그 서버의 기능을 구분 짓지 말자. (WAS 도 헷갈리지 말자)

</aside>


Screen Shot 2021-11-07 at 5.09.19 PM.png

Nginx 테코톡을 보신 분들이 제게 "아파치 서버는 그럼 동적 콘텐츠를 처리할 수 있는 웹 서버인 건가요?" 라는 질문을 많이 하십니다. 그리고 위의 사진을 보시면 알 수 있듯, 저는 그렇다고 대답해요. 그러면 이 질문이 뒤를 잇습니다:

<aside> 🤔 아파치 서버는 "웹 서버"인데 어떻게 동적 콘텐츠를 처리할 수 있는거죠?

</aside>

테코톡의 주제가 nginx 였기 때문에 저기서는 이 주제를 다루지 않았는데, 지금은 끝났기도 하고 흥미로운 주제라 한 번 깊게 파봤습니다.

참고로 시작하기 전에, Apache Http ServerApache Tomcat은 다르다는 것을 명시하고 싶습니다. Java 로 개발을 많이 하신 분들은 Apache 서버라 하면 Tomcat 을 떠올리실 수도 있을 것 같아서, 이 둘이 다르다는 것을 염두에 두고 읽어주셨으면 좋겠습니다.

웹 서버 vs 애플리케이션 서버

먼저 웹 서버와 애플리케이션 서버라는 개념이 있습니다. 이 둘이 무엇인지부터 간단하게 보고 넘어가보도록 하죠.

웹 서버와 애플리케이션 서버에 대한 확실한 정의는 어디에도 없습니다. 각 벤더마다 제공하는 기능이 다르기도 하죠. 하지만 모두가 공통으로 받아들이고 있는 이 둘의 "기본적인 특징"이 있어요.

**웹 서버(web server)**는 다양한 파일을 저장하고 있다가, 클라이언트로부터 들어오는 요청에 대응하는 파일을 응답으로 건내줍니다. 파일의 종류로 사진, 비디오, HTML 파일 등이 있죠. 대부분의 경우 이 요청-응답 과정은 HTTP 프로토콜로 이루어지고, 서버에 저장되어 있는 파일을 따로 가공하지 않고, 있는 그대로 건내줍니다. 그래서 웹 서버가 제공하는 것을 정적 콘텐츠라고 불러요.

많은 서비스들은 이런 정적인 콘텐츠만을 제공하길 원하지 않습니다. 유저의 이름을 페이지에 나타내고 싶어하고, 서버에서 정보를 가공하여 유저의 요청에 동적으로 콘텐츠를 만들어주고 싶어하죠. 즉, 각자의 비즈니스 로직을 활용하여 응답을 만들고 싶어합니다. 동적 콘텐츠를 만들려고 하는겁니다. 그래서 우리는 **애플리케이션 서버(application server)**를 사용하는데요, 애플리케이션 서버는 앞서 말한 비즈니스 로직을 이용하여 동적 콘텐츠를 만들고 이를 제공하는 서버입니다. 우리는 이것을 흔히 WAS(Web Application Server)라고 부르죠.

Screen Shot 2021-11-09 at 11.05.23 PM.png