Web Server와 WAS: 웹 페이지는 어떻게 응답 될까?

이민호·2025년 6월 24일

한 학기를 마치고 책을 읽다가 정적 페이지, 동적 페이지에 대한 이야기가 나와 찾아보니 Web Server와 Web Application Server와 관련이 있다는 것을 알게되었다.

이전에도 Web Server와 WAS는 봤던 것인데 와닿게 이해를 못해서 이번 기회에 제대로 정리해보고자 한다.

이후 Web Server와 WAS의 동작 방식, Spring와 Spring Boot, 프록시 리버스 프록시까지 알아볼 예정이다.

웹 페이지

인터넷을 이용하면서 접속하게 되는 웹페이지는 두 가지로 나뉜다.
정적페이지와 동적페이지이다.

정적 페이지란 ?

클라이언트(브라우저)의 Http 요청을 받아 정적인 리소스(html, css, js, 이미지 등)을 제공하는 페이지.

예를들어, 우리가 서버에 요청을 보내면, 전단지(웹페이지)를 한 장 준다고 생각하면된다. 서버가 DB나 파일 시스템에 페이지별로 전단지를 만들어 저장해 놨다가 URL요청에 대해 웹페이지를 제공하는 방식이다.

우리가 요즘 보는 웹사이트에 동적으로 변화하는 요소들을 넣을 수 없다!!!!

예)

https://example.com/about.html
회사 소개나 약관, 공지사항 등 자주 바뀌지 않는 페이지를 띄운다.

동적 페이지란 ?

얘도 클라이언트의 Http 요청을 받아 리소스(html, css, js)를 제공받긴 하는데, 사용자의 요청에 따라 동적으로 변화하는 페이지이다.

이게 뭔말이냐,

예를 들어 사용자가 https://example.com?product=1 또는 ?product=2로 요청하면,
서버는 각각의 상품 정보를 불러와 다른 결과의 HTML 또는 JSON을 응답하게 될것이고, 유저는 다른 화면을 봐야할 것이다.

그러면 제공받는 HTML자체가 짠~ 변화하지는 않을 거고,,,
웹에서는 HTML 골격(정적 페이지)만을 전달받고 거기에 변화하는 요소들을 추가하는 방식인것이다 !!!

이때 우리는 API라는 것을 이용하여 서버에 관련 자원들을 요청하고 그 자원들을 HTML에 쏙쏙 넣어줌으로써 변화하는 페이지를 만날 수 있게 되는 것이다🎇


HTML에 변화요소를 추가하는 방식에 따라 또 나눠지는데,
바로 CSR(Client Side Rendering)과 SSR(Server Side Rendering)이다.

CSR(Client Side Rendering)

이 방식은 서버측에서 요청을 받을 때 관련 페이지 골격, 즉 정적페이지(HTML, CSS, JS)를 먼저 렌더링 한 다음, 브라우저가 JavaScript code를 실행시켜 API 요청을 보내 서버로부터 동적 요소등을 제공받고 이후에 골격위에 동적요소 렌더링 하는 작업이다.

지금 당장 네이버를 켜보면,
기본적인 골격들이 먼저 뜨고 이후에 광고창이나, 뉴스 기사등이 띄워지는 것을 볼 수 있을 텐데 이게 CSR의 예이다.

주로 React, vue.js, Angular에서 사용하는 방식이다.

SSR(Server Side Rendering)

이 방식은 서버측에서 요청을 받을 때 페이지 골격, 동적 요소등을 한방에 페이지로 만들어 html파일을 서버에서 클라이언트로 바로 전달하는 작업이다.

주로 Thymeleaf, JSP에서 사용한다. (레거시 ;)😒

=> 두 차이는 Server에서 동적인 요소를 포함시켜서 주느냐, Client가 직접 불러 오느냐의 차이로 이해하면 된다.

✔️ 그리고 브라우저에서 렌더링하기 위해서는 무조건 리소스를 다운로드 한 후, 로컬 메모리나 디스크에 임시 저정해야한다.


서론이 길었다.

본격적으로 Web Server와 WAS가 뭔지 알아보자.

Web Server

클라이언트(브라우저)의 HTTP 요청을 받아 정적인 리소스(html, css, js, 이미지 등)를 제공한다.

