Web Sever와 WAS의 개념을 공부하고 차이점을 알아보자 ❕
1. Static & Dynamic 페이지

Static Pages (정적 페이지)
- 변하지 않는 페이지
- DB에서 정보를 가져오거나 별도의 서버 처리를 하지 않고 사용자들에게 전달하는 페이지
- 모든 사용자에게 동일한 페이지
- html, css, js, image 파일과 같이 컴퓨터에 저장된 파일들을 요청하는 페이지
Dynamic Pages (동적 페이지)
- 변하는 페이지
- DB에서 정보를 가져오거나 서버에서 로직 처리 후 사용자들에게 보여줘야 하는 페이지
- 사용자마다 다른 페이지
2. Web Server & WAS 개념
Web Server
- 클라이언트의 요청을 받아 정적인 컨텐츠(html, css, js 등)를 제공해주는 서버
- 클라이언트가 동적인 컨텐츠를 요청했을 때, 해당 요청을 *컨테이너(Container)로 전달하고 결과를 다시 클라이언트에게 전달하는 역할
ex) Apache, Nginx, IIS 등
* 웹 컨테이너 (Web Container) ?
동적인 데이터들을 처리한 뒤 정적인 페이지로 생성해주는 소프트웨어 모듈이다.
서블릿(Servlet)과 JSP(Java Server Pages)를 실행할 수 있는 소프트웨어이며, 웹 컨테이너 또는 서블릿 컨테이너라고 부른다.
- 서블릿 : 웹 페이지를 동적으로 생성하거나 데이터 처리를 수행하기 위한 서버측 프로그램. 자바를 기반으로 만들어지며 WAS 위에서 컴파일되고 동작한다.
- JSP : HTML 코드에 자바 코드를 넣어 동적인 웹페이지를 생성하는 서블릿 기반의 스크립트 기술. JSP파일은 서블릿으로 변환되어 실행된다.

웹 서버에 JSP 페이지를 요청하면 컨테이너가 JSP 파일을 서블릿 파일로 변환하여 컴파일을 수행하고, Execute 과정을 통해 생성된 HTML 파일을 JSP 컨테이너에게 전달한다. 이를 클라이언트에게 전달해 동적인 페이지를 보여준다.
(서블릿 인스턴스는 매 요청마다 생성되는 것이 아니라 한 개의 인스턴스를 재사용한다)
웹 컨테이너 작동 흐름

