[웹 어플리케이션 서버에 대한 심화 이해 ] → [J2EE] Container, Servlet
웹 서버 ↔ 웹 어플리케이션 서버웹 서버웹 서버의 한계웹 어플리케이션 서버(WAS = 웹 서버 + 웹 컨테이너)WAS 가 Web Server의 기능도 모두 수행하면 되지 않을까? → 자원 이용의 효율성, 장애 극복, 배포 및 유지보수의 편의성을 위해 둘 다 사용Tomcat
웹 서버 ↔ 웹 어플리케이션 서버
- 정적 컨텐츠 ↔ 동적 컨텐츠
웹 서버


- Http, Https 요청을 받아서 응답을 주는 역할을 함. 정적컨텐츠를(Static content) 주로 제공함
- 웹 서버를 앞단에 배치하여 proxy 같은 기능을 하기도 함. 브라우저와 다이렉트로 연결(WAS 앞단에)
- 클라이언트가 리퀘스트를 주면 웹 서버에서 받아서 WAS로 전달(proxy)
- 두 번째 firewall 안에 있는 애들은 데이터 보안이 중요하기 때문에 (인증, 인가, 고객정보) 보호를 해주는 것
- 웹 서버(아파치, nginx 같은)를 플러그인 기능이 막강한 것들이 있어서 앞에다 두고 was를 뒤에 두는 식으로 배치를 많이 함
웹 서버의 한계
- 동적 컨텐츠 반환 불가 : 정적인 컨텐츠를 반환하기에, 페이지에 현재 날짜, 시간 같은 동적인 내용을 포함할 수가 없음
- 서버에 데이터 저장 불가 : user가 form data를 보냈을 때, 그 data를 파일이나 db에 저장하거나 사용하여 페이지 생성하기 위해서는 새로운 app이 필요함 → CGI Program & Servlets
- CGI는 매 리퀘스트 마다 process를 만듬!! heavy하다
웹 어플리케이션 서버(WAS = 웹 서버 + 웹 컨테이너)

- 비즈니스 로직을 담고 있는, 동적인 컨텐츠를 제공하기 위해 만들어짐
- 자바에서는 Web Container를 서블릿 컨테이너라고 부름. WAS를 통해 JSP, Servlet을 구동시킴. Web Container안에서 DB에 연동, 데이터 만들고 해서 JSON으로 전달
- WAS는 별도 서버(프로세스)로 구동됨. 오픈소스 : Tomcat, Jetty
- WAS는 .war로 빌드 & 배포 하고 WAS가 프로젝트 로드해서 Web Container 구동 & 코드 동작 → 그러나 요즘은 Tomcat 같은 경우 embedded Tomcat, embedded servlet을 활용하여 jar 파일로 배포하는 것이 일반적
- 핵심 : Tomcat에다가 우리가 만든 프로젝트를 로드
- WAS의 예 : Tomcat, JBoss, Jeus, Web Sphere
WAS 가 Web Server의 기능도 모두 수행하면 되지 않을까? → 자원 이용의 효율성, 장애 극복, 배포 및 유지보수의 편의성을 위해 둘 다 사용
- 기능을 분리하여 서버 부하 방지
- WAS는 다양한 로직 처리하느라 바쁘기에 단순한 정적 컨텐츠는 Web Server에서 빠르게 클라이언트에 제공하는 것이 좋음
- 정적 컨텐츠 까지 WAS가 처리하면 정적 데이터 처리로 인한 부하가 커지게 됨
- 물리적으로 분리하여 보안 강화
- SSL에 대한 암복호화 처리에서 Web Server를 사용
- 여러 대의 WAS를 연결 가능
- Load Balancing을 위해 Web Server를 사용
- fail over(장애 극복), fail back 처리에 유리함
- 대용량 웹 어플리케이션의 경우 Web Server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응가능
- 여러 웹 어플리케이션 서비스 가능
- 예를 들어, 하나의 서버에서 PHP Application과 Java Application 을 함께 사용하는 경우
Tomcat
- 아파치는 HTTP Server의 역할이고, 톰캣은 서블릿 엔진으로써의 역할을 함
- 아파치 톰캣(Apache Tomcat)은 아파치 소프트웨어 재단에서 개발한 서블릿 컨테이너(또는 웹 컨테이너)만 있는 웹 애플리케이션 서버이다.
- 톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바서버 페이지(JSP)와 자바 서블릿을 실행할 수 있는 환경을 제공하고 있다. 톰캣은 관리툴을 통해 설정을 변경할 수 있지만, XML 파일을 편집하여 설정할 수도 있다. 그리고, 톰캣은 HTTP 서버도 자체 내장하기도 한다.
- 아파치 톰캣에 내장된 웹 서버로만 웹 시스템을 구성할 수 있지만, 대규모의 사용자가 사용하는 시스템을 구축하려면 웹 서버와 연동하는 안정적인 시스템을 구축해야 한다
- high performance의 web server를 의미하는 것은 아님, web server의 전형적인 특징들도 포함하고 있지 않음