delpho

Web Server vs WAS (Web Application Server) 본문

CS/Spring

Web Server vs WAS (Web Application Server)

delpho 2024. 4. 1. 12:08

[ 들어가기 전 ]


백엔드 개발을 위해 Spring 프레임워크를 다루게 됩니다. Spring Framework에는 서버 실행을 위해 Apache Tomcat을 따로 다운로드받아 연동해야하고, Spring Boot에는 이것이 자체적으로 내장되어있어 간편하게 실행가능하다고 알고 있습니다. Apache Tomcat이 WAS의 역할을 한다라고는 알고있었는데, Apache HTTP Server라는 Web Server도 존재한다는 사실을 알게되었습니다.

 

Web Server와 WAS는 백엔드를 공부하면서 자주 들어본 단어지만, 이 두 개념이 여전히 헷갈리기에 여러 출처를 기반으로 한번 정리하고자 합니다. 출처는 하단에 모두 적어놓겠습니다.

 

 

 

[ Web Server (ex. Apache HTTP Server, Nginx) ]


웹서버는 HTTP 프로토콜을 통해 클라이언트(보통 웹 브라우저)로부터 요청을 받아, 정적 콘텐츠( HTML, 이미지, CSS, JavaScript 등)를 제공하는 서버입니다. 사용자가 웹 브라우저를 통해 요청하면, 웹서버는 해당 요청에 맞는 웹 페이지를 찾아 사용자에게 전달합니다.

 

HTML, css 그리고 사진과 같은 별도의 "데이터 수정 없이" 반환되는 자료 형식들이 정적 데이터에 해당됩니다. 그렇기때문에 HTML, CSS등으로 구축한 서버는 Web server 만으로도 URL과 대응하여 HTML 등을 반환하여 블로그를 만들 수도 있습니다.

 

정해진 데이터만 가져와서 반환하면 된다는 점 때문에, 처리 속도가 빠르며 트래픽의 과부하를 잘 처리할 수 있다는 장점이 있습니다. 또한, HTTP를 정해진 약속대로 빠르게 처리를 해주어 반환해야 하는 점 때문에 대부분이 C로 구현이 되어있습니다. 이번 글을 쓰기 전에 제가 헷갈렸었던 Apache HTTP Server 가 바로 이 Web Server에 속하게 됩니다. 웹서버의 예로는 Apache HTTP Server , Nginx, Microsoft IIS 등이 있습니다. 

 

또한, 단순히 정적인 콘텐츠를 제공하는 것 뿐만 아니라, 다른 여러 기능을 가지고 있습니다.

 

요청 전달: 웹서버는 동적 콘텐츠가 필요한 경우, 해당 요청을 웹 애플리케이션 서버로 전달할 수 있습니다. 이를 위해 웹서버는 종종 프록시 서버로도 작동하여, 클라이언트와 백엔드 시스템 사이의 중개자 역할을 합니다.

부하 분산: 고성능 웹서버는 부하 분산 기능을 제공하여, 여러 서버에 걸쳐 트래픽을 분산시킵니다. 이는 웹사이트의 가용성과 성능을 향상시키는 데 중요한 역할을 합니다.

보안 기능: 웹서버는 SSL/TLS와 같은 프로토콜을 통해 데이터를 암호화하고, 요청을 필터링하여 보안을 강화할 수 있습니다. 또한, 일정 수준의 인증 및 권한 부여 기능을 제공할 수도 있습니다.

 

 

웹서버가 was보다 요청을 빠르게 처리할 수있는 이유

1. 정적 콘텐츠 vs. 동적 콘텐츠 처리
정적 콘텐츠는 사전에 만들어져 변경되지 않으므로, 클라이언트의 요청에 따라 서버에서 즉시 제공될 수 있습니다.

2. 요청 처리 메커니즘
웹서버는 디스크에서 파일을 읽어 바로 클라이언트에게 전송하는 간단한 요청 처리 메커니즘을 가집니다. 이는 CPU 사용량이 적고 메모리 요구 사항이 낮아 처리 속도가 빠릅니다.

3. 자원 사용량
웹서버는 파일 시스템에서 정적 파일을 직접 전송하는 데 필요한 최소한의 자원만 사용합니다. 이는 효율적인 자원 사용으로 이어져 높은 동시 요청 처리 능력을 가질 수 있습니다.

4. 캐싱 메커니즘
웹서버는 정적 콘텐츠에 대해 효율적인 캐싱 전략을 구현할 수 있습니다. 클라이언트 또는 프록시 서버 측에서 캐싱을 활용해 동일한 콘텐츠의 재요청 시 서버로의 요청 없이 콘텐츠를 제공할 수 있어, 전체적인 응답 속도가 향상됩니다.

 

 

 

 

[ Web Server의 구성 요소 ]


