[Web] Web Server와 Was의 차이

이수진·2022년 2월 4일
2
post-thumbnail
post-custom-banner

1. 웹 서버

1-1) 웹 서버란?

웹 브라우저(클라이언트)로부터 HTTP요청을 받아 HTML문서와 같은 정적 컨텐츠를 제공하는 프로그램입니다.

  • 여기서 정적 컨텐츠란, 요청 인자 값에 상관없이 달라지지 않는 컨텐츠들을 의미합니다. (예시: html, css, image ... 등)
    즉, 어느 사용자 요청이든 항상 동일한 컨텐츠를 의미합니다.

1-2) 웹 서버의 기능?

웹 서버는 클라이언트로부터의 HTTP요청을 받아, 이 요청에 맞게 두 가지 기능 중 하나를 선택해서 제공해야 합니다.

  • 정적인 컨텐츠 요청 시
    -> 정적 컨텐츠(html, css, ..)를 제공할 수 있다.
    (WAS를 거치지 않고 바로 자원 제공)
  • 동적인 컨텐츠 요청 시
    -> 클라이언트의 요청을 WAS(Web Application Server)로 보내고, WAS가 처리한 결과를 클라이언트에게 전달할 수 있다.

위 그림대로 이해하면 이해하기 쉬울 것 같습니다.

1-3) 웹 서버의 예

  • 웹 서버의 예로는 가장 유명한 ApacheNginx, 이 두 개가 있고 그리고 Windows 전용 웹 서버인 IIS가 있습니다.

2. WAS (Web Application Server)

2-1) WAS란?

  • DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server입니다.
  • HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)입니다.
  • "웹 컨테이너(Web Container)" 혹은 "서블릿 컨테이너(Servlet Container)"라고도 불립니다.
  • WAS = Web Server + Web Container

2-2) WAS의 기능?

  • 클라이언트로부터 HTTP요청을 받을 수 있습니다.
  • 요청에 맞는 정적 컨텐츠를 제공할 수 있습니다.
  • 🔥DB조회나 다양한 로직 처리를 통해 동적 컨텐츠를 제공할 수 있습니다.
  • 🔥웹 서버 기능들을 구조적으로 분리하여 처리하고자하는 목적으로 제시되었습니다
    -> 분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용됩니다.
    -> 주로 DB 서버와 같이 수행됩니다.

2-3) WAS의 예

  • WAS의 예로는 가장 유명한 Tomcat 그리고 그 외에 JBoss, Jeus, Web Sphere등이 있습니다.
    (스프링의 톰캣이 WAS의 대표적인 예라고 알려져 있지만, 다른 진영에서 예를들면 제가 현재 쓰고있는 Django에서는 딱히 뭐다 라고 정의되지 않는다고 합니다. 이 점을 유의하면 될 것 같아요.)

3. 웹 서버 그리고 WAS

3-1) 웹 서버가 필요한 이유?

클라이언트(웹 브라우저)에 정적 컨텐츠를 보내는 과정을 예시로 들어봅시다.🤔

  • 이미지 파일과 같은 정적인 파일들은 웹 문서(HTML 문서)가 클라이언트로 보내질 때 함께 가는 것이 아닙니다.
  • 클라이언트는 HTML 문서를 먼저 받고, 그에 맞게 필요한 이미지 파일들을 다시 서버로 요청하면 그때서야 이미지 파일들을 받아옵니다.
  • 🔥Web Server를 통해 정적인 파일들을 Application Server까지 가지 않고 앞단에서 빠르게 보내줄 수 있습니다

=> ❗️결론

  • 웹 서버를 별도로 운영하는 이유는 WAS의 부담을 줄여주기 위해서입니다. html, css등 정적인 파일들을 굳이 동적인 처리를 하는 WAS까지 가지 않고 앞단에서 빠르게 보내어 서버의 부담을 줄이는 것입니다.
  • 따라서 웹 서버를 통해 정적 컨텐츠만 처리하도록 기능을 분배하여, WAS의 부담을 줄일 수 있습니다.

3-2) WAS가 필요한 이유?

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

3-3) WAS가 웹 서버의 역할까지 다 처리할 수 있는가?

i. 서버 부하가 커지게 되고, 수행 속도가 느려지게 될 수 있기 때문에 이 둘을 분리합니다.

-> WAS는 기본적으로 동적인 컨텐츠를 제공하기 위해 존재하는 서버입니다. 그런데 정적인 컨텐츠 요청까지 WAS가 처리한다면, 정적인 데이터 처리로 인해 부하가 커지게 되고, 동적 컨텐츠의 처리가 지연됨에 따라 수행 속도가 느려지게 될 것입니다.

❗️웹서버 부하 방지를 막기 위해 웹 서버와 WAS의 기능을 분리합니다❗️

ii. 보안을 강화하기 위해 이 둘을 분리합니다.

-> SSL에 대한 암복호화 처리에 웹 서버를 이용합니다.

iii. 여러 대의 WAS를 연결 가능하도록 하기 위해 웹 서버를 이용합니다.

-> 예를들면, Load Balancing을 위해서 웹 서버를 이용합니다.
-> 특히 대용량 웹 어플리케이션의 경우, 웹 서버를 앞 단에 두고 WAS에 오류가 발생하면, 웹 서버에서 WAS를 사용자가 이용하지 못하게 막아둔 뒤 재시작하여 사용자가 오류를 느끼지 못하게 끔 만들 수 있습니다.

3-4) 여러 웹 서비스 아키텍처

이런 웹 서비스들은 다양한 아키텍처 구조를 가질 수 있습니다.

  • Client -> Web Server -> DB
  • Client -> WAS -> DB
  • Client -> Web Server -> WAS -> DB
  • Client -> Web Server -> 여러 개의 WAS -> DB

3-5) 그래서 가장 효율적인 방법은?

웹 서버를 WAS 앞에 두고, 필요한 WAS들을 웹 서버에 플러그인 형태로 설정하면 효율적인 분산 처리가 가능합니다.😊

얼른 마무리하고, 제 서비스의 아키텍처 구조에 대해서도 한 번 꼭 작성해보도록 하겠습니다.
전체적인 아키텍처 구조를 알고 설계하는 것이 정말 중요한 것 같습니다.😊


[Reference]

[이미지 Reference]

profile
꾸준히, 열심히, 그리고 잘하자
post-custom-banner

0개의 댓글