TIL

[TIL | 2024-09-03] Web Server, Web Application Server

yaho!! 2024. 9. 3. 11:09

서론

웹 서버와 웹 애플리케이션의 개념을 알아보았고 이 둘의 차이점을 공부해보았다.

본론

 

Web Sever


웹 서버는 클라이언트로부터 HTTP 요청을 받아드리며, 해당 요청에 따라 HTML 파일, 이미지, CSS 등과 같이 정적 리소스를 제공하는 소프트웨어 또는 하드웨어 시스템을 말한다.

 

소프트웨어로서의 웹서버

소프트웨어로서의 웹서버는 HTTP/HTTPS 프로토콜을 통해 클라이언트로부터 들어오는 요청을 처리하고 요청된 정적 파일(예: HTML, CSS, 이미지 파일 등)을 제공하거나, 요청을 다른 프로그램(WAS 등) 으로 전달해 동적 콘텐츠를 생성하는 데 중개 역할을 한다. 대표적인 소프트웨어 웹 서버로는 Apache, Nginx, Microsoft IIS 등이 있다.

 

하드웨어로서의 웹서버

하드웨어로서의 웹서버는 소프트웨어로서의 웹 서버가 실제로 실행되는 컴퓨터를 의미한다. 소프트웨어로서의 웹서버는 이 하드웨어 서버에서 실행된다. 즉 물리적인 장치를 의미한다. 

 

 

Web Application Server


Web Application Server는 줄여서 WAS라고 표현하며 웹 서버의 기능을 포함하면서도 추가적으로 동적인 리소스를 처리하고 웹 애플리케이션 로직을 실행하기 위해 만들어진  서버이다.

 

WAS는 주로 동적인 리소스를 처리하기 위해 설계되었으며 복잡한 비즈니스 로직을 처리하고 데이터베이스와 상호작용 하는 등 웹 애플리케이션의 핵심 기능을 담당한다.

 

대표적으로 Tomcat이 있다.

 

Web Server는 동적 리소스를 처리하지 못할까?


왜 WAS만을 사용하여 동적 리소스를 처리하는지 궁금하였다. 웹 서버는 동적 리소스를 처리하지 못하는것일까? 생각하고 여러 정보를 찾아보며 정리를 해보았고  결론적으로 웹 서버도 동적 리소스를 처리할 수 있다는 것을 알았다.

 

CGI (Common GateWay InterFace)

초기 웹 서버들은 CGI를 통해 동적 리소스를 제공하였다고 한다. CGI는 웹 서버와 외부 프로그램 간의 통신을 위한 표준 방법으로 CGI를 통해 웹 서버가 외부 프로그램을 호출하여 동적으로 컨텐츠를 생성하고 그 결과를 웹서버에 반환하고 다시 웹서버가 클라이언트에게 반환하는 방법으로 동적 리소스를 처리할 수 있었다고 한다.

 

웹 서버가 CGI 방식을 사용해 동적 리소스를 처리할 수 있었지만, 이 방식에는 몇 가지 문제가 있다. 첫째, 사용자가 요청을 할 때마다 새로운 작업(프로세스)을 시작해야 해서, 많은 요청이 들어오면 서버가 과부하에 걸릴 수 있었고. CGI 스크립트는 특정 프로그래밍 언어나 환경에 맞춰 작성되어야 했기 때문에, 코드 관리나 유지보수가 어려웠다는 단점이 존재하였다.

 

결론적으로 웹 서버도 동적 리소스를 처리할 수 있지만 성능 저하와 관리의 어려움 때문에 사용하지 않는다는것을 알 수 있었고. 대신 동적 리소스 처리 하기 위해 설계된 WAS를 사용한다는것을 알 수 있었다.

 

WAS만 사용해도 되지 않을까?


WAS는 웹 서버의 기능을 포함하고 있기 때문에 모든 작업을 처리할 수 있을 텐데, 굳이 웹 서버도 같이 사용하는 이유가 궁금해졌다.

 

먼저 웹 서버는 정적 리소스를 매우 효율적으로 처리한다. HTML 파일 CSS, 이미지 파일 등과 같은 정적 리소스는 WAS를 거치지 않고 바로 웹서버에서 처리되므로 응답속도가 매우 빠르다. 반면 WAS는 동적인 리소스를 처리하기 위해 설계되었다고 했었다. 따라서 동적인 리소스와 복잡한 비즈니스 로직을 처리하는데 최적화되어 있고 WAS가 이러한 작업을 집중하도록 하는것이 효율적이다.

 

따라서 내가 만드는 작은 프로젝트 같은 경우에는 WAS만을 사용하여 웹 애플리케이션을 만들 수 있다. 하지만 대규모 프로젝트나 기업의 애플리케이션에서는 웹 서버와 WAS를 분리함으로써 정적 리소스는 웹 서버에서 처리하고 동적 리소스나 복잡한 비즈니스 로직은 WAS에서 처리하는 방식으로 설계를 하여 서버의 부하를 분산시키기 위해 이 둘을 분리하는 방식을 사용한다.

 

결론

배울게 복리처럼 빠르게 늘어난다..