웹 서버(WS)와 웹 어플리케이션 서버(WAS)
웹 서버(WS)와 WAS는 서버를 구성하는 기초적인 개념이지만 혼동하기 쉽다.
웹 서버와 WAS의 차이는?
Static Page & Dynamic Page
정적 페이지(Static Page)
•
요청한 자원의 경로와 일치하는 서버에 미리 저장된 파일이 그대로 전달되는 웹페이지를 말한다.
•
항상 동일한 페이지를 반환한다.
•
ex) Image, HTML, CSS, JS 파일과 같이 하드웨어에 저장되어 있는 파일들
동적 페이지 (Dynamic Page)
•
클라이언트의 요청 인자에 따라 스크립트에 의해 동적으로 생성 후, 반환되는 페이지를 의미한다.
Web Server
•
웹 서버란 HTTP 프로토콜을 기반으로 클라이언트의 요청을 받아 정적 컨텐츠를 제공하는 서버이다.
•
정적 컨텐츠란 위에서 설명한 것과 같이 단순 HTML 문서, CSS, 이미지, 파일 등 즉시 응답 가능한 컨텐츠이다.
•
웹 서버가 정적 컨텐츠가 아닌 동적 컨텐츠를 요청 받으면 WAS에 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달하는 역할도 한다.
•
웹 서버는 Apache, Nginx, IIS, WebtoB 등이 있다.
WAS (Web Application Server)
•
WAS란 DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버이다.
•
HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어로서, 주로 데이터베이스 서버와 같이 수행된다.
•
WAS는 Web Server + Web Container 이다.
•
WAS 별로 다양한 종류의 컨테이너를 내장하고 있으며, 이들 중 서블릿에 관련된 기능을 모아 놓은 것을 서블릿 컨테이너라 부른다.
*Container란 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말한다.
*JSP는 자바 언어를 기반으로 하는 Server Side 스크립트 언어이다. HTML에 자바 코드를 넣어 동적인 웹을 생성할 수 있도록 하는 웹 어플리케이션 도구이다.
*Servlet은 WAS의 서블릿 컨테이너 내에서 관리되며, 연산을 담당한다. JSP로 작성된 프로그램은 Servlet으로 변환된다.
*Web Container는 자바 서블릿과 상호작용하는 WAS의 구성요소이다. 서블릿의 생명 주기를 관리(초기화, 메소드 호출, 가비지 컬렉션)하고, 서블릿과 웹서버의 통신과 멀티스레딩을 지원하며 선언적 보안 관리가 가능하게 한다.
*자바가 아닌 PHP, Perl, Python 등의 언어는 Apache를 통해 CGI(Common Gateway Interface)를 적용시켜 컨테이너의 역할을 수행할 수 있다.
*WAS에는 Tomcat, WebLogic, WebSphere, Jeus, JBoss 등이 있다.
*Apache Tomcat은 WAS(Tomcat)가 웹 서버(Apache) 기능을 포함하고 있기 때문에, Apache Tomcat이라고 부르기도 하고, 실제로 WAS 앞에 웹 서버를 두어서 Apache Tomcat 이라고 부르기도 한다.
Web Server와 WAS를 분리하는 이유
대부분의 WAS는 정적인 컨텐츠를 제공하기 때문에 웹 서버를 포함하는 개념이고, 웹 서버 없이 존재할 수 있다.
그럼에도 웹 서버와 WAS를 분리하여 사용하는 이유는 다음과 같다.
1. 서버 부하 방지
•
WAS와 웹 서버는 분리하여 서버의 부하를 방지해야 한다.
•
WAS는 DB 조회나 다양한 로직을 처리하고, 단순한 정적 컨텐츠는 웹 서버에서 처리해줘야 한다. 만약 정적 컨텐츠까지 WAS가 처리한다면 부하가 커지고 수행 속도가 느려질 것이다.
2. 보안 강화
•
SSL에 대한 암호화, 복호화 처리에 웹 서버를 사용 가능
•
클라이언트와 연결하는 포트가 직접 WAS에 연결이 되어 있다면 중요한 설정 파일들이 노출될 수 있기 때문에 WAS 설정 파일을 외부에 노출시키지 않는다.
•
웹 서버와 WAS에 접근하는 포트가 다르기 때문에, WAS에 들어오는 포트에는 방화벽을 쳐서 보안을 강화할 수도 있다.
3. 여러 대의 WAS 연결 가능
•
로드 밸런싱 을 위해 웹 서버를 사용할 수 있다.
•
여러 개의 서버를 사용하는 대용량 웹 어플리케이션의 경우 웹 서버와 WAS를 분리하여 무중단 운영을 위한 장애 극복 에 쉽게 대응할 수 있다.
4. 여러 웹 어플리케이션 서비스 가능
하나의 서버에서 PHP, JAVA 애플리케이션을 함께 사용할 수 있다.
Web Service Architecture
다양한 구졸르 가질 수 있는데
1) Client - 웹 서버 - DB
2) Client - WAS - DB
3) Client - 웹 서버 - WAS - DB