1. HTTP 리스너
기능: 클라이언트로부터의 HTTP 요청을 수신하는 컴포넌트입니다. 특정 포트(기본적으로 80번 포트)를 통해 들어오는 요청을 감지하고, 웹서버로 전달합니다.
중요성: 웹서버의 가장 기본적인 기능 중 하나로, 웹서버가 네트워크 상에서 클라이언트의 요청을 받을 수 있게 하는 핵심 요소입니다.


2. 요청 처리기(Request Handler)
기능: HTTP 리스너로부터 전달받은 요청을 분석하고, 요청된 URL에 해당하는 정적 콘텐츠를 찾아 응답으로 제공합니다.
중요성: 요청 처리기는 웹서버가 어떤 콘텐츠를 클라이언트에게 전달할지 결정하는 핵심 로직을 담당합니다.


3. 파일 시스템과 콘텐츠 저장소
기능: 웹 페이지, 이미지, CSS 파일, JavaScript 파일 등 웹서버에서 제공하는 정적 콘텐츠를 저장하는 곳입니다.
중요성: 안정적이고 빠른 콘텐츠 제공을 위해 최적화된 저장소 관리는 웹서버의 성능에 직접적인 영향을 미칩니다.


4. 캐싱 시스템
기능: 자주 요청되는 콘텐츠를 메모리 내에 저장하여, 동일한 요청이 들어왔을 때 빠르게 응답할 수 있게 합니다.


5. 로깅 시스템
기능: 웹서버에 들어오는 모든 요청과 서버의 응답, 시스템 에러 등의 정보를 기록합니다.


6. 보안 모듈
기능: SSL/TLS를 통한 데이터 암호화, IP 주소 및 도메인 기반 액세스 제어, 요청 필터링 등을 통해 웹서버의 보안을 강화합니다.


7. 구성 관리 시스템
기능: 웹서버의 동작을 구성하는 설정 파일을 관리합니다. 이는 서버 포트, 캐싱 정책, 보안 설정 등을 포함할 수 있습니다.

 

 

 

 

[ Web Application Server (ex. Apache Tomcat) ]


기존의 Web Server 에서는 DB 와 함께 유동적으로 로직에 따라 요청을 처리하지 못합니다. 이를 해결하기 위해서 Web Application Server 를 사용하게 됩니다.

 

WAS는 사용자의 요청에 따라 서버 측에서 스크립트나 프로그램을 실행하여 동적인 결과(동적 페이지, 데이터 등)를 사용자에게 전송하는 역할을 합니다. 동적 콘텐츠를 생성하기 위해 데이터베이스 조회, 로직 처리 등 복잡한 작업을 수행할 수 있습니다. WAS는 사용자의 요청을 처리하는 애플리케이션 로직을 실행하고, 그 결과를 웹서버를 통해 사용자에게 전달하는 구조로 작동합니다.

 

WAS의 예로는 Apache Tomcat, Microsoft's ASP.NET, JBoss, WebSphere 등이 있으며, 이들은 다양한 웹 애플리케이션 프레임워크와 언어(Java, .NET, PHP 등)를 지원합니다.

 

또한, 단순히 동적인 콘텐츠를 제공하는 것 뿐만 아니라, 다른 여러 기능을 가지고 있습니다.

 

세션 관리: 웹 애플리케이션 서버는 사용자의 상태 정보를 관리하는 세션 관리 기능을 제공합니다. 이를 통해 사용자가 웹사이트를 탐색할 때 일관된 사용자 경험을 유지할 수 있습니다.

트랜잭션 관리: 복잡한 비즈니스 로직 처리를 위해, WAS는 여러 데이터베이스 연산을 하나의 작업 단위로 묶는 트랜잭션 관리 기능을 제공합니다. 이를 통해 데이터의 일관성과 정확성을 보장할 수 있습니다.

다양한 애플리케이션 지원: WAS는 다양한 프로그래밍 언어와 프레임워크를 지원하여, 개발자가 다양한 웹 애플리케이션을 구축할 수 있도록 합니다. Java EE, .NET, PHP, Python 등 다양한 기술 스택을 지원합니다.

 

 

[ WAS의 구성요소 (feat. 아파치 톰캣) ]


웹 애플리케이션 서버(WAS)는 복잡한 웹 기반 애플리케이션을 지원하기 위해 여러 구성 요소로 이루어져 있습니다.

 

1. 서블릿 컨테이너(Servlet Container)
기능: Java 서블릿을 실행하여 웹 페이지에 동적 콘텐츠를 제공합니다. 사용자의 요청에 따라 서블릿을 로딩하고 실행하며, 결과를 웹 페이지로 반환합니다.


2. JSP 엔진(JSP Engine)
기능: JSP 파일을 처리하고 실행하여, 동적 웹 페이지를 생성합니다. JSP 파일은 HTML 코드 내에 Java 코드가 포함된 형식으로, 서블릿으로 변환되어 실행됩니다.