앞에서 나온 얘기들을 조합해보면, 정적페이지든 동적페이지는 정적 요소는 Web Server가 client에게 제공한다고 생각하면 된다.

예시는 Apache, Nginx가 있다.

Web Application Server

웹 애플리케이션을 실행하며, 동적인 로직을 처리 (비즈니스 로직 실행)

동적 페이지의 동적 요소들은 모두 WAS에서 처리한다고 생각하면 된다.

예시는 Tomcat, JBoss, Jetty가 있다.


🤔 난 여기서 의문점이 들었다, 서버가 2개인데

그럼 우리가 서버에 요청을 보낼때 Web Server와 Was에 두 곳에 요청을 보내는건가???

당연히 아니다.

우리가 www.naver.com 입력했을 때 요청 흐름을 살펴보자.

  1. 브라우저는 www.naver.com에 HTTP(S) 요청을 보냄
  2. 이 요청은 Web Server(Nginx나 Apache) 가 먼저 받음
  3. Web Server는 요청이 정적 파일(html, js, css, 이미지 등) 이면 직접 응답
  4. 요청이 동적 로직이 필요한 경우(예: 로그인, 검색) → WAS(예: Spring, Java, Node) 로 전달
  5. WAS가 비즈니스 로직 처리 후 결과를 Web Server에 전달
  6. Web Server가 최종적으로 브라우저에 응답을 전달

➡️ Ngnix 같은 Web Server가 먼저 요청을 받아서 처리한다.
그래서 기본적으로는 WS, WAS 둘 다 필요한 것이다.

저는 저런거 쓴 적 없는데요? 🤔

님은 아마도 Spring Boot를 사용하는 개발자일 것이다.
찐 Spring은 사실 애플리케이션을 만드는 용도일 뿐이고 실행할 수 있는 기능이 없다.

즉 우리가 Spring으로 프로젝트를 만들면 그걸 빌드해서, WAR파일을 만들고, WAS에 배포해야 실행이 가능하단 소리다. (진짜 너무 귀찮음)

하지만 Spring Boot는 내장으로 Tomcat과 같은 Web Server가 내장되어 있기 때문에 실행 가능한 애플리케이션을 만들 수 있고 WAR파일 따위를 만들어서 배포할 필요가 없이 JAR파일로 바로 실행이 가능하게 만든것이다.

그래서 Spring Boot 자체는 Servlet을 통해 WAS기능을 하지만, Tomcat은 Web Server 기능을 하므로 님은 Nginx같은 독립적인 Web Server가 필요 없이 정적,동적 페이지를 렌더링 할 수 있는 것이다.

➡️CSR과 SSR 그리고 WS, WAS

그럼 종합적으로 CSR과 SSR이 WS, WAS흐름에서 어떻게 진행되는지 한번 보자.


CSR

  1. 브라우저가 처음 / 요청 → Web Server가 index.html, bundle.js, style.css 등 정적 파일을 제공

  2. 브라우저가 JavaScript 실행 시작

  3. JS가 /api/user, /api/posts 같은 API 요청 보냄

  4. Web Server는 이 요청을 WAS(Spring 등) 에 전달

  5. WAS는 JSON 응답을 보내고 → JS가 받아서 화면 조립

SSR

  1. 브라우저가 /home 같은 페이지 요청

  2. Web Server(Nginx 등)가 요청을 받고, 정적 자원 (로고, CSS 등) 은 직접 응답 페이지 요청 (/home) 은 WAS(Spring 등)에 전달

  3. DB에서는 사용자 정보 조회, home페이지 관련 데이터 조회.

  4. WAS가 동적 데이터(DB 조회 등)를 조합하여 HTML을 서버에서 완성

  5. Web Server가 이 HTML을 브라우저에 전달

서버에서 모든 걸 조립해서 줌

✅마무리

지금까지 정적 페이지, 동적 페이지, WS, WAS등에 대해서 알아봤다.

❓ 그럼 URL을 웹서버가 요청받을 때, 정적페이지를 줄지 동적페이지를 줄지 어떻게 판단할까?

이는 웹서버의 주요 기능인 리버스 프록시와 관련이 있고,
다음 글에서 이어서 이야기해보도록 하겠다!

끗-✨

reference : https://yozm.wishket.com/magazine/detail/2817/

profile
효율적으로 살게요.

0개의 댓글