Computer Science/Network

Web : 서버의 종류 (Static/Dynamic Web Server, WAS, Apache Tomcat)

마이트너 2024. 9. 12. 13:10

 


➡️ 서버의 종류

“서버란 정보를 제공하는 역할을 하는 것을 통칭하는 용어이며, 클라이언트는 정보를 요청하고 제공 받는 역할을 하는 모든 것을 가리킨다. 즉, 서버와 클라이언트는 우리에게 친숙한 물리적 컴퓨터와 같은 하드웨어일 수도, 가상머신과 같은 소프트웨어일 수도 있다."

CF. 엄밀히 말하면 정확하진 않지만 이해를 위한 포함관계 설명
 : 웹 서버, 웹 애플리케이션 서버, 서블릿 컨테이너는 역할이 맞물려있어 많이들 헷갈려하곤 하는데, 이들을 보다 직관적으로 이해하기 위해 포함관계를 말하자면 다음과 같다.

웹 애플리케이션 서버 vs. 웹 서버 : 웹 애플리케이션 서버는 웹 서버의 기능을 포함하면서도 동적 웹 애플리케이션을 실행할 수 있는 서버이므로 더 큰 개념으로 이해할 수도 있지만,
웹 서버와 웹 애플리케이션 서버의 역할이 통합된 경우가 많다고 한다.

웹 애플리케이션 서버 vs. 웹 컨테이너(서블릿 컨테이너, 서블릿 엔진) : 종류에 따라 다르지만 대부분의 경우 웹 애플리케이션 서버 내부에 서블릿 컨테이너가 구성요소로서 존재하므로 웹 애플리케이션 서버를 더 큰 개념으로 이해해도 좋다.

 

 

웹 서버

 : 클라이언트가 요청하는 정적 컨텐츠(HTML, 오브젝트(이미지 파일 등))를 제공해주는 서버

(EX. Apache HTTP Server, Google Web Server, NGINX etc)

 

 

웹 애플리케이션 서버
 : 클라이언트가 요청하는 동적 컨텐츠에 관한 기능을 제공해주는 서버로, 사용자가 원격으로 액세스할 수 있는 애플리케이션을 호스팅하거나 배포한다. 때문에 대부분의 웹 애플리케이션이 동작 되는 데에 필수적으로 사용된다.

(EX. Apache Tomcat, Web Logic, Jeus, etc)

 

 

프록시 서버

 : 클라이언트와 다른 서버의 중간에 위치하는 서버로, 클라이언트의 요청에 따라 각 서버에 맞게 라우팅이나 어떤 정보를 추가함을 통해, 클라이언트 혹은 서버에 데이터를 추가 및 삭제하여 전달해준다. 즉, 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 및 소프트웨어를 프록시 서버라 부른다. 프록시 서버는 서버에 요청된 내용들을 캐시로 이용하여 저장하며, 이렇게 캐시를 해 두고 난 후 캐시 안에 잇는 정보를 요구하는 요청에 대해서는 원격 서버에 접속하여 데이터를 직접 가져올 필요가 없게 됨으로써 전송 시간을 절약해준다. 또한 불필요하게 외부와 연결을 하지 않아도 된다는 특징이 있다.

 

 

데이터베이스 서버 : 데이터 정보(사진, 동영상 등)를 저장하고 제공하는 서버

(EX. MySQL, Oracle, MongDB, etc)

 

 

✅ 컴퓨팅 서버

도메인 서버 : 도메인 제공 및 관리를 위한 서버

미디어 서버 : 미디어 제공 및 관리를 위한 서버

이미지 서버 : 이미지 제공 및 관리를 위한 서버

파일 서버

게임 서버 : 게임 제공 및 관리를 위한 서버

메일 서버 : 전자 메일을 수락하고 원하는 수신자에게 전자 메일을 발송해주는 서버

 


➡️ 웹 서버 (Web Server)

정적 컨텐츠 처리 기능을 제공하는 서버로 동적 컨텐츠 처리는 매우 제한적인 서버

 

