728x90
웹 서버 (Web Server)
HTTP 프로토콜을 통해 주로 정적 콘텐츠(HTML, CSS, 이미지 등)를 제공하는 서버이다.
주요 특징
- 정적 콘텐츠 제공: HTML 파일, 이미지, 스타일시트 등을 클라이언트에게 전송
- HTTP 요청 처리: HTTP 프로토콜을 사용하여 클라이언트의 요청을 받고, 해당 요청에 따라 적절한 파일을 응답
- 성능 최적화: 요청-응답 처리가 빠르며, 많은 수의 동시 요청을 처리할 수 있도록 설계
- 보안: SSL/TLS 암호화를 통해 안전한 데이터 전송을 보장
주요 웹 서버 소프트웨어
- Apache HTTP Server
- Nginx
- Microsoft Internet Information Services (IIS)
- Lighttpd
웹 애플리케이션 서버(WAS : Web Application Server)
데이터베이스와의 상호작용, 비즈니스 로직 처리, 세션 관리 등 다양한 서버 측 기능을 수행하는 주로 동적 콘텐츠를 생성하는 서버이다. (웹 서버의 기능 포함)
주요 특징:
- 동적 콘텐츠 제공: 서버 측 스크립트(예: JSP, ASP.NET, PHP, Python, Ruby 등)를 실행하여 동적인 웹 페이지를 생성
- 비즈니스 로직 처리: 다양한 비즈니스 로직을 처리하며, 데이터베이스와 연동하여 데이터를 저장하거나 가져옴
- 세션 관리: 사용자 세션을 관리하여 상태 유지 및 사용자 인증 기능을 제공
- 엔터프라이즈 기능: 트랜잭션 관리, 메시징, 데이터 소스 관리 등 고급 엔터프라이즈 기능을 지원
주요 웹 애플리케이션 서버 소프트웨어:
- Apache Tomcat
- IBM WebSphere
- Oracle WebLogic
- JBoss EAP (Enterprise Application Platform)
- Microsoft IIS (ASP.NET 지원)
웹 시스템 구성 (Web - WAS - DB)
WAS는 웹 서버의 기능도 가지고 있는데 굳이 웹 서버가 필요한가?
WAS만 단독으로 사용할 경우
- 많은 정적 컨텐츠와 애플리케이션 로직을 모두 제공해야 함 -> 서버 과부하 우려
- 중요한 비즈니스 로직이 정적 컨텐츠 때문에 수행이 어려울 수 있음
- 로직을 포함해 장애 발생이 빈번함 -> 장애 발생 시 오류 발생 페이지조차 노출이 불가능함
웹 서버와 같이 사용할 경우
- 정적 컨텐츠는 모두 웹 서버에서 제공
- 로직이 필요한 콘텐츠만 웹 서버가 WAS에 요청
- WAS는 로직 처리만 담당 후 웹 서버로 반환
- WAS에서 장애가 발생 하여도 웹 서버에서 오류 페이지를 노출 가능 -> 정적 리소스만 사용하는 웹 서버는 장애 발생 확률이 적음
- 효율적인 리소스 관리 가능
- 정적 컨텐츠가 많다면 -> 웹 서버 증설
- 애플리케이션 리소스가 많다면 -> WAS 증설
웹 서버와 WAS를 함께 사용하는 이유
- 성능 최적화:
- 웹 서버: 정적 콘텐츠 처리에 특화
- WAS: 동적 콘텐츠 및 비즈니스 로직 처리에 집중 이로 인해 각 서버의 부하를 줄이고 전체 시스템 성능을 향상
- 안정성 향상:
- WAS에 장애가 발생해도 웹 서버가 오류 페이지를 제공할 수 있어 사용자 경험이 개선
- 정적 리소스 처리용 웹 서버는 상대적으로 안정적이어서 전체 시스템의 가용성이 높아짐
- 유연한 확장성:
- 트래픽 유형에 따라 웹 서버나 WAS를 선택적으로 증설할 수 있어 효율적인 리소스 관리가 가능
- 보안 강화:
- 웹 서버가 앞단에서 보안 필터링을 수행하여 WAS로의 직접적인 공격을 방지할 수 있음
동시 요청
단일 쓰레드(1개의 쓰레드)
- 요청이 쓰레드에 할당되어 쓰레드가 처리를 수행
- 쓰레드는 한 번에 하나의 일을 처리할 수 있음
- 요청이 한 개가 아닌 여러 개가 들어온다면 쓰레드는 순차적으로 처리를 해야 함
- 응답 시간이 길어지고 처리 중 장애가 발생한다면 응답이 매우 늦어짐
다중 쓰레드(요청마다 쓰레드 생성)
- 여러 개의 요청이 들어올 경우 요청 마다 쓰레드를 생성하여 할당
- 동시에 여러 요청을 처리할 수 있음
- 하나의 쓰레드가 지연된다 하여도 다른 쓰레드들은 영향을 받지 않음
- 그러나 쓰레드 생성 비용이 매우 비싸고
- 컨텍스트 스위칭 비용이 발생
- 쓰레드 생성 제한이 없을 경우 많은 요청으로 인해 서버가 과부하 될 수 있음
* 컨텍스트 스위칭 (Context Switching): 운영 체제가 현재 실행 중인 프로세스나 쓰레드의 상태를 저장하고, 다른 프로세스나 쓰레드의 상태를 복원하여 실행을 전환하는 과정, 이를 통해 여러 작업이 동시에 실행되는 것처럼 보이게 하지만 빈번한 컨텍스트 스위칭은 시스템 성능에 부정적인 영향을 줄 수 있다.
다중 쓰레드(쓰레드 풀)
- 필요한 쓰레드를 쓰레드 풀에 관리
- 요청 시 쓰레드 풀에서 꺼내서 사용하고 다시 반납
- 최대 쓰레드가 모두 사용중일 경우 요청을 거부하거나 대기
- 쓰레드가 미리 생성되어 있으므로 생성하고 종료하는 비용이 절감
- 생성 가능 최대치가 정해져 있어 요청이 많이 들어오더라도 기존 요청을 안전하게 처리 가능
- 쓰레드 풀 최대치가 너무 낮을 경우 서버의 리소스는 여유롭지만 클라이언트 응답은 지연될 수 있음
- 쓰레드 풀 최대치가 너무 높을 경우 동시에 많은 요청을 수용하려다 서버 과부하 우려 발생
- 성능 테스트를 통해 적정치를 찾는 게 중요
728x90
'백엔드 > HTTP' 카테고리의 다른 글
[HTTP] 헤더 (0) | 2024.07.17 |
---|---|
[HTTP] 메서드 (0) | 2024.07.15 |
[HTTP] HTTP 구조 & 무상태 프로토콜 (0) | 2024.07.13 |
[HTTP] 인터넷 네트워크 (0) | 2024.07.13 |