- 클라이언트는 웹서버로 요청을 보낸다.
- 웹서버는 동적인 컨텐츠 요청을 위해 WAS의 컨테이너로 요청을 넘긴다.
- 컨테이너는 요청을 처리할 스레드를 생성하고, 스레드에서 필요한 서블릿 메서드를 호출한다. (서블릿 인스턴스를 새로 생성하는 것이 아니라 스레드를 생성해 사용하는 것임)
- 서블릿은 해당 로직을 실행시키고 컨테이너에게 응답을 넘겨준다.
- 컨테이너는 이를 웹서버에 전달하고, 웹서버는 클라이언트에게 전달한다.
WAS (Web Application Server)
- 클라이언트의 요청을 받아 동적인 컨텐츠(DB 조회, 로직 처리 등)를 제공해주는 서버
- 웹서버와 DBMS 사이에서 동작하는 미들웨어로, 컨테이너 기반으로 동작
ex) Tomcat, JBoss, WebSphere 등
⇒ 사용자가 특정 사이트에 접속해 로그인 후 ‘마이페이지’로 이동한다면, 웹 서버는 mypage.html
파일(정적 컨텐츠)을 클라이언트에게 전달하고, mypage.html
에서 보여져야 하는 사용자 정보(동적 컨텐츠)는 WAS에서 DB 조회 후 데이터를 가공해 클라이언트에게 전달한다.
3. 구분 이유
Web Server의 필요성
클라이언트에서 이미지가 포함된 페이지를 요청했을 때, 페이지 파일과 이미지 파일을 동시에 가져오는 것이 아니다. 클라이언트는 페이지 파일(html)을 먼저 받고 해당 페이지에서 필요한 이미지 파일을 다시 서버로 요청해 이미지 파일을 받아온다.
이런 요청뿐만 아니라 동적 컨텐츠에 대한 요청 모두 WAS에서 처리한다면 부담이 될 것이다. 정적 컨텐츠는 앞단에 웹서버를 두어 빠르게 보내줄 수 있다.
⇒ ^웹서버에서 정적인 컨텐츠를 처리해준다면, WAS의 부담을 줄일 수 있다.^
WAS의 필요성
사용자 요청에 적절한 동적 컨텐츠를 만들어서 제공해야 할 때, 웹서버만을 이용한다면 결과값을 모두 미리 만들어 놓고 서비스 해야 한다. 이렇게 모든 요청에 대해 미리 만들어놓고 제공하기에는 자원이 부족하다.
⇒ ^요청에 적절한 데이터를 DB에서 가져와 비즈니스 로직에 따라 결과를 동적으로 제공할 수 있다.^
Web Server, WAS 분리의 장점
- 서버 부하 방지
- WAS는 DB 조회나 다양한 로직을 처리하기 때문에 응답 속도가 상대적으로 느리다. 하지만 정적 컨텐츠는 Web Server에서 빠르게 클라이언트에게 제공할 수 있다.
- 만약 WAS에서 정적 컨텐츠까지 처리한다면 부하가 커지게 되고, 동적 컨텐츠 요청의 응답은 더 느려질 것이다.
- 보안 강화
- SSL에 대한 암복호화 처리에 Web Server를 사용
- 여러 대의 WAS 연결 가능
- 여러 대의 서버를 사용하는 서비스의 경우 Web Server와 WAS를 분리해 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
(앞 단에 Web Server를 두고, 특정 WAS에 오류가 발생하면 Web Server에서 해당 WAS를 사용하지 못하도록 사용자 요청을 차단한 뒤 WAS를 재시작하여 해결)
- 여러 대의 서버를 사용하는 서비스의 경우 Web Server와 WAS를 분리해 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
- 여러 웹 어플리케이션 서비스 가능
- 하나의 서버에서 PHP 애플리케이션, JAVA 애플리케이션을 함께 사용할 수 있다.
4. 동작 흐름

- 클라이언트가 웹서버에게 요청을 보낸다.
- 웹 서버는 요청을 분석해 정적 컨텐츠를 처리할지, 동적 컨텐츠를 처리할지 결정한다.
- 해당 요청이 동적인 페이지나 로직 처리를 필요로 하면, 요청을 WAS에게 전달한다.
- WAS는 요청과 관련된 서블릿을 메모리에 로드하고, web.xml 또는 어노테이션을 참조하여 서블릿을 찾아 스레드를 생성한다.
- WAS는 요청 및 응답 정보를 담은 HttpServletRequest, HttpServletResponse 객체를 생성해 서블릿에 전달한다.
(생성된 스레드는 서블릿의 `service()`를 호출하고, `service()`는 HTTP method에 따라 `doGet()`또는 `doPost()`를 호출한다) - `doGet()` 또는 `doPost()`는 로직을 처리한 후, 동적 페이지를 생성해 결과를 HttpServletResponse 객체에 담는다.
- WAS는 HttpServletResponse 객체에 담긴 결과를 HttpResponse 형태로 바꿔 웹 서버로 전달한다.
- WAS는 생성된 스레드를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.
- 웹 서버는 클라이언트에게 결과를 전달한다.
참고자료 😃
https://doozi316.github.io/web/2020/09/13/WEB26/
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Web/Web Server와 WAS의 차이.md
https://code-lab1.tistory.com/199
https://javacpro.tistory.com/43
'Web' 카테고리의 다른 글
[Web] Cookie & Session & Token 인증 (0) | 2024.04.06 |
---|---|
[Web] 웹 스토리지 (localStorage & sessionStorage) (0) | 2024.04.02 |
[Web] RESTful API (0) | 2024.03.10 |
[Web] LocalStorage & SessionStorage 개념 및 사용법 (0) | 2024.03.10 |
[Web] REFERER 체크 & CSRF 방어 (0) | 2024.03.09 |
Web Sever와 WAS의 개념을 공부하고 차이점을 알아보자 ❕
1. Static & Dynamic 페이지

