웹서버(Web Server)와 웹어플리케이션서버(Web Application Server)

유승한·2024년 8월 24일
post-thumbnail

웹서버(WS)


웹서버는 클라이언트(웹 브라우저)의 요청을 받아들이고, 그 요청에 대한 응답을 제공하는 서버입니다. 웹서버는 인터넷에서 웹페이지를 호스팅하며 주로 HTTP 또는 HTTPS 프로토콜을 통해 클라이언트와 통신합니다.

웹서버의 주요 역할

  1. 요청 처리: 웹서버는 클라이언트로부터 HTTP 요청을 받습니다. 이 요청은 웹 브라우저에 사용자가 특정 URL을 입력하거나 링크를 클릭할 때 발생합니다.
  2. 응답 제공: 요청을 처리한 후, 웹 서버는 HTML 문서, 이미지, 동영상, 또는 다른 형태의 데이터를 클라이언트에게 응답을 보냅니다. 클라이언트는 이 응답 데이터를 렌더링하여 사용자에게 웹페이지를 보여줍니다.
  3. 정적 콘텐츠 제공: 웹서버는 보통 HTML 파일, CSS, JavaScript, 이미지 파일 등과 같은 정적 컨텐츠를 제공하는데, 이러한 파일들은 서버에 저장되어 있으며, 클라이언트의 요청이 있을 때 해당 파일들을 전달합니다.
  4. 동적 컨텐츠 처리: 경우에 따라 웹서버는 PHP, Python, Ruby, Node.js와 같은 서버 측 스크립트 언어를 통해 동적 컨텐츠를 생성하여 응답으로 제공할 수 있습니다. 이 경우 웹서버는 애플리케이션 서버와 연동되어 동적 웹 페이지를 생성합니다.

Nginx, Apache

  1. Apache
  • 프로세스 기반 접근 방식으로 하나의 프로세스가 하나의 요청을 처리하는 구조로 매 요청마다 프로세스를 생성 및 할당, 이로 인해 각 요청이 독립적인 프로세스에서 처리되므로 프로세스에서 발생한 오류가 다른 요청에 영향을 미치지 않아 안정적이나 리소스가 많이 소요

C10K

  • Current 10 thousand clients 의 약자로 1만개의 클라이언트를 동시에 처리할 수 있는 네트워크 I/O 모델을 설계 방법을 묻는 말
  • 컴퓨터 수가 늘어나며 요청은 미리 생성된 프로세스들로는 처리가 힘들어지고 그로 인해 모든 요청에 대해 프로세스 생성하기 힘들어짐
  1. Nginx
  • 이벤트 중심 접근방식으로 하나의 스레드 내에서 여러 요청을 처리하는 구조
  • 비동기 Event-Driven 구조 : Event Handler에서 비동기 방식으로 먼저 처리되는 요청을 진행, 이로 인해 적은 리소스로도 많은 트래픽을 효율적으로 처리 가능
  • 리버스 프록시 및 로드 밸런싱: Nginx는 리버스 프록시와 로드 밸런싱 기능을 제공하여, 백엔드 서버 간의 트래픽을 분산하고 부하를 조절 가능
  • 정적 컨텐츠 처리에 최적화 : 정적 파일을 매우 빠르게 제공 가능하며 캐싱 기능도 내장

리버스 프록시
서버 네트워크의 앞단에 위치한 서버로 로드밸런싱(리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법), 포트 리워딩, SSL 지원, HTTP 설정 등의 작업을 수행합니다.

웹어플리케이션서버(WAS)


동적인 웹 애플리케이션을 실행하고, 사용자 요청을 처리하며, 백엔드 시스템과의 연결을 관리하는 서버입니다. 웹 애플리케이션 서버는 클라이언트(웹 브라우저)와 데이터베이스나 다른 백엔드 시스템 간의 중개 역할을 하며, 주로 비즈니스 로직을 실행하고, 데이터를 처리한 후 클라이언트에게 응답을 제공합니다. WAS는 JSP, Servlet 구동환경을 제공해주기 때문에 웹 컨테이너 혹은 서블릿 컨테이너라고도 합니다. 대표적인 예시로 Tomcat이 있습니다.

웹서버(WS) VS 웹어플리케이션서버(WAS)


웹서버는 CGI(Common Gateway Interface)를 통해 동적 컨텐츠를 웹서버 내에서 제공 가능합니다. 이를 통해 웹서버는 웹어플리케이션서버 없이도 동적인 컨텐츠를 제공 가능합니다. 웹어플리케이션 서버 또한 정적인 컨텐츠를 제공하는 웹서버의 역할을 수행 가능합니다.

하지만 앞서 설명했듯이 웹서버와 웹어플리케이션서버는 용도가 다르며 이를 분리했을 시에 자원을 효율적으로 사용 가능하기에 둘을 함께 이용합니다. 사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어 제공하기 위해 웹서버만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어두고 서비스를 해야합니다. 이는 자원의 부족을 초래하게 됩니다. 또한 WAS에서 WS 없이 단독으로 사용하게 된다면 정적 컨텐츠 요청까지 처리할 시에 부하가 커지고 동적 컨텐츠 처리가 지연되며 페이지 노출 시간이 늘어나는 등의 서버 부하가 발생할 수 있다.
업로드중..

WAS를 WS와 함께 사용했을 시에 장점
1. 웹서버는 정적 컨텐츠를 도맡고 웹어플리케이션서버는 동적 컨텐츠에 집중시킴으로써 서버 부하를 방지
2. 보안 강화 : SSL에 대한 암복호화 처리에 웹서버를 사용
3. 로드 밸런싱 : 웹 서버는 여러 개의 웹 애플리케이션 서버와 연결하여 트래픽을 분산함
4. 유연한 관리와 확장성: 웹 서버를 통해 트래픽을 관리하면, 새로운 WAS를 쉽게 추가하거나, 특정 WAS에 대한 유지보수 작업을 수행할 때도 클라이언트에게 영향을 최소화할 수 있음
5. 캐싱과 성능 최적화: 웹 서버는 정적 콘텐츠의 캐싱을 통해 클라이언트 요청에 대해 더 빠른 응답을 제공할 수 있음

Apache Tomcat?

웹서버에는 Apache가 존재하고 웹어플리케이션서버에는 Tomcat이 존재하는데 Apache Tomcat은 무엇일까라는 의문이 든적이 있을 것입니다. 해당 내용이 정리된 블로그에 따르면 2008년에 릴리즈 된 Tomcat 5.5버전부터 정적 컨텐츠를 처리하는 기능이 추가되었는데, 이 기능이 순수 Apache를 사용하는 것에 비해 성능적 차이가 전혀 없으며 Tomcat이 Apache의 기능을 포함하고 있기 때문에 Apache Tomcat이라고 부르고 있습니다.

Reference

https://findmypiece.tistory.com/332
https://thinkj.in/network/%EC%9B%B9%EC%84%9C%EB%B2%84%EC%99%80-nginx.html?mark=nginx
https://developer.mozilla.org/ko/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server
https://codechasseur.tistory.com/25

0개의 댓글