Spring Boot

WAS와 Web server의 차이점

HEY__ 2024. 7. 29. 22:56
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

 

Spring 프레임워크를 공부하다보면 Apache(아파치), Tomcat(톰캣)과 더불어 `웹 서버`, `WAS(와스)`라는 단어도 많이 접하게 된다.

이 둘의 차이점은 무엇이며, 어떤 식으로 흐름이 이어지는지 확인해보자.

 

출처: https://7357.tistory.com/179

 

 

✅ Web server

Web server는 보통 `HTTP server`를 의미한다.

`HTTP server`는 소프트웨어, 하드웨어 2개의 관점으로 나눠 볼 수 있다.

먼저 소프트웨어 관점에서의 웹 서버는 Client(웹 브라우저)로부터 HTTP Request(요청)을 받아 정적인 컨텐츠(.html, .jpeg, .css 등)을 제공하며,

하드웨어 관점에서의 웹 서버는 위와 같은 기능을 제공하는 컴퓨터 프로그램을 실행하는 하나의 컴퓨터로 본다.

 

`Web server`의 주 기능은 Client로부터 Request를 전달받았을 때 `정적 컨텐츠(.html, .jpeg, .css 등)을 반환`하는 것이다.

위 그림에서 볼 수 있듯이 Request를 가장 먼저 받는 곳이며,

1) 정적 컨텐츠 요청이 들어온 경우 Web server에서 자체 처리가 가능하지만, 

2) 동적 컨텐츠라면 WAS에게 Request를 전달한다.

 

Web server의 예시로 `Apache(아파치)`, `Nginx` 등을 들 수 있다.


WAS (Web Application Server)

Web Application Server의 약자이며, 동적 컨텐츠를 제공하는 서버이다. 

동적 컨텐츠란 request의 내용에 따라 DB 조회, 비지니스 로직 처리 등, 말 그대로 동적으로 유연하게 대처할 수 있는 것을 말한다. 

 

WAS는 Web server처럼 HTTP 프로토콜을 기반으로 동작하며, Web server의 기능(정적 컨텐츠 제공)도 포함하며, `동적 컨텐츠를 제공`할 수 있는 서버이다.

 

어떻게 가능한걸까?

WAS는 `Web server + Web container(Servlet container)`로 이루어져 있다.

그래서 정적 컨텐츠를 제공(Web server)하면서도, Web container(Servlet container)를 통해 동적 컨텐츠를 제공할 수 있는 것이다.

 

 

🔥 WAS와 Servlet container의 관계

WAS는 Web container 혹은 Servlet container라고도 불린다.

그럼 servlet container와 WAS는 다른건가? Tomcat은 Servlet container인가? WAS인가?  

너무나 헷갈린다.

 

결론 먼저 이야기하자면, WAS는 Servlet container를 포함하는 큰 개념이다.

WAS 중에서 `Java servlet`을 지원하는 서버를 `Servlet container`라고 부르는 것이다.

그림으로 표현하자면 밑과 같다.

출처: 인프런 커뮤니티(서블릿 컨테이너/WAS 차이)

 

 

🔥 Web container와 Servlet container의 차이

그렇다면 Web container와 Servlet container는 무슨 차이가 있는 것일까?

Web container와 Servlet container를 굳이 분리해서 지칭하지 않지만, 아주 살짝 다른 의미를 가지고 있다.

 

`Web container`는 runtime에 web application들을 관리하는 역할을 한다.

API들을 제공하고, HTTP request들을 처리하며, web components(ex: sevlets, JSPs, filters, listeners...)들의 생명주기(life cycle)을 관리한다.

 

`Servlet container`는 `Java servlet`관리에 특화된 `Web container`의 한 종류이다.

Java Servlet의 스펙에 따라 구현하여 Java servlet들을 관리하고, HTTP 요청(request)과 응답(response)를 처리하는

Tomcat, Jetty 같은 소프트웨어를 `Servlet container`라고 부른다.

 

 

 

🔥 그럼 WAS만 사용해도 되는거 아닐까?

WAS가 Web server의 기능(정적 컨텐츠 제공)도 가지고 있기 때문에 WAS만 사용해도 되는게 아닐까?

그런데 우리는 왜 Nginx, Apache와 같은 Web server는 사용하는 걸까?

 

1.  WAS의 과부하를 막기 위해서

WAS가 모든 일(정적 컨텐츠, 동적 컨텐츠 제공)을 할 수 있지만, 트래픽이 많아지면 자연스레 과부하가 올 수 밖에 없다.

정적 리소스를 응답하느라, 어플리케이션 로직의 실행이 늦어져 정상적인 서비스 제공이 이루어지지 않을 수 있다.

 

WAS의 앞단에 Web server를 두어 정적 컨텐츠를 처리해준다면 WAS까지 가지 않고도 요청을 처리할 수 있을 것이고,

자연스레 WAS쪽에는 부담이 줄어들어 동적 컨텐츠 제공에만 신경쓸 수 있을 것 이다.

 

2. WAS 서버가 다운되었을 경우 사용성을 조금이나마 높여주기 위해

Web server가 정적 리소스를 제공해준다면, 트래픽 과부하와 같이 모종의 이유로 WAS가 다운되었을 경우에 사용성을 조금이나마 높여줄 수 있다.

만일 WAS가 정적 & 동적 리소스 처리를 모두 맡는다면 WAS가 다운되었을 경우에도 웹 페이지에 적어도 정적 리소스는 보여주어 사용성을 조금이나마 높여줄 수 있다.

 

 

이 외에도 WAS의 환경설정 파일을 외부에 노출시키지 않기 위해 사용하기도 하고, Load balancing, SSL에 대한 암호화 & 복호화 작업 등 보안을 위해서도 사용된다.

 


✅  참고 자료 & 링크

- web server란?

https://developer.mozilla.org/ko/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server

 

- WAS와 web server

https://7357.tistory.com/179

 

- Servlet container와 WAS의 차이

https://www.inflearn.com/community/questions/667363/%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-was-%EC%B0%A8%EC%9D%B4

https://www.inflearn.com/community/questions/505167/%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-was%EA%B0%80-%ED%97%B7%EA%B0%88%EB%A6%BD%EB%8B%88%EB%8B%A4

https://m.blog.naver.com/mrsuper/222100137204

 

- WEB, WAS, Web Container

https://velog.io/@zeesoo/WS-WAS

 

- Web container와 Servlet container의 차이

https://www.quora.com/What-is-the-difference-between-web-container-and-servlet-container-if-any#:~:text=A%20servlet%20container%20is%20the,has%20the%20correct%20access-rights.

 

- web server와 was의 차이 & 웹 서비스 구조

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

 

- Apache HTTP server? Apache Tomcat? 서버 바로 알기

https://tecoble.techcourse.co.kr/post/2021-05-24-apache-tomcat/

728x90