Static Pages (정적 페이지)
- 변하지 않는 페이지
- DB에서 정보를 가져오거나 별도의 서버 처리를 하지 않고 사용자들에게 전달하는 페이지
- 모든 사용자에게 동일한 페이지
- html, css, js, image 파일과 같이 컴퓨터에 저장된 파일들을 요청하는 페이지
Dynamic Pages (동적 페이지)
- 변하는 페이지
- DB에서 정보를 가져오거나 서버에서 로직 처리 후 사용자들에게 보여줘야 하는 페이지
- 사용자마다 다른 페이지
2. Web Server & WAS 개념
Web Server
- 클라이언트의 요청을 받아 정적인 컨텐츠(html, css, js 등)를 제공해주는 서버
- 클라이언트가 동적인 컨텐츠를 요청했을 때, 해당 요청을 *컨테이너(Container)로 전달하고 결과를 다시 클라이언트에게 전달하는 역할
ex) Apache, Nginx, IIS 등
* 웹 컨테이너 (Web Container) ?
동적인 데이터들을 처리한 뒤 정적인 페이지로 생성해주는 소프트웨어 모듈이다.
서블릿(Servlet)과 JSP(Java Server Pages)를 실행할 수 있는 소프트웨어이며, 웹 컨테이너 또는 서블릿 컨테이너라고 부른다.
- 서블릿 : 웹 페이지를 동적으로 생성하거나 데이터 처리를 수행하기 위한 서버측 프로그램. 자바를 기반으로 만들어지며 WAS 위에서 컴파일되고 동작한다.
- JSP : HTML 코드에 자바 코드를 넣어 동적인 웹페이지를 생성하는 서블릿 기반의 스크립트 기술. JSP파일은 서블릿으로 변환되어 실행된다.

웹 서버에 JSP 페이지를 요청하면 컨테이너가 JSP 파일을 서블릿 파일로 변환하여 컴파일을 수행하고, Execute 과정을 통해 생성된 HTML 파일을 JSP 컨테이너에게 전달한다. 이를 클라이언트에게 전달해 동적인 페이지를 보여준다.
(서블릿 인스턴스는 매 요청마다 생성되는 것이 아니라 한 개의 인스턴스를 재사용한다)
웹 컨테이너 작동 흐름

