Server

[Server] 웹 서버, 웹 애플리케이션 서버

허몽구 2023. 5. 11. 00:46

Apache나 Tomcat에 대해서 많이 들어는 봤지만 웹 서버와 웹 애플리케이션에 대해 정확히 알지 못 하는 것 같아 적어보는 포스팅이다.

 

우선 웹 서버와 웹 애플리케이션 서버에 대해 알아보기 전에, 정적과 동적에 대해 확실하게 알고 넘어가야 한다.

- 정적 웹 페이지
HTML, CSS, JS, 이미지 등 컴퓨터에 저장되어 있는 파일, 즉 웹 서비스에서 사용하기 위해 미리 서버에 저장해둔 파일을 말한다.
파일 자체가 변경되지 않고 항상 동일한 페이지를 반환한다.
웹 서버에서 제공한다.

- 동적 웹  페이지 
들어온 요청에 맞게 동적으로 만들어진 파일을 말한다.
데이터베이스나 비지니스 로직 등을 활용해서 만들어진 것이다.
웹 애플리케이션 서버에서 제공한다. 

 

그렇다면 정적 페이지에서 사용하는 웹 서버와 동적 페이지에서 사용하는 웹 애플리케이션 서버가 뭘까?

 

1. 웹 서버

클라이언트가 어떤 페이지를 요청하면, HTTP를 기반으로 정적 리소스와 기타 부가 기능을 제공하는 서버이다. 

정적(파일) HTML, CSS, JS, 이미지, 영상같은 파일을 두면 서버가 파일들을 서빙해준다.

웹 서버에 요청하면 HTTP 프로토콜로 응답한다.

웹 서버의 종류에는 NGINX, Apache Server 등이 있다. 

 

2. 웹 애플리케이션 서버(Web Application Server - WAS)

웹 서버가 제공하는 기능을 모두 포함하며, 애플리케이션 로직(비지니스 로직)이 수행 가능한 HTTP 기반의 서버이다.

주로 DB 서버와 같이 수행되며 동적 HTML, REST API(JSON), Servlet, JSP, 스프링 MVC까지 수행할 수 있다.

웹 애플리케이션 서버의 종류에는 Tomcat, Jetty, Undertow 등이 있다.

 

둘의 차이가 명확하게 보인다.

웹 서버는 정적 리소스(파일)을 실행하는 서버이고, 웹 애플리케이션 서버(이하 WAS)는 동적인 애플리케이션 로직을 실행하는 서버이다.

위에서 WAS가 웹 서버에서 제공하는 기능을 모두 포함한다고 했는데, 그렇다면 WAS만 쓰면 되는 것이 아닌가?

조금 더 생각해보면 WAS는 DB와 애플리케이션 로직을 처리해야 하는 서버이기 때문에 정적인 컨텐츠까지 모두 실행하려 한다면, WAS의 역할이 너무 막중해진다. 서버 과부하가 우려되는 것이다.

또한 정적 리소스 파일때문에 오히려 중요하고 무거운 애플리케이션 로직을 실행하지 못 할 수도 있다.

또한 WAS에서 장애가 발생한다면, 오류 발생을 알리는 정적 HTML조차 화면에 노출이 불가능해진다.

그렇기 때문에 웹 시스템을 WAS와 DB로만 구성하는 것이 아니라 웹 서버(WEB), WAS, DB로 구성하는 것이 좋다.

 

3. 웹 시스템 구성 - WEB, WAS, DB

웹 서버를 맨 앞에 두고 정적 리소스를 모두 처리한다.

웹 서버는 애플리케이션 로직같은 동적인 처리가 필요하면 WAS에 요청을 위임한다

이렇게 웹 시스템을 3가지로 나눈다면, 효율적으로 리소스를 관리할 수 있다.

만약 정적 리소스가 많이 사용되면 웹 서버만 증가시키면 되고, 애플리케이션 리소스가 많이 사용되면 WAS를 증가시키면 되기 때문이다. 

또한, WAS나 DB에 장애가 발생했을 때 웹 서버가 화면에 오류 발생 HTML을 노출할 수 있다는 장점이 있다.

WAS만 사용했을 때의 단점을 커버할 수 있는 것이다.

 

이상적인 웹 서비스 아키텍처는 다음과 같다.

https://pxd-fed-blog.web.app/webserver-was/

 

결론적으로 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 Web Server, WAS를 각자 사용한다.

 

웹 서버와 웹 애플리케이션 서버는 백엔드 개발자가 필수로 알아야 하는 부분이라고 생각한다.