1. WAS와 WS
1.1 웹 서버 (Web Server)
웹 : 인터넷을 기반으로한 정보 공유 서비스
서버 : 클라이언트에게 정보나 서비스를 제공하는 컴퓨터 시스템
웹 서버 : 인터넷 기반 클라이언트에게 웹 서비스를 제공하는 컴퓨터 시스템
특징
- 정적 컨텐츠(HTML, CSS, JS, 이미지, 파일 등)를 제공하는 서버를 웹 서버라고한다.
- HTML은 프로그래밍 언어가 아니기 때문에 비즈니스 로직을 수행하지 못함.
- 만약 동적 요청을 받으면 WAS에 요청을 넘긴후 처리한 결과를 받아 클라이언트에 전달.
- ex) apache, NginX
1.2 웹 어플리케이션 서버 (Web Application Server)
어플리케이션 : DB를 읽기, 파일 읽기 쓰기 등 비즈니스 로직이 포함된것을 의미
웹 어플리케이션 서버 : 웹 어플리케이션을 실행 시켜 기능을 수행하고 그 결과를 웹 서버에 전달하는 미들웨어
특징
- php나 spring 같은 언어들을 사용해 동적인 페이지를 생성 할 수 있는 서버
- DB 조회나 비즈니스 로직이 있는 동적 컨텐츠 제공
- 웹 서버 + 웹 컨테이너 (컨테이너 : jsp, servlet을 실행 할 수있는 소프트웨어)
- ex) Tomcat
Apache Tomact 이라고 하는 이유
Apache는 웹 서버이고 Tomcat은 웹 어플리케이션 서버 인데 Apache Tomacat은?
- 2008년에 릴리즈된 Tomcat 5.5 부터는 정적 컨텐츠 처리 기능이 추가됨
- 순수 Apache를 사용하는것과 성능 차이가 없다.
- Tomcat이 Apache 기능을 포함해 Apache Tomcat이라고 한다.
1.3 WAS 와 WS를 구분하는 이유
1) Web Server 가 필요한 이유
클라이언트(웹 브라우저)에 이미지 파일(정적 파일)을 보내는 과정을 생각해보자
- 이미지 파일 같은 정적인 파일은 HTML이 클라이언트로 보내질때 함께 보내는것이 아니다.
- 클라이언트가 HTML을 먼저 받고 그에 맞게 이미지를 다시 서버로 요청하는것이다.
- 웹 서버를 통해 정적인 파일들을 앞단에서 빠르게 보내줄수있다.
- 웹 서버에서 정적 컨텐츠 처리만 하도록 기능을 분배해 서버의 부담을 줄일 수 있다.
위 그림으로 본다면
img 요청이 왔을때 NginX의 static 폴더에서 img를 저장해 보내주면 WAS인 Spring까지 가지않고 파일을 보낼수있어 WAS의 부담을 줄일수있다.
2) WAS 가 필요한 이유
- 웹 페이지는 정적 컨텐츠와 동적 컨텐츠 모두 존재
- 사용자의 요청에 맞게 동적 컨텐츠를 만들어서 제공해야한다.
- 만약 WS만을 이용한다면 사용자가 원하는 요청에대한 모든 결과값을 미리 만들어야한다.
- WAS를 통해 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞게 결과를 만들어 제공.
위 그림으로 본다면
https://www.abc.com/api/users
로 클라이언트가 접근
- 동적 요청이므로 NginX는 WAS에 요청을 넘김
- WAS에서는 백엔드 언어인 spring을 이용해 DB를 조회후 비즈니스 로직 실행
- 결과값을 NginX에 넘김
- NginX가 클라이언트에게 결과를 전달
3) WAS가 WS기능을 모두 수행하면 되지않나?

위 그림을 보면 이런생각이 들수있다.
Apache Tomcat 처럼 WAS 안에 WS가 들어있는데 WAS로 WS를 대체하면 되지않나?
결론 부터 말하면 대체하지 않는것이좋다. 그 이유는 성능과 보안에 연관이 있다.
1. 기능을 분리하여 서버 부하 방지
- WAS는 DB 조회나 다양한 비즈니스 로직을 처리하는데 집중
- 단순 정적 컨텐츠는 WS에서 빠르게 제공하는것이 좋다.
- WAS는 기본적으로 동적 컨텐츠를 제공하기위해 존재하는 서버
- 정적 컨텐츠 요청까지 WAS가 처리시 부하가 커지게됨
- 동적 컨텐츠의 처리가 지연된다.
2. 물리적으로 분리해 보안 강화
- SSL에 대한 암복호화 처리에 웹 서버를 사용
SSL이란?
- Secure Sockets Layer
- TLS과 같은뜻 (SSl의 새로운 버전이 TLS)
- 클라이언트/서버 응용 프로그램이 네트워크로 통신을 하는 과정에서 도청, 간섭, 위조를 방지하기 위해서 설계되었다.
- HTTPS가 SSL 프로토콜을 기반이다. (자세한 내용은 추후에 작성해보겠다.)
3. 여러대의 WAS 연결 가능
- Load Balancing(부하 분산)을 위해서 웹 서버를 사용
- 대용량 웹 어플리케이션의 경우(여러 서버 사용) WS와 WAS를 분리하여 무중단 운영을 위한 장애 극복을 할 수 있다.
4. 여러 웹 어플리케이션 서비스 가능
ex) 한 서버에서 Java Application과 PHP Application 사용 가능
5. 접근 허용 IP 관리와 여러 서버의 세션관리에도 효율적
4) 요약
- 자원 이용의 효율성
- 무중단 장애 극복
- 배포 및 유지보수의 편의성
위와 같은 이유로 WS와 WAS를 분리한다.