본문 바로가기

개발자 강화/백엔드

[매일메일] WAS와 웹서버의 차이점? (BE.250124)

웹 서버: 정적 리소스 처리, 요청 분배, 캐싱, 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/