- 클라이언트는 웹서버로 요청을 보낸다.
- 웹서버는 동적인 컨텐츠 요청을 위해 WAS의 컨테이너로 요청을 넘긴다.
- 컨테이너는 요청을 처리할 스레드를 생성하고, 스레드에서 필요한 서블릿 메서드를 호출한다. (서블릿 인스턴스를 새로 생성하는 것이 아니라 스레드를 생성해 사용하는 것임)
- 서블릿은 해당 로직을 실행시키고 컨테이너에게 응답을 넘겨준다.
- 컨테이너는 이를 웹서버에 전달하고, 웹서버는 클라이언트에게 전달한다.
WAS (Web Application Server)
- 클라이언트의 요청을 받아 동적인 컨텐츠(DB 조회, 로직 처리 등)를 제공해주는 서버
- 웹서버와 DBMS 사이에서 동작하는 미들웨어로, 컨테이너 기반으로 동작
ex) Tomcat, JBoss, WebSphere 등
⇒ 사용자가 특정 사이트에 접속해 로그인 후 ‘마이페이지’로 이동한다면, 웹 서버는 mypage.html
파일(정적 컨텐츠)을 클라이언트에게 전달하고, mypage.html
에서 보여져야 하는 사용자 정보(동적 컨텐츠)는 WAS에서 DB 조회 후 데이터를 가공해 클라이언트에게 전달한다.
3. 구분 이유
Web Server의 필요성
클라이언트에서 이미지가 포함된 페이지를 요청했을 때, 페이지 파일과 이미지 파일을 동시에 가져오는 것이 아니다. 클라이언트는 페이지 파일(html)을 먼저 받고 해당 페이지에서 필요한 이미지 파일을 다시 서버로 요청해 이미지 파일을 받아온다.
이런 요청뿐만 아니라 동적 컨텐츠에 대한 요청 모두 WAS에서 처리한다면 부담이 될 것이다. 정적 컨텐츠는 앞단에 웹서버를 두어 빠르게 보내줄 수 있다.
⇒ 웹서버에서 정적인 컨텐츠를 처리해준다면, WAS의 부담을 줄일 수 있다.
WAS의 필요성
사용자 요청에 적절한 동적 컨텐츠를 만들어서 제공해야 할 때, 웹서버만을 이용한다면 결과값을 모두 미리 만들어 놓고 서비스 해야 한다. 이렇게 모든 요청에 대해 미리 만들어놓고 제공하기에는 자원이 부족하다.
⇒ 요청에 적절한 데이터를 DB에서 가져와 비즈니스 로직에 따라 결과를 동적으로 제공할 수 있다.
Web Server, WAS 분리의 장점
- 서버 부하 방지
- WAS는 DB 조회나 다양한 로직을 처리하기 때문에 응답 속도가 상대적으로 느리다. 하지만 정적 컨텐츠는 Web Server에서 빠르게 클라이언트에게 제공할 수 있다.
- 만약 WAS에서 정적 컨텐츠까지 처리한다면 부하가 커지게 되고, 동적 컨텐츠 요청의 응답은 더 느려질 것이다.
- 보안 강화
- SSL에 대한 암복호화 처리에 Web Server를 사용
- 여러 대의 WAS 연결 가능
- 여러 대의 서버를 사용하는 서비스의 경우 Web Server와 WAS를 분리해 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
(앞 단에 Web Server를 두고, 특정 WAS에 오류가 발생하면 Web Server에서 해당 WAS를 사용하지 못하도록 사용자 요청을 차단한 뒤 WAS를 재시작하여 해결)
- 여러 대의 서버를 사용하는 서비스의 경우 Web Server와 WAS를 분리해 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
- 여러 웹 어플리케이션 서비스 가능
- 하나의 서버에서 PHP 애플리케이션, JAVA 애플리케이션을 함께 사용할 수 있다.
4. 동작 흐름

- 클라이언트가 웹서버에게 요청을 보낸다.
- 웹 서버는 요청을 분석해 정적 컨텐츠를 처리할지, 동적 컨텐츠를 처리할지 결정한다.
- 해당 요청이 동적인 페이지나 로직 처리를 필요로 하면, 요청을 WAS에게 전달한다.
- WAS는 요청과 관련된 서블릿을 메모리에 로드하고, web.xml 또는 어노테이션을 참조하여 서블릿을 찾아 스레드를 생성한다.
- WAS는 요청 및 응답 정보를 담은 HttpServletRequest, HttpServletResponse 객체를 생성해 서블릿에 전달한다.
(생성된 스레드는 서블릿의service()
를 호출하고,service()
는 HTTP method에 따라doGet()
또는doPost()
를 호출한다) doGet()
또는doPost()
는 로직을 처리한 후, 동적 페이지를 생성해 결과를 HttpServletResponse 객체에 담는다.- WAS는 HttpServletResponse 객체에 담긴 결과를 HttpResponse 형태로 바꿔 웹 서버로 전달한다.
- WAS는 생성된 스레드를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.
- 웹 서버는 클라이언트에게 결과를 전달한다.
참고자료 😃
https://doozi316.github.io/web/2020/09/13/WEB26/
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Web/Web Server와 WAS의 차이.md
https://code-lab1.tistory.com/199
https://javacpro.tistory.com/43
'Web' 카테고리의 다른 글
[Web] Cookie & Session & Token 인증 (0) | 2024.04.06 |
---|---|
[Web] 웹 스토리지 (localStorage & sessionStorage) (0) | 2024.04.02 |
[Web] RESTful API (0) | 2024.03.10 |
[Web] LocalStorage & SessionStorage 개념 및 사용법 (0) | 2024.03.10 |
[Web] REFERER 체크 & CSRF 방어 (0) | 2024.03.09 |