[One Day One Question]
WAS와 웹 서버에 대해서 설명해 주세요.
1. 기본 개념
- 웹 서버
- HTTP 프로토콜을 사용해 클라이언트(브라우저)와 통신하는 서버입니다.
- 주로 정적인 콘텐츠(HTML, CSS, JS, 이미지 파일 등)를 제공하는 데 사용됩니다.
- 예: Apache HTTP Server, Nginx
- WAS (Web Application Server)
- 동적인 콘텐츠를 생성하고 실행할 수 있는 서버로, 웹 서버의 역할을 포함하면서 추가적으로 애플리케이션 로직을 처리합니다.
- 클라이언트의 요청에 따라 데이터베이스와 상호작용하거나 비즈니스 로직을 수행합니다.
- 예: Tomcat, JBoss, WebSphere, WebLogic
2. 기능
- 웹 서버
- 정적 파일을 클라이언트에게 전송.
- 리버스 프록시 역할 수행 가능.
- 클라이언트 요청을 처리하고 WAS로 전달.
- 동적 콘텐츠 처리가 불가능.
- WAS
- 동적 웹 애플리케이션을 실행(예: Java, Python, PHP 등).
- 데이터베이스와의 상호작용을 통해 동적인 결과를 생성.
- 비즈니스 로직 처리.
- 세션 관리, 트랜잭션 처리 등 추가 기능 제공.
3. 역할
- 웹 서버
- WAS와 클라이언트 사이에서 요청을 받아 적절히 라우팅하거나 정적 리소스를 직접 처리.
- 높은 성능의 정적 리소스 제공.
- 부하 분산(로드 밸런싱)을 지원.
- WAS
- 클라이언트 요청을 기반으로 동적인 비즈니스 로직을 실행.
- JSP, 서블릿, Spring 등의 웹 애플리케이션을 실행.
꼬리 질문
WAS만 사용하지 않고 굳이 웹 서버를 사용하는 이유는 무엇인가요?
WAS만으로도 동적 콘텐츠를 처리할 수 있기 때문에, 단순한 웹 애플리케이션에서는 WAS만 사용해도 충분할 수 있습니다. 하지만 웹 서버를 추가로 사용하는 이유는 성능, 보안, 확장성 등 여러 가지 실질적인 이점 때문입니다.
1. 성능 최적화
- 정적 콘텐츠 처리 효율성
- WAS는 동적 콘텐츠를 생성하는 데 최적화되어 있지만, 정적 콘텐츠(HTML, CSS, JS, 이미지 등)를 처리하는 데는 웹 서버가 더 효율적입니다.
- 웹 서버는 정적 리소스를 빠르게 캐싱하고 제공할 수 있어 WAS의 부하를 줄이고 전체 성능을 향상시킵니다.
- 리소스 분리
- 정적 리소스는 웹 서버가 처리하고, 동적 로직만 WAS가 처리하도록 역할을 분리하면 서버의 리소스 활용이 더 효율적입니다.
2. 보안 강화
- 프록시 역할 (Reverse Proxy)
- 웹 서버는 클라이언트 요청을 필터링하고 WAS로 전달하는 역할을 하며, WAS를 직접 외부에 노출하지 않도록 보호합니다.
- 이를 통해 WAS에 대한 직접적인 공격을 막을 수 있습니다.
- HTTPS 처리
- 웹 서버는 HTTPS 트래픽을 처리하고 복호화한 데이터를 WAS로 전달할 수 있습니다.
- WAS가 복호화 작업을 수행하면 성능에 영향을 줄 수 있으므로, 웹 서버가 이를 대신 처리하여 성능을 최적화할 수 있습니다.
3. 부하 분산 (Load Balancing)
- 트래픽 분산
- 대규모 애플리케이션에서는 여러 WAS 인스턴스를 운영하는 경우가 많습니다. 웹 서버는 로드 밸런서 역할을 하여 들어오는 요청을 여러 WAS로 분산시킬 수 있습니다.
- 이를 통해 한 WAS가 과부하되는 것을 방지하고 안정적인 서비스를 제공합니다.
4. 장애 대응
- WAS 장애 시 서비스 지속
- WAS가 장애가 발생하거나 재시작되어도, 웹 서버는 정적 콘텐츠를 계속 제공할 수 있어 최소한의 서비스를 유지할 수 있습니다.
- 사용자는 동적 기능은 이용할 수 없더라도 기본적인 페이지 접근은 가능해집니다.
5. 확장성 및 유연성
- 다양한 WAS와의 호환
- 하나의 웹 서버가 여러 WAS와 통합되어 동작할 수 있습니다. 이를 통해 서로 다른 기술 스택으로 개발된 애플리케이션을 하나의 웹 서버로 통합할 수 있습니다.
- 예: Apache 웹 서버가 Java 기반 Tomcat과 Python 기반 Flask 애플리케이션을 동시에 지원.
6. 캐싱을 통한 응답 속도 향상
- 웹 서버는 캐싱(Cache) 기능을 활용하여 동일한 요청에 대해 WAS를 거치지 않고 빠르게 응답할 수 있습니다.
- 예: 자주 요청되는 리소스는 캐시에 저장되어 네트워크 및 서버 부담을 줄임.
'cs > ODOQ' 카테고리의 다른 글
[ODOQ] 로드 밸런싱(Load Balancing) (0) | 2025.01.10 |
---|---|
[ODOQ] Connection Timeout, Socket Timeout, Read Timeout (1) | 2025.01.04 |
[ODOQ] 서버 사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR) (0) | 2025.01.01 |
[ODOQ] 리버스 프록시와 포워드 프록시 (0) | 2024.12.26 |
[ODOQ] HTTP에서 멱등성 (0) | 2024.12.20 |