WAS, WebServer, Tomcat, 아파치, nginx 등등... 많이 듣기는 했지만 항상 헷갈리는 부분이었기에
이번에 확실히 정리를 하고 넘어가고자 합니다.
WebServer vs WAS
한 번쯤은 "WebServer는 정적인 데이터를 담당하고, WAS는 동적인 부분을 담당한다." 라는 것을 들어 보셨을 겁니다.
이 말은 맞는 말이기도 하지만 사실 두 개념을 비교하기에는 그리고 우리가 WebServer와 WAS를 둘 다 쓰는 이유를 설명하기에는 많이 부족한 말이기도 합니다.
먼저 각각의 개념에 대해 먼저 정리를 하면서, 각각이 실제로 무엇을 의미하고 우리는 왜 둘 다 사용해야 하는지 알아봅시다.
1. WebServer
웹 서버는 쉽게 말해 "웹 사이트를 제공하는 서버" 입니다.
웹 서버의 특정 폴더에 html, css, js 파일 등을 넣어 놓고 기다리다가 외부에서 지정된 URL로 접근할 때, 해당하는 파일들을 넘겨주는 것이 웹 서버가 하는 대표적인 역할 이라고 할 수 있습니다.
하지만 이렇게 기존에 만들어진 파일만 사용자에게 제공한다면 해당 사이트 이용자들은 정적인 데이터만을 볼 수 있을 것입니다.
기존에 만들어진 데이터만 보여 줄 수 있는 웹사이트, 이것을 우리는 정적 웹 이라고 부릅니다.
그리고 이 WebServer의 대표적인 예로, Apache 와 Nginx, IIS 가 있습니다.
정적 웹 vs 동적 웹?
정적 웹의 대표적인 예로, 핸드폰 사용설명서 웹페이지를 들 수 있을 것 입니다.
반대로 동적 웹이라면, 보여지는 것이 바뀌는 게시판, 유투브 페이지와 같은 대부분의 웹페이지들을 생각 하시면 됩니다.
2. WAS(Web Application Server)
웹 서버 단어 사이에 Application이 들어간 WAS는 동적 웹과 관련된 작업들을 하는 서버입니다.
유튜브를 생각 해 봅시다.
유튜브에 들어가면 내가 구독한 유튜버들의 최신 영상과 내가 관심 가질만한 영상들이 게시판 형식으로 보여집니다.
해당 영상들은 제가 접속한 시점에 따라, 유튜버들이 올리는 영상에 따라 달라지게 됩니다.
WAS는 이렇게 DB 조회, 다양한 로직이 필요한 동적인 컨텐츠를 제공하는 역할을 합니다.
이런 WAS의 대표적인 예로 Tomcat, Node.js, 쟝고, Jetty, Undertow 등이 있습니다.
WAS의 구조
아래 그림은 사용자가 정적인 웹페이지 혹은 동적인 웹페이지를 사용하기 위한 플로우를 보여줍니다.
그림만 보면 WAS에서도 Web Server을 역할을 하는 것으로 보이고, 그 생각이 맞습니다.
사실, 앞서 설명 할 때, Web Server는 정적인 컨텐츠를 제공, WAS는 동적인 컨텐츠를 제공한다. 라고 매우 단순화 시켜서 얘기했지만 실상은 조금 더 복잡합니다.
현재 WebServer로도 동적인 컨텐츠를 제공할 수 있고, 유명한 APM(Apache + PHP + Mysql) 방식이 대표적인 그 예 입니다.
또한 WAS도 WebServer를 포함하고 있는 개념입니다.
엇, 그러면 굳이 따로 따로 만들 필요가 있을까 라는 생각이 들 수 있지만,
정적/동적 콘텐츠를 제공하는 것은 WebServer나 WAS의 기능 중 극히 일부만을 얘기한 것이고, 각각 특화된 부분이 다릅니다.
그리고 그 특화된 기능들을 잘 이용하고자 우리는 굳이 WAS앞에 WebServer를 두는 것입니다.
그럼 어떤 기능들이 있는지 한번 살펴 봅시다.
WebServer의 필요성(기능)
앞서 WebServer가 정적인 컨텐츠를 제공하는 역할을 한다고 하였지만, 사실 그 이외에도 아래와 같은 많은 기능을 하고 있습니다.
아래의 내용은 IMB Youtube 영상을 참고하였습니다.
1. 로드 밸런싱(Load Balancing)
로드 밸런싱이란 서버가 처리해야 할 업무 혹은 요청(Load)을 여러 대의 서버로 나누어(Balancing) 처리하는 것을 의미합니다.
하나의 백엔드 서버가 있다고 생각 해 봅시다.
이 서버에 동시에 너무 많은 사용자가 접속하게 된다면, 그 수많은 요청을 하나의 백엔드 서버로는 처리하기 힘들 것입니다.
이 문제는 서버를 하나가 아니라 여러 개를 둔다면 이러한 문제를 해결 할 수 있을 것입니다.
하지만 이렇게 서버를 여러개를 두었을 때에도 고려해야 할 사항이 있습니다. 어떤 요청을 어떤 서버가 처리해야 할 지 입니다.
사용자의 요청들이 몰려들었을 때, 가용한 서버에게 적절히 요청을 분배 해 주는것. 바로 이걸 우리는 로드밸런싱이라고 부릅니다.
보통 하나의 서버에서 하나의 사이트를 돌릴 때에도 여러 개의 톰캣(WAS), 인스턴스를 돌리게 되는데, 그 이유가 바로 이것입니다.
그리고 이렇게 여러개의 인스턴스를 생성하게 되면, 서버 업데이트를 할 때, 서비스 중단 없이 차례대로 업데이트 함으로써 사용자들이 불편함을 느끼지 않도록 할 수 있습니다.
2. 보안성(Security) 리버스 프록시(Reverse Proxy)
WebServer는 리버스프록시(Reverse Proxy) 서버로서의 역할도 합니다.
우선, 프록시가 무엇인지 부터 알아볼까요?
일반적으로 우리가 얘기하는 프록시, 프록시 서버는 사용자가 접근하는 서버에 사용자 정보를 감추기 위해 사용됩니다.
예를 들어, 우리가 프록시 서버를 통해 특정 서버(A)에 접근한다면, A는 실제 사용자의 IP나 정보를 알지 못하고 프록시 서버의 정보만 알 수 있습니다.
그렇다면 리버스 프록시(Reverse Proxy)는 무엇일까요?
리버스 프록시란 반대로 사용자로부터 서버의 정보를 감추기 위해 사용됩니다.
보안상의 이유로 사용자가 서버 내부 포트가 어떻게 되는지 폴더 구조가 어떻게 되는지 알면 안되기 때문입니다.
이러한 리버스 프록시 기능을 WebServer에서 해주게 됩니다.
그렇기 때문에 우리는 보안을 위해서 아파치나 Nginx가 WAS 앞단에 두게 됩니다.
3. 캐싱(Caching)
캐싱이란 이미 한번 접근한 컨텐츠에 다시 접근할 때, 저 멀리에 있는 디비에서 다시 찾아오지 않도록 따로 모아 놓는 것을 의미합니다.
앞서 말한 ReverseProxy 서버에서 캐시를 할 수 있습니다.
즉, 굳이 WAS에 요청을 전달하지 않고도 ReverseProxy서버에서 사용자들이 자주 찾을만한 정보들을 모아두고 있다가 바로바로 응답해주는 것입니다.
이렇게 WebServer는 정적 컨텐츠 이외에도 많은 기능들을 제공하고 있으며, 이것이 바로 우리가 WebServer를 굳이 따로 두는 이유입니다.
'network' 카테고리의 다른 글
비전공자가 바라본 TCP vs UDP ?? (1) | 2023.06.23 |
---|