웹 서버: 정적 리소스 처리, 요청 분배, 캐싱, HTTPS 처리
- 정적 컨텐츠(HTML, CSS, JS, 이미지 등)를 제공하는 역할
- 클라이언트 요청이 정적 파일이 아니면 요청을 WAS로 전달함.
- 캐싱과 압축 기능을 통해 리소스 제공 속도를 최적화할 수 있음
WAS(Web Application Server): 동적 요청 처리, 비즈니스 로직 수행, 데이터 연동 등.
- HTTP 요청을 받아 어플리케이션 로직을 실행하거나, 데이터베이스와 상호작용해 동적 콘텐츠 생성
- 서블릿(Servlet) 컨테이너를 통해 Java 서블릿이나 JSP(Java Server Pages) 같은 기술을 실행함
-
더보기서블릿
1. 서블릿 = Server+Applet
Applet: 클라이언트 측에서 실행되는 작은 Java 프로그램
Servlet: 서버 측에서 실행되는 작은 Java 프로그램
2. 클라이언트로부터의 HTTP 요청을 처리하고, 동적으로 HTML, JSON, XML 등 응답을 생성해 반환함
3. 서블릿은 단독으로 실행되지 않고, 서블릿 컨테이너(Tomcat, Jetty 등)에서 실행함.
서블릿 컨테이너가 서블릿의 생성, 요청 처리, 종료 등을 관리함.
4. 서블릿의 라이프사이클 관리
서블릿은 생성->요청 처리->종료의 라이프사이클을 따름
개발자의 주요 메서드(init, service, destroy) 구현해 요청을 처리함
JSP
1. JSP는 HTML 문서 안에 Java 코드를 삽입할 수 있는 기술임. (동적인 HTML 페이지 생성에 적합)
2. 서버는 JSP를 직접 실해할 수 없고, Java 서블릿만 실행할 수 있음
3. JSP 파일은 실행 전에 서블릿으로 변환되어야 하고, 변환된 서블릿 클래스가 실행됨.
WAS도 정적 컨텐츠를 제공할 수 있는데 웹 서버가 따로 필요한 이유?
- 성능 최적화
- WAS가 정적 콘텐츠를 처리하면 리소스가 낭비될 수 있음
- 웹 서버는 정적 콘텐츠를 처리하는 데 최적화되어 있으며, 빠르고 가벼운 처리 제공
- WAS는 어플리케이션 로직에 집중해 더 효율적으로 동작함
- 부하 분산
- 웹 서버는 여러 WAS로 트래픽 분산(로드 밸런싱)할 수 있음
- 확장성
- 정적 콘텐츠 요청이 많으면, 웹 서버만 증설하면 됨
- 동적 요청이 많은 경우, WAS를 증설하면 됨
- 기능 추가
- 웹 서버는 캐싱, 압축, HTTPS 처리, 요청 필터링 등 추가 기능 제공하며, WAS에서 직접 처리하는 것보다 효율적
- 보안
- 웹 서버를 WAS 앞단에 배치하면 WAS가 외부 요청에 직접 노출되지 않음
- DDoS 공격을 웹 서버에서 필터링할 수 있음
웹 서버와 WAS 사용 사례
- 웹 서버만 사용하는 경우
- 단순 정적 사이트(블로그, 포트폴리오 페이지)
- CDN(Content Delivery Network)처럼 정적 파일만 제공하는 서비스
- 웹 서버 + WAS
- 커머스 사이트(정적 리소스+동적 요청 처리 필요)
- SNS(사용자 데이터 연동)
- 대규모 API 서버(정적 및 동적 콘텐츠 모두 사용)
- 웹 서버와 WAS의 협업 과정
- 클라이언트가 HTTP 요청을 보냄
- 웹 서버가 요청을 수신함
- 정적 콘텐츠 요청인 경우, 직접 처리
- 동적 콘텐츠 요청인 경우, WAS로 요청 전달
- WAS로 동적 요청 처리하고 결과 생성해 웹 서버에 반환함
- 웹 서버는 최종 응답을 클라이언트에게 반환함
구분 | 웹 서버(Web Server) | WAS(Web Application Server) |
기능 | 정적 콘텐츠(HTML, CSS,JS,이미지) 제공 클라이언트(브라우저) 요청 처리 로드밸런싱(트래픽 분배), 캐싱 및 압축 |
동적 콘텐츠 생성, 비즈니스 로직 처리 데이터베이스와 연동, API 서버로 작동 서블릿, JSP 컨테이너 |
주요 역할 | 클라이언트의 요청을 받아 정적 파일을 반환 정적 요청이 아닌 경우 WAS로 전달 |
동적 요청 처리 (데이터베이스 연동, 어플리케이션 로직) 요청에 따라 결과를 생성해 응답 |
예시 | Apache HTTP Server, Nginx | Tomcat, Jetty, JBoss, WebLogic, WebSphere |
개인적으로 이것과 관련된 개념이라고 생각하는 것: 프록시 서버
- 프록시 서버: 클라이언트와 서버 사이에 위치하며, 요청을 중개함
- Forward(정방향) 프록시: 클라이언트 요청을 대신 서버에 전달하고, 응답을 클라이언트로 반환함
- Reverse(리버스) 프록시: 클라이언트가 직접 WAS나 웹 서버에 접근하지 못하게 하고, 프록시 서버가 요청 중개
- 보안 강화/분산/캐싱이 필요할 때 웹서버,WAS에 프록시 서버를 껴서 사용함
- 프록시 서버가 요청을 받아서 보안 검사를 수행하거나, 캐싱된 리소스로 처리함
- 처리할 수 없는 경우 웹 서버로 전달해 정적 파일 처리, 동적 요청인 경우 WAS로 넘겨서 처리
- 이 블로그에 이와 관련된 글: 리버스 프록시와 포워드 프록시의 차이점? https://developer-dreamer.tistory.com/122
출처
[1] 매일메일. 250124/ WAS와 웹서버의 차이점은 무엇인가요? 105번. https://maeil-mail.kr
[2] 웹 서버와 WAS(Web Application Server) https://yozm.wishket.com/magazine/detail/1780/
'개발자 강화 > 백엔드' 카테고리의 다른 글
[매일메일] HTTPS란? (BE. 250127) (0) | 2025.01.27 |
---|---|
[개발] DB Trigger란? (0) | 2025.01.24 |
[매일메일] Java의 Stack, Queue, Deque란? (BE.2501223) (0) | 2025.01.23 |
[매일메일] SSR vs CSR, SPA vs MPA란? (BE.250122) (0) | 2025.01.22 |
[매일메일] Connection/Socket/Read Timeout이란? (BE.250121) (0) | 2025.01.21 |