클라이언트는 웹 페이지를 가져오기 위해 웹 서버에게 요청을 보내고, 웹 서버는 저장 공간에 있는 요청된 파일들을 찾아 제공해준다. 즉, 클라이언트는 HTTP에 맞게 요청을 보내야 하는데, 프로토콜과 클라이언트 요청을 해석하여 요청 데이터를 데이터 형식에 맞추어 보내주는 역할을 수행하는 것이 웹 서버인 것이다. 참고로 웹 사이트가 어떤 웹 서버로 개발되었는지 확인하고 싶다면 개발자 모드에서 Response Headers의 Server 정보를 확인하면 알 수 있다.

(EX. Apache HTTP Server, Google Web Server, Nginx, etc)

 

 

웹 서버의 동작

 : 브라우저가 웹 서버에서 불려진 파일을 필요로 할때, 브라우저는 HTTP를 통해 파일을 요청한다. 요청이 올바른 웹 서버(하드웨어)에 도달하였을 때, HTTP 서버(소프트웨어)는 요청된 문서를 HTTP를 이용해 보내준다.

 

 

웹 서버의 형태

 : 웹 서버는 기본적으로 웹 페이지를 클라이언트에게 제공하는 역할을 수행하는 시스템을 가리키는 용어로 크게 세 가지 형태로 나눌 수 있다. 어떤 글에서는 소프트웨어 형태의 웹 서버를 구동시키는 하드웨어는 웹 서버가 아니라고 얘기하기도 하더라. 어느 것이 사실인지는 확인하지 못했으나 일단 이런 형식으로 웹 서버 기능이 구현된다는 사실에 집중해보자.

  • 소프트웨어(S/W) 기반 웹 서버 : HTTP 서버 등이 있다. HTTP 서버는 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리하는 서버로, URL(웹 주소)과 HTTP의 소프트웨어 일부라고 이해할 수 있다.
  • 하드웨어(H/W) 기반 웹 서버 : HTTP 서버(소프트웨어)가 들어있는 컴퓨터(하드웨어)로 구성되어 있다. 여기서 컴퓨터란, 웹 사이트의 컴포넌트 파일(HTML 문서, 이미지, CSS 파일, JS 파일)들을 웹에 연결된 다른 기기들과 데이터를 주고받을 수 있게 하는 하드웨어를 가리킨다. 
  • 하드웨어와 소프트웨어가 모두 사용되는 형태

 

 

웹 서버에서 제공하는 기능

 : HTTP, 통신 기록인증, 정적 콘텐츠 관리, 콘텐츠 압출, HTTPS 지원, 가상 호스팅, 대용량 파일 지원, 대역폭 스로틀링 등이 있지만 웹 서버가 제공하는 핵심 기능 두 가지를 뽑자면 아래와 같다.

  • 첫 번째, 웹 상에 올라가 있는 소프트웨어가 필요로 하는 데이터를 저장, 관리, 제공하는 역할 : 웹 호스팅 솔루션을 설정한 후 그저 웹 서버에 파일을 업로드하기만 하면, 지정된 웹 서버가 이를 알아서 관리하고 추후 이를 요청했을 때 제공해주는 것이다.
  • 두 번째, HTTP에 대한 지원하는 역할 : HTTP는 두 컴퓨터 간에 Hypertext(연결된 웹 문서)를 전송할 것인지를 서술해주는 프로토콜이다. 웹 서버 중에서도 HTTP 서버는, 클라이언트로부터 들어오는 HTTP 요청을 처리하고 응답하는 역할을 수행한다.

 


➡️  웹 애플리케이션 서버 (WAS, Web Application Server)

웹 서버의 정적 컨텐츠 기능도 커버하면서 동적 컨텐츠 처리도 가능한 서버
웹 서버와 웹 컨테이너를 결합한 서버이자 미들웨어로, 정적 · 동적 컨텐츠 모두 제공

 

