
클라이언트 쪽에 비즈니스 로직이 많을 경우, 클라이언트 관리(배포 등)로 인해 비용이 많이 발생하는 문제 발생.
비즈니스 로직을 클라이언트와 DBMS사이의 미들웨어 서버에서 동작하도록 함으로써 클라이언트는 입출력만 담당하도록 함.
WAS는 일종의 미들웨어로, 웹 클라이언트의 요청 중 웹 어플리케이션이 동작(동적 정보(프로그램이 동작해서 얻은 결과)를 processing)하도록 지원하는 목적을 갖는다.
또 dynamic processing은 DBMS와 자주 상호작용하는 경우가 많다. 이는 WAS는 DBMS 바로 앞단에 위치하는 이유 중 하나이다.
위의 그림처럼, 일반적으로 WAS라는 하나의 프로세스안에 쓰레드 형태로 web server와 web container가 분리되어 존재한다. (기본 web server를 내장한다. *참고1)
그래서 웹 서버단에서 WAS만으로 웹 서비스를 제공할수도 있다. 아니면 다른 웹 서버를 두고 연동시킬 수도 있다.
하지만 현업에서는 대부분 WAS와 웹서버를 분리하며, WAS앞단에 웹서버를 둔다. 웹 어플리케이션의 규모가 커져서 WAS의 장애가능성이 높아질 경우, 장애극복기능이 필요하기 때문이다.
웹서버와 WAS를 분리할경우 얻게되는 장애극복기능은 아래와 같다.
웹 서버는 상대적으로 WAS보다 간단한 구조이다. 트래픽이 높은 대용량 웹 어플리케이션의 경우, 웹 서버의 수가 여러 대일 수 있다.
트래픽이 몰려서 WAS에 오류가 발생할경우, WAS를 재부팅해야하는 경우가 있다. 이 때 앞단의 웹 서버에서 WAS를 이용하지 못하게 막고, WAS를 재부팅한다면 서비스를 계속해서 유지할 수 있다.
WAS의 기본기능 3가지는 다음과 같다.
1. 프로그램 실행환경과 DB접속 기능을 제공한다.
2. 여러 개의 트랜잭션을 관리한다.
3. 업무를 처리하는 비즈니스 로직을 수행한다.
간단한 dynamic processing의 경우, 웹 서버와 dynamic processing를 담당하는 다른 프로세스 간에 cgi통신하여 처리할 수 있다.
ex. WAS: Tomcat(서블릿 컨테이너만 있는 웹 애플리케이션 서버), Web server: Apache, NginX
*참고1
웹 서버의 프로세스로서 인터프리터를 상주시킴으로써, CGI로부터 프로그램을 호출해 부하를 줄임으로써 성능을 개선한 자바 서블릿이나 mod perl, mod php, FastCGI 등도 공개되었다.
데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위.
간단하게 말해서 SELECT, INSERT, DELETE, UPDATE과 같은 질의어(SQL)를 이용하여 데이터베이스에 접근하는 것을 의미한다.
트랜잭션은 질의어 한문장이 아니다. 트랜잭션의 단위는 사람이 정하는 기준에 따라 질의어 명령문들의 묶음으로 결정된다.
공용 게이트웨이 인터페이스(영어: Common Gateway Interface; CGI)는 웹 서버 상에서 사용자 프로그램을 동작시키기 위한 조합이다. 존재하는 많은 웹 서버 프로그램은 CGI의 기능을 이용할 수 있다.
가장 큰 차이점은 CGI Program의 경우 해당 Program을 수행하기 위한 프로세스를 생성한다.
그러나 WAS의 경우 WAS 프로세스의 모듈형태로 존재하기에 쓰레드를 생성한다.
사실 WAS내에서 Container와 Web Server간의 통신이 CGI규약을 따른다면 이것 또한 CGI를 따르는 통신이라고 볼 수 있겠다. 결국 동적 페이지의 생성을 위한 프로세스간의 통신이냐, 쓰레드간의 통신이냐가 차이점 인 것 같다.
참고자료
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://velog.io/@unyoi/%EC%9D%B8%ED%94%84%EB%9D%BC-%EB%BF%8C%EC%8B%9C%EA%B8%B01-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-%EA%B0%9C%EB%85%90%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
https://ko.wikipedia.org/wiki/%EA%B3%B5%EC%9A%A9_%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ginameee&logNo=220868560433
https://mommoo.tistory.com/62
https://popo015.tistory.com/112