웹 서버 vs 웹 어플리케이션 서버 vs CGI 프로그램: 차이 쉽게 이해하기

웹 (Web): HTTP 기반

웹은 HTTP(하이퍼텍스트 전송 프로토콜) 기반으로 작동합니다. HTTP 메시지는 웹 상에서 클라이언트와 서버 간에 데이터를 교환하는데 사용되는 형식화된 텍스트입니다.  HTML, 문서파일, 이미지, 오디오, 영상, XML, JSON 등 다양한 데이터유형을 클라이언트와 서버 사이에서 안전하게 전송할 수 있습니다.

 

웹 서버 (Web Server)

  • 웹 서버는 클라이언트(웹 브라우저)로부터 HTTP 요청을 받아들이고, 정적인 웹 리소스를 제공하는 역할을 합니다. 
  • 정적 리소스: HTML 파일, 이미지, CSS 파일 등
  • 웹 서버 예: Apache, Nginx 등

 

웹 어플리케이션 서버 (Web Application Server):

  • 웹 어플리케이션 서버는 웹 서버의 확장된 개념으로, 동적인 웹 어플리케이션을 처리하기 위한 기능을 제공합니다. 
  • 웹 어플리케이션 서버는 데이터베이스 연결, 비즈니스 로직 처리, 보안, 트랜잭션 관리 등의 기능을 지원하여 동적인 컨텐츠를 생성하고 제공합니다. 
  • WAS 예: Tomcat, Jetty 등

 

서버 구성

출처: https://kkyu-coder.tistory.com/168

 

  • WAS가 정적인 리소스와 동적인 처리를 전부 할 수 있지만 이렇게되면 WAS의 부담이 매우 커지게 되고 안정성도 줄어들게 됩니다.
  • 때문에 주로 위와 같이 정적 리소스는 WS가 처리하고 어플리케이션 로직 같은 동적인 처리는 WAS에 넘기는 방식으로 서버를 구성하여 WAS의 부담을 줄여줍니다.
  • 로직이 동작하는 WAS에 비해 정적 리소스만 제공하는 WS는 잘 죽지 않기 때문에, WAS에 오류가 발생하더라도 WS를 통해 지정한 화면을 보여줄 수가 있습니다.
  • 정적인 리소스나 어플리케이션 리소스의 양에 따라 유연하게 대처(서버 증설/축)하여 효율적인 리소스 관리가 가능해집니다.  

 

CGI 프로그램 (Common Gateway Interface):

CGI는 웹 서버와 외부 프로그램 간의 상호 작용을 가능하게 하는 프로토콜 또는 방법론입니다. 

사용자가 직접 아이콘을 더블 클릭하거나 터미널을 통해 실행시키는 프로그램을 일반적으로 `어플리케이션`이라고 합니다. 반면에 사용자가 웹 서버를통해 간접적으로 실행시키는 프로그램을 `웹 어플리케이션`이라고 합니다. 

 

 

웹 어플리케이션을 실행시키기 위해선 웹 브라우저가 웹 서버에게 데이터를 요청하고 받습니다. 이때 데이터를 주고받는 규칙을 `CGI`라고 합니다. 그리고 웹 서버에 의해 실행되며 CGI 규칙에 따라서 웹 서버와 데이터를 주고받도록 작성된 프로그램을 `CGI 프로그램`이라고 합니다.     

 

 

Java로 만든 CGI 프로그램을 `Servlet`이라 부릅니다. 또한 Servlet이 다른 CGI 프로그램과 다른 점은, 웹 서버와 직접 데이터를 주고받지 않고 가운데 다른 프로그램을 둔다는 점인데 이것이 바로 `서블릿 컨테이너`입니다.

서블릿 컨테이너는 Servlet의 생명주기를 관리하는 프로그램입니다. 서블릿 컨테이너가 Servlet을 대신하여 CGI 규칙에 따라 웹 서버와 데이터를 주고받기 때문에 개발자는 CGI 규칙에 대해 몰라도되고 서블릿 컨테이너와 서블릿 사이의 규칙만 알면됩니다.

 

즉, 개발자는 Servlet 규칙에 따라 CGI 프로그램을 만들고 배포하면 됩니다. 

 

Servlet과 서블릿 컨테이너에 대한 좀  자세한 설명은 다음 포스팅에서 하도록 하겠습니다.