Web Server
📌 클라이언트(보통 웹 브라우저)의 요청을 받아 정적 리소스(HTML, CSS, JavaScript) 같은 정적 파일 또는 동적 콘텐츠를 제공하는 소프트웨어 또는 하드웨어를 말합니다.
- 웹 서버는 HTTP 또는 HTTPS 프로토콜을 사용하며, 주로 사용자와 웹 애플리케이션 사이에서 데이터를 주고받는 역할을 합니다.
- 정적 리소스란 리소스가 이미 완성된 채로 서버에 존재하여 원본 그대로 응답하는 데이터를 의미한다.
- = 다른 데이터는 가공을 처리해서 보내는 것에 반에 정적 리소스는 요청 시 서버에서 따로 데이터를 수정하거나 변형하지 않기 때문에, 서버와 클라이언트 간 추가 작업 없이 바로 사용 가능합니다.
[1] 웹 서버의 주요 기능
- HTTP 요청 처리
- 클라이언트가 보낸 요청(GET, POST 등)을 수신하고 응답을 반환.
- 정적 콘텐츠(HTML, 이미지) 또는 동적 콘텐츠(애플리케이션 서버와 연계).
- 정적 콘텐츠 제공
- HTML 파일, CSS, JavaScript, 이미지 파일 등을 클라이언트에게 전달.
- 동적 콘텐츠 처리
- PHP, Python, Java 등 애플리케이션 서버와 통신하여 동적으로 생성된 데이터를 반환.
- 보안 관리
- HTTPS를 통한 데이터 암호화.
- 인증 및 접근 제한 기능 제공.
- 로드 밸런싱
- 여러 서버에 요청을 분산하여 성능을 최적화하고, 고가용성을 유지.
[2] 웹 서버의 작동 방식
- 클라이언트(웹 브라우저)가 URL을 통해 서버에 요청을 보냄.
- 웹 서버는 요청을 분석하여 처리할 리소스를 결정.
- 정적 콘텐츠 요청: HTML, CSS 같은 파일을 그대로 반환.
- 동적 콘텐츠 요청: 애플리케이션 서버에 요청을 전달하고 결과를 받아 반환.
- 처리 결과를 HTTP 응답으로 클라이언트에게 전달.
[3] 웹 서버의 예시와 용도
웹 서버 소프트웨어특징
Apache HTTP Server | 가장 널리 사용되는 오픈소스 웹 서버. 다양한 플랫폼 지원. |
Nginx | 가벼운 구조와 높은 성능으로 정적 파일 제공 및 로드 밸런싱에 강점. |
IIS | Microsoft가 개발한 윈도우 전용 웹 서버. .NET 애플리케이션과의 통합이 강점. |
LiteSpeed | Nginx와 비슷한 고성능 웹 서버로, 특히 WordPress와의 호환성이 좋음. |
[4] 웹 서버와 애플리케이션 서버의 차이
구분 | 웹 서버 | 애플리케이션 서버 |
주요 역할 | 정적 콘텐츠 제공 | 동적 콘텐츠 생성 |
예시 | Apache, Nginx | Tomcat, WebLogic, JBoss |
작동 방식 | 클라이언트 요청에 HTML, CSS, 이미지 등 반환 | 서버 로직을 실행하여 동적으로 데이터를 생성하고 반환 |
연계 | 단독 또는 애플리케이션 서버와 함께 사용 | 웹 서버와 연동하여 동작 |
[5] 웹 서버의 배달 비유
웹 서버는 배달 창구 직원에 비유할 수 있습니다.
- 요청 분석: 고객(브라우저)이 요청하면 창구 직원이 요청 내용을 확인.
- 정적 리소스 제공: 창고에서 물건(HTML, CSS, 이미지)을 찾아 전달.
- 동적 리소스 요청: 필요시 창고 관리자(애플리케이션 서버)에게 요청을 전달하고 결과를 받아 고객에게 전달.
- 로드 관리: 한 번에 여러 고객을 효율적으로 처리하도록 줄을 정리.
[6] 웹 서버의 장점과 단점
장점 | 단점 |
- 빠르고 효율적인 정적 콘텐츠 제공. | - 동적 처리를 단독으로 지원하지 못함. |
- HTTP 프로토콜 최적화로 요청 처리 속도 향상. | - 복잡한 요청(데이터 처리, 비즈니스 로직 등)은 애플리케이션 서버에 의존. |
- 다양한 플랫폼과의 호환성. | - 상태 비저장 특성으로 특정 작업 지속성을 유지하기 어려움. |
WAS(Web Application Server)
📌 웹 애플리케이션을 실행하고 관리하는 서버입니다. 웹 애플리케이션 서버는 동적 콘텐츠 생성 및 비즈니스 로직 처리를 담당하며, 클라이언트의 요청에 따라 애플리케이션 로직을 실행하고 결과를 반환합니다.
- 웹 서버와는 달리 WAS는 서버 측의 애플리케이션을 실행하고 관리하는 역할을 하며, 일반적으로 웹 서버와 함께 사용되어 동적 콘텐츠 처리를 지원합니다.
[1] WAS의 주요 기능
- 애플리케이션 실행
- 클라이언트의 요청에 따라 동적으로 데이터를 생성하고 비즈니스 로직을 실행합니다.
- 예를 들어, 데이터베이스와 연결하여 정보를 가져오거나, 파일을 처리하거나, 복잡한 계산을 수행하는 등의 작업을 처리합니다.
- 세션 관리
- 사용자 상태를 유지하기 위해 세션을 관리합니다.
- 클라이언트가 여러 요청을 보내더라도, 서버는 동일한 사용자로 인식하여 일관된 정보를 제공합니다.
- 트랜잭션 관리
- 데이터베이스와의 트랜잭션 처리를 관리하여 일관성 있는 데이터를 제공합니다.
- 보안 관리
- 애플리케이션의 보안을 관리하고, 인증 및 권한 부여를 처리합니다.
- 서비스 배포 및 확장
- 애플리케이션을 배포하고 관리하는 기능을 제공합니다.
- 확장성을 고려하여 여러 인스턴스로 분산 처리가 가능합니다.
[2] WAS와 웹 서버의 차이
특징 | 웹 서버 | 웹 애플리케이션 서버 (WAS) |
기본 역할 | 정적 콘텐츠 제공 (HTML, 이미지, CSS 등) | 동적 콘텐츠 생성 및 비즈니스 로직 실행 |
응답 처리 방식 | 파일을 그대로 전달 (정적 파일 처리) | 애플리케이션 로직을 실행하여 데이터를 동적으로 생성 |
세션 관리 | 일반적으로 세션 관리가 없거나 제한적 | 세션 관리 및 트랜잭션 처리 |
애플리케이션 서버 기능 | 없음 | 비즈니스 로직 실행, 데이터베이스 연동, 트랜잭션 관리 |
사용 예시 | 웹 페이지의 HTML, 이미지, CSS 파일 제공 | 온라인 쇼핑몰, 은행 시스템, 사용자 인증 등 |
- Web Server와 WAS(Web Application Server)의 차이점
- 실제로는 Web Server도 Application 로직을 포함할 수 있다.
- WAS는 Application 코드를 실행하는 것에 더욱 특화되어 있다.
- Java에서는 Servlet Container 기능을 제공하면 WAS 이다.
[3] WAS의 예시
WAS 소프트웨어특징
Apache Tomcat | Java Servlet과 JSP를 지원하는 오픈소스 WAS. 가장 널리 사용됨. |
JBoss (WildFly) | Java EE 표준을 지원하며, 엔터프라이즈급 애플리케이션을 처리하는 WAS. |
WebLogic | Oracle의 Java EE 기반 WAS, 고급 트랜잭션 관리와 확장성 제공. |
WebSphere | IBM의 WAS로, 대규모 기업 환경에서 고급 기능과 안정성 제공. |
[4] WAS의 배달 비유
- 웹 서버는 배달원이 단순히 포장을 해서 전달하는 역할이라면,
- **웹 애플리케이션 서버(WAS)**는 배달원이 주문에 맞춰 요리를 준비하고, 포장한 뒤 정확하게 전달하는 역할입니다.
- 즉, 웹 서버는 이미 준비된 음식을 그대로 전달하지만, WAS는 주문에 맞는 음식을 준비하고 그 결과를 고객에게 전달하는 역할을 합니다.
Web System 구성
[1] WAS만 사용하는 경우
- WAS가 너무 많은 역할을 담당한다
- 서버 과부하 발생 가능성이 높아진다.
- 실행에 가장 중요한 Application 로직이 정적 리소스로 인해 수행되지 않을 수 있다.
- WAS에 장애가 생기면 아무런 화면도 보여주지 못한다.
- 오류 페이지를 클라이언트에게 응답할 수 없다.
[2] 실제 웹 시스템 구성
- 정적 리소스는 Web Server에서 처리한다.
- Web Server는 Application 로직이 필요한 요청만을 WAS에 전달한다.
[3] 실제 웹 시스템 구성의 장점
- 효율적으로 리소스를 관리할 수 있다.
- 정적 자원이 많이 사용된다면 Web Server를 ScaleOut 한다.
- Application 관련 자원이 많이 사용된다면 WAS를 ScaleOut 한다.
- 오류 화면을 제공할 수 있다.
- Web Server는 오류가 발생할 확률이 아주 낮다.
- WAS는 오류가 발생할 확률이 아주 높고, 장애가 자주 발생한다.
- WAS는 DB와 상호작용 하기 때문에 DB에 문제가 생겨도 문제가 발생한다.
'CS ( Computer Science ) > 네트워크 (Networking)' 카테고리의 다른 글
[Net] Rendering (1) | 2024.12.05 |
---|---|
[Net] Servlet (1) | 2024.12.04 |
[Net] Restful API (1) | 2024.12.02 |
[Net] HTTP 요청 데이터 (0) | 2024.12.02 |
[Net] HTTP Header (0) | 2024.12.01 |