1. 웹 서버와 WAS( Web Application Server )
- 웹 서버는 정적인 컨텐츠( html, css, js )를 제공하는 서버입니다.
- ex) Apache, Nginx
- WAS는 DB 조회나, 어떤 로직을 처리해야 하는 동적인 컨텐츠를 제공하는 서버입니다.
- ex) Tomcat, Jeus
즉, 웹 서버와 WAS의 차이는 어떤 타입의 컨텐츠를 제공하느냐의 차이입니다.
웹 서버와 WAS는 각각 독립적으로 존재할 수 있습니다.
대부분의 WAS는 정적인 컨텐츠를 제공해주고 있기 때문에, 웹 서버 없이 WAS만 존재할 수 있습니다.
그래서 WAS는 웹 서버를 포함하는 개념이라고 생각해도 될 것 같습니다.
WAS 자체로 웹 서버의 역할을 수행하기 때문에 무조건적으로 웹 서버를 앞단에 두어야 할 이유는 없습니다.
그런데 일반적으로 웹 서버를 WAS 앞 단에 배치하게 되는데, WAS만 사용하면 될 것이지 왜 웹 서버를 앞단에 배치하는 구조를 사용할까요?
2. 웹 서버 사용 이유
1) WAS가 해야 할 일의 부담을 줄이기 위해서 입니다.
WAS 앞에 웹 서버를 둬서 웹 서버에서는 정적인 문서만 처리하도록 하고, WAS는 애플리케이션의 로직만 수행하도록 기능을 분배하여 서버의 부담을 줄이기 위한 것입니다.
위의 그림처럼 WAS앞에 웹 서버를 둠으로써 서버의 부담을 줄일 수 있습니다.
웹 서버에서는 플러그인 형태로 WAS를 연결하면 일 처리를 나눌 수 있겠죠.
2) WAS의 환경설정 파일을 외부에 노출시키지 않도록 하기 위해서입니다.
클라이언트와 연결하는 포트가 직접 WAS에 연결이 되어 있다면 중요한 설정 파일들이 노출될 수 있기 때문에 WAS 설정 파일을 외부에 노출시키지 않도록 하기 위해서 웹 서버를 앞단에 배치시킵니다.
웹 서버와 WAS에 접근하는 포트가 다르기 때문에, WAS에 들어오는 포트에는 방화벽을 쳐서 보안을 강화할 수도 있습니다.
3. 아파치( Apache )와 CGI, 그리고 톰캣( Tomcat )
자바 웹 애플리케이션을 개발 할 때 주로 사용하는 조합이 아파치와 톰캣일 것입니다.
그러면 다른 언어들은 톰캣 같은 WAS가 없을까요?
아파치에는 CGI( Common Gateway Interface )라는 것을 제공합니다.
CGI는 이름 그대로 인터페이스로서, 웹 서버 상에서 프로그램을 동작시키기 위한 방법을 정의한 프로그램( 또는 스크립트 )입니다.
즉 PHP, Perl, Python 등의 언어들은 CGI를 구현해놓았기 때문에, 아파치에서 다양한 언어로 짜여진 각 프로그램을 실행할 수 있습니다.
예를 들어 아파치에 PHP 모듈을 설치했을 경우, 요청이 왔을 때 아파치는 HTTTP 헤더를 분석하고 파싱하여 PHP로 파라미터를 넘겨줍니다.
그러면 PHP에서는 파라미터를 받아 응답 할 HTML 문서를 만들어서 아파치에 전달하죠.
HTML 문서를 전달 받은 아파치는 CSS, JS, img 등 정적인 자원들과 함께 브라우저로 반환합니다.
그런데 자바는 CGI로 구현되어 있지 않습니다.
자바 자체가 무겁고, Common 라이브러리와 JEE라는 플랫폼이 존재하기 때문에 아파치에서 굳이 CGI를 제공하지 않은 것 같습니다.
그렇기 때문에 톰캣은 Default Servlet을 통해 정적인 파일을 제공해주기 때문에 웹 서버의 역할을 할 수 있는 것입니다.
( 그럼에도 웹 서버를 두는 이유는 앞서 언급을 했습니다. )
이상으로 웹 서버와 WAS의 차이점에 대해 알아보았습니다.