웹 애플리케이션 서버(WAS)는 웹 애플리케이션을 호스팅하고 실행하는 서버 소프트웨어로, 클라이언트가 요청하는 동적 컨텐츠에 관한 기능을 제공해준다. 사용자가 원격으로 액세스할 수 있는 애플리케이션을 호스팅하거나 배포하는 역할도 수행한다. 때문에 대부분의 웹 애플리케이션이 동작 되는 데에 필수적으로 사용된다. 이러한 WAS 내부에는 일반적으로 Servlet Container를 포함하고 있다. 이는 클라이언트(웹 브라우저)와 DBMS(데이터베이스 관리시스템) 사이에서 동작하는 미들웨어이기도 한데, 여기서 미들웨어란 클라이언트와 DBMS 사이에서 중개 역할을 하는 소프트웨어를 말한다. 클라이언트에서 서버에 요청을 보내면 여기에서 대부분의 로직이 수행된다. 또한 데이터를 조작해야 할 경우 WAS가 DBMS에 접속하여 데이터 입출력을 해낸다. 한 마디로 애플리케이션 동작의 대부분이 WAS에서 처리된다는 것이다.

 

(EX. Apache Tomcat, WebLogic, WebSphere, Jeus, JBoss, etc.)

 

 


➡️ 웹 페이지를 처리하는 방식에 따른 구분

Web Server vs. Web Application Server

 

 

 정적 웹 서버(Static Web Server) 

 : 정적이라는 표현이 붙여진 것은 불려진 파일을 클라이언트에 '변경없이 그대로' 전송하기 때문에 붙여진 표현이다. 이러한 정적인 서버를 필요로 하는 경우, 웹 서버만으로도 URL 대응을 통한 정적 컨텐츠 반환이 이루어지기 때문에 추가적인 소프트웨어를 필요로 하지 않는다. 서버 측에서 정해진 데이터만 수정없이 그대로 반환하면 되기 때문에 처리 속도가 빠르고 트래픽의 과부하를 잘 처리할 수 있다는 장점이 있다. 

(EX. Apache HTTP Server, Nginx)

 

 

 동적 웹 애플리케이션 서버(Dynamic Web Application Server) 

 : 정적 웹 서버에 추가적인 소프트웨어(웹 애플리케이션 서버나 데이터베이스 등등)가 포함된 구성을 가리킨다. 동적인 서버를 필요로 하는 경우, 클라이언트 요청에 따라 서버 측에서 동적(요청에 따른 변경)으로 생성된 컨텐츠를 제공해준다. 때문에 경우에 따라 데이터베이스에서 단순히 정보를 가져오는 것이 아닌, 데이터베이스와의 상호작용이 필요하기도 하다.

(EX. Apache Tomcat, Jetty, Undertow, Nginx + PHP-FPM)

 

❓ 웹 서버와 웹 애플리케이션 서버를 같이 사용하기도 하는 이유

(1) WAS가 해야할 일의 부담을 줄이기 위해서 : WAS 앞에 웹 서버를 둬서 웹 서버에 정적인 문서만 처리하도록하고, WAS는 애플리케이션의 로직만 수행하도록 기능을 분배해서 서버의 부담을 줄인다.

(2) WAS의 환경 설정 파일을 외부에 노출시키지 않도록 하기 위해서 : 클라이언트와 연결하는 포트가 직접 WAS에 연결이 되어 있다면 중요한 설정 파일들이 노출될 수 있기 때문에 WAS 설정 파일을 외부에 노출시키지 않도록 하기 위해 사용한다. 웹 서버와 WAS에 접근하는 포트가 다르기 때문에 WAS에 들어오는 포트에는 방화벽을 쳐서 보안을 강화할 수도 있다.

 

 


➡️ 참고자료

[Site]

https://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%84%9C%EB%B2%84

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

 

 [Blog]

https://velog.io/@maxminos/%EC%84%9C%EB%B2%84%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%A2%85%EB%A5%98

https://phodobit.kr/64

 

 


 

728x90