[CS] 웹 서버 vs WAS

말하는 감자·2025년 1월 22일

CS

목록 보기
16/33
post-thumbnail

Static vs Dynamic Pages

Static Pages(정적 페이지)

  • 사용자가 브라우저를 통해 요청을 보내면, Web Server는 요청된 HTML 파일(서버에 이미 저장되어있는 파일)을 그대로 보내준다.
  • 서버에 저장된 데이터가 변경되지 않는 한 항상 동일한 페이지를 반환한다.

장점

  • 다른 처리 없이 요청에 대한 파일만 전송하기 때문에 빠름
  • 단순한 문서로 웹 서버를 구축하므로 호스팅 서버에 연결하는 비용이 적다

단점

  • 저장된 정보만 보여주기 때문에 서비스가 한정적
  • 추가 삭제 수정 등의 작업이 모두 코드를 직접 건드려야 하기 때문에 관리가 힘들다.

예시

개인 포트폴리오, 회사 소개, 학교 소개 등 업데이트가 적고 변동이 없는 페이지

Dynamic Pages(동적 페이지)

  • 사용자가 브라우저를 통해 요청을 보내면, 서버는 요청에 따라 데이터베이스와 상호작용하고 필요한 처리를 수행한 후에 생성된 HTML을 반환
  • 요청에 관하여 사용자는 조건(상황, 시간, 요청)에 따라 다른 결과를 받게 된다
  • 웹 서버에 의해서 실행되는 프로그램(서블릿)을 통해서 만들어진 결과물

장점

  • 개인화: 사용자에 따라 콘텐츠를 맞춤형으로 제공
  • 데이터베이스 연동
  • 유지보수 용이

단점

  • 서버부하
  • 속도
  • 복잡성

예시

  • 뉴스, 전자상거래 사이트처럼 자주 업데이트 되거나 사용자간의 상호작용이 많은 사이트

웹 서버(Web Server)

정의

클라이언트로부터 HTTP 요청을 받아들이고 HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램

HTML 문서와 같은 웹 페이지?

-> 정적 콘텐츠

즉, 웹 서버는 클라이언트가 웹 브라우저에서 어떠한 페이지 요청을 하면 웹 서버가 그 요청을 받아 정적 콘텐츠를 제공하는 서버이다.

정적 컨텐츠는 단순 HTML 문서, CSS, javaScript, image, file 등 즉시 응답 가능한 컨텐츠

웹 서버가 동적 컨텐츠 요청을 받으면 해당 요청을 WAS에게 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달해주는 역할을 한다.

예시


Apache Server, Nginx 등

WAS(Web Application Server)

정의

  • WAS는 인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어로서, 주로 동적 서버 컨텐츠를 수행하는 것으로 웹 서버와 구별되며, 주로 DB 서버와 같이 수행되는 것을 의미한다

  • 웹 컨테이너 혹은 서블릿 컨테이너 라고도 불린다.

    • JSP와 Servlet 구동 환경을 제공

역할

  • WAS = Web Server + Web Container
  • Web Server의 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시
    • 분산 트랜잭션, 보안, 메시징, 스레드 처리 등의 기능을 처리하는 분산 환경에서 사용
    • 주로 DB와 같이 수행
  • WAS의 내부 웹 서버도 정적인 콘텐츠를 처리하는데 있어서 성능상에 큰 차이가 없다

주요 기능

  • 프로그램 실행 환경과 DB 접속 기능 제공
  • 여러 개의 트랜잭션 관리
  • 업무를 처리하는 비즈니스 로직 수행


Tomcat, Jeus 등

웹 서버와 WAS를 구분하는 이유

웹 서버의 필요

  • 클라이언트에 이미지 파일(정적 콘텐츠)을 보내는 과정
    1. 이미지 파일같은 정적 파일은 웹 문서(HTML 문서)가 클라이언트로 보내질 때 함께 보내지는것이 아니다.
    2. 클라이언트는 HTML 문서를 먼저 받고 그에 필요한 이미지 파일들을 다시 서버로 요청하면 그때 이미지 파일을 받아온다.
    3. 정적 파일들은 WAS 까지 가지 않고 앞단에서 빠르게 보내줄 수 있다.
  • 웹 서버에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.

WAS의 필요

  • 웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재
    • 웹 서버만을 이용한다면 사용자 요청에 대한 결과 값을 모두 미리 만들어 놓고 서비스를 해야한다 -> 비효율
    • 따라서 사용자에 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해야 한다.
  • WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용

WAS가 웹서버를 모두 수행하면 안되나?

  • 기능 분리로 인한 서버 부하 방지
    • db 조회나 다양한 로직을 처리하기 때문에 단순한 정적 컨텐츠는 앞단인 웹서버에서 빠르게 클라이언트에게 제공하는것이 좋다
    • 정적 컨텐츠 요청까지 처리하면, 처리가 지연됨에 따라 수행 속도에 영향을 줌
  • 물리적으로 분리하여 보안 강화
    • 외부에서 접근 가능한 웹 서버와 내부에서만 접근 가능한 WAS를 구성하여 보안 계층을 설정 가능
  • 여러 대의 WAS 연결 가능
    • 대용량 웹 어플리케이션의 경우(여러개의 서버 사용) 웹서버와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응

정리 _ 동작과정


1. 웹 서버는 웹 브라우저의 클라이언트로부터 HTTP 요청을 받는다.
2-1. 정적 요청: 웹서버에서 처리
2-2. 동적 요청: 웹 서버는 클라이언트의 요청을 WAS에 보낸다
3. WAS는 관련된 서블릿을 메모리에 올린다.
4. WAS는 web.xml을 참조하여 해당 Servlet에 대한 스레드를 생성한다.
5. HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달
6. Servlet Container에서 비즈니스 로직을 수행하여(with DB) 동적 페이지 생성하여 HttpServletResponer 객체에 담아 WAS에 전달
7. WAS는 HttpServletResponse 웹 서버에 전달한다.
8. 최종적인 HttpResponse를 구성한 뒤, 생성된 스레드 종료하고, HttpServletRequest와 HttpServletResponse 객체 제거

profile
주니어개발자(?)

0개의 댓글