3. HTTP 커넥터(HTTP Connector)
기능: HTTP 리스너(Web Server) 역할을 하며, 클라이언트로부터 HTTP 요청을 받아 처리하고, 응답을 보냅니다.


4. 커넥션 풀링(Connection Pooling)
기능: 데이터베이스 연결을 효율적으로 관리합니다. 애플리케이션이 필요할 때마다 미리 생성해둔 연결 풀에서 연결을 가져와 사용하고 반환함으로써, 연결 생성 및 해제로 인한 오버헤드를 줄입니다.


5. 세션 관리(Session Management)
기능: 사용자의 세션 정보를 유지하고 관리합니다. 쿠키나 URL 리라이팅 등의 방법을 사용하여 사용자별 상태 정보를 추적합니다.


6. 보안 관리(Security Management)
기능: 웹 애플리케이션의 보안을 위해 기본적인 인증 및 권한 부여 방법을 제공합니다. SSL/TLS 설정을 통해 데이터 전송의 암호화를 지원합니다.


7. 로깅 및 모니터링(Logging and Monitoring)
기능: 시스템 로그를 생성하고, 애플리케이션의 운영 상태와 성능을 모니터링 할 수 있도록 지원합니다.

 

아파치 톰캣의 구성요소

 

 

 

[ 현대의 웹서버와 WAS ]


현대의 웹 아키텍처에서는 웹서버와 WAS를 결합하여 사용하는 경우가 많습니다. 웹서버가 정적 콘텐츠를 처리하고 보안 및 부하 분산 기능을 담당하는 동안, WAS는 동적 콘텐츠 생성 및 복잡한 애플리케이션 로직을 처리합니다. 이러한 구조는 각각의 시스템이 자신의 장점을 최대한 발휘할 수 있도록 하며, 전체적인 웹 환경의 성능과 보안을 향상시킵니다.

웹서버와 WAS의 구분은 명확하지만, 실제로는 두 시스템 간의 경계가 모호해지는 경우도 많습니다. 예를 들어, Apache와 Nginx는 동적 콘텐츠를 처리하기 위해 PHP-FPM과 같은 외부 프로세서와 연동할 수 있으며, 일부 웹 애플리케이션 서버는 내장 웹서버 기능을 제공하기도 합니다. 이렇게 유연한 구성은 개발자와 시스템 관리자가 특정 요구 사항에 맞게 시스템을 최적화할 수 있게 해줍니다.

 

 

[ Spring Framework와 Apache Tomcat ]


스프링 프레임워크의 주요 목적 중 하나는 웹 애플리케이션 개발을 보다 쉽고 효율적으로 만들기 위한 것입니다. 스프링은 아파치 톰캣과 같은 웹 애플리케이션 서버(WAS)의 기능을 직접 확장하는 것보다는, 스프링 애플리케이션 개발 시 WAS의 기본 기능 위에 추가적인 서비스와 기능을 제공하여, 애플리케이션의 개발과 관리를 더 용이하게 만듭니다.

 

스프링이 제공하는 기능은 톰캣 같은 WAS의 기능을 확장하거나 향상시키는 형태로 제공되며, 개발자가 애플리케이션을 더욱 효율적으로 개발하고 관리할 수 있도록 돕습니다. 스프링은 WAS의 기능을 독립적으로 제공할 뿐만 아니라, 필요에 따라 WAS의 기능과 통합하여 더욱 풍부한 기능성을 애플리케이션에 제공합니다.

 

 스프링은 개발자가 WAS의 기능을 더 효과적으로 활용하고, 보다 복잡한 애플리케이션 로직을 구현할 수 있도록 도와줍니다. IoC/DI, Application Context와 같은 것들을 통해..

 

 

 

 

 

 

 

 

 

 

 

출처

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

 

Apache HTTP Server? Apache Tomcat? 서버 바로 알기

Spring Boot 을 공부하면서 어떻게 구성이 되어있는지도 공부를 하게 되었습니다. 전체적인 흐름은 Client 로부터 받은 HTTP 요청을 알맞게 처리하여, Controller 로 넘겨주게 됩니다. 이때, 해당 기능을

tecoble.techcourse.co.kr

https://namu.wiki/w/웹 서버

 

웹 서버

하드웨어적 서버에 접속한 사용자에게 웹 서비스를 제공하기 위하여 사용되는 소프트웨어 서버 의 한 종류. 이 글을

namu.wiki

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

 

[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

https://www.eginnovations.com/blog/tomcat-monitoring-metrics/

 

Top 7 Tomcat Performance Metrics to Monitor | eG Innovations

Read about our top 7 Tomcat performance and monitoring metrics that every Java administrator must monitor. Learn why these metrics are important and how to set up proactive monitoring. Learn more!

www.eginnovations.com

챗GPT