본문 바로가기

스밑구 (스프링 밑단부터 구현하기)

[스밑구] Web Server와 Web Application Server 차이가 뭘까?

🔍 스프링 밑단부터 구현하기 목차

 

자! 이번에는 스프링의 밑단을 구현해보기 전에 앞서 

Web ServerWAS(Web Application Server)의 차이를 확실히 짚고 넘어가 보려고 합니다!

 

이미 Web Server와 WAS의 차이점을 잘 아시는분들은 건너뛰셔도 좋고,

잘 모르시거나 헷갈리시다면 이번 기회에 확실하게 짚고 넘어가시는게 전체적인 이해도를 가지시기에 중요한 포인트라고 생각하여 이 글도 목차에 넣어두었습니다.

 

🛫 그럼 들어가기전에 앞서 우선 Apache와 Tomcat의 차이를 다들 알고 계시나요?

혹시 '엥?? 무슨소리야 Apache Tomcat이 아니야?' 라고 생각하시는 분들은 안계신가요??

(저는 처음 접했을 때 그랬습니다..😯)

Apache 란?

 

보통 Apache라고 부를 경우엔 Apache HTTP Server를 의미하며 정적 웹서버를 담당합니다.
이는 비영리 제단인 Apache 제단에서 오픈소스로 관리하고 있는 소프트웨어입니다.
때문에 무료이고 왠만한 OS에서 동작이 가능하며 오픈소스로써 개발자들에 의해 꾸준히 개발 되어지고 있기 때문에
점차 사용률이 적어지는 추세긴 하지만 세계적으로 nginx 다음 2위로 아직 많이 사용 되고 있습니다. (23년 기준)

Tomcat 이란?

그림(이름)만 봐도 알 수 있듯이 마찬가지로 아파치 재단에서 오픈소스로 관리 되고 있습니다.

자체적으로 웹서버를 내장하고 있긴 하지만 대규모 사용자가 사용하는 시스템을 구축하려면,
웹 서버(Apache와 같은)와 연동하여 실행 할 수 있는 자바환경을 제공합니다.
(이름 때문에 오해 할 수 있지만 웹서버로 Apache가 내장된 것이 아님)

JSP나 자바 서블릿을 실행하기위해 상용 WAS에서도 서블릿 컨테이너로 사용하는 경우가 많습니다.
톰캣의 설정 또한 관리 툴이나 xml 파일 등으로 변경 할 수 있습니다.
(톰캣은 각 WAS, 컨테이너, 웹 컨테이너, 서블릿 컨테이너로도 불립니다.)

💡 정리 하자면

Apache는 정적인 요청을 처리하는 Web Server이고

Tomcat은 내장 Web Server를 가지고 있어 정적/동적 요청을 처리 할 수 있는 우선은 WAS라고 생각 해 볼 수 있습니다. 

(여기서 우선이라고 한 이유는 아래에서 같이 설명을 드리겠습니다.)

 

 

 

👏 그렇다면! 다시 본론으로 돌아와서

이제 Web Server vs Web Application Server 의 차이는 무엇일까요?

Web Server란?

웹 서버의 주된 기능은 웹 페이지(콘텐츠)를 클라이언트로 전달하는 것입니다.
주로 그림, CSS, 자바스크립트를 포함한 HTML 문서가 클라이언트로 전달됩니다.
HTTP 서버로 URL과 HTTP의 소프트웨어 일부입니다.

Web Application Server란?

WAS란 Web(Servlet) Container를 생성하고 관리하는 동적 웹 서버로 기본적으로 Web Server의 기능을 포함하며,
(여기서 Container란 JSP, 서블릿을 실행 시킬 수 있는 소프트웨어를 말합니다.)

프로그램 실행 환경과 데이터베이스 접속 기능을 제공하고 여러 개의 트랜잭션을 관리하며 업무를 처리하는 비즈니스 로직을 수행합니다.
이를통해 DB 조회나 로직 처리를 요구하는 동적 컨텐츠를 처리하고 응답하여 줄 수 있습니다.
WAS의 대부분은 Java EE 표준을 준수하여 만들어집니다.

 

 

🌟 결론

기본적으로 WAS는 웹서버를 내장하고 있지만 차이점을 서술하여 본다면

  • Web Server는 정적 콘텐츠들을 클라이언트로 전달하는 역할 하는 반면,
  • Web Application Server는 주로 동적인 (정적도 포함) 컨텐츠들을 전달하는 역할을 한다고 이해하시면 될 것 같습니다.

그리고 아까 Tomcat을 우선은 WAS라고 표현했던 이유는 WAS는 Java EE를 완전히 구현한 것인데,

Tomcat은 Java EE 중에서도 Web Container만 구현하고 있기 때문입니다. 따라서 WAS의 모든기능을 구현해 놓지 않고 Java Web Application을 동작 시키기 위함에 초점을 맞추어 개발을 하였기에 Tomcat이 완전한 WAS라고는 부르기는 애매할 수 있기 때문입니다.

 

💡 내 생각 정리

이글을 작성하기 전까지는 막연히 WAS는 톰캣이다 라고 생각을 하고 있었지만, 이제 글을 마무리하며 드는 생각은 내가 아직 WAS를 톰캣 말고는 사용해본적이 없어 무지함에 내가 사용해본 것 중엔 톰캣이 WAS지! 라고 생각을 하였던 것 같고 톰캣은 완전한 WAS가 아니다는 것을 깨닫게 되었습니다. 그리고 정말 JAVA EE를 완벽하게 구현한 WildFly(JBoss), GlassFish, IBM WebSphere 등에서 하나를 사용해보며 실제로 비교를 하는 날이 얼른 올 수 있으면 좋겠다는 생각을 하게 되었습니다.

 

 

🍀 참고로

스프링부트를 추가 구성 / 변경하지 않고 사용한다면 기본적으로 Tomcat의 내장된 웹서버를 통해 WAS와 통합된 기능을 사용하게 됩니다. 하지만 이를 사용자의 판단에 따라 분리하여 사용할 수도 있는데요.

 

💡 어떤 경우에 왜 분리하여 사용하는지는 아래와 같은 장점을 통해 알아볼 수 있습니다.

  • 단순한 정적 컨텐츠는 웹 서버에게 맡기며 기능을 분리시켜 서버 부하를 방지합니다.
  • 자주 들어오는 요청을 Web Server에서 캐싱하여 더 빠른 응답을 제공할 수 있습니다.
  • 외부/내부 네트워크에 Web Server를 두고 내부 네트워크에 WAS를 두어 직접적인 해킹이나 공격등에 대해 보안을 얻을 수 있습니다.
  • Nginx, Apache와 같은 웹 서버는 프록시 서버 기능도 수행할 수 있어 이를 통해 로드벨런싱을 하며 WAS의 부하를 줄일 수 있습니다.

 

📚 참고자료