Web Server
웹 서버는 클라이언트가 요청한 정적인 컨텐츠(HTML, jpeg, css 등)를 HTTP 프로토콜을 통하여 제공해주는 서버로, 정적 컨텐츠 제공이 가장 큰 역할이다.
동적인 요청이 들어왔을 경우엔 해당 요청을 웹 서버에선 처리할 수 없기 때문에 WAS 에게 보내주고, WAS 에서 처리한 결과를 클라이언트에게 전달해주는 역할도 한다.
대표적인 예로는 Nginx, Apach Server 등이 있다.
WAS(Web Application Server)
웹 서버로부터 오는 동적인 요청을 처리하는 서버를 말한다.
WAS = Web Server + Web Container
WAS 는 웹 서버와 웹 컨테이너가 합쳐진 형태로서, 웹 서버 단독으로는 처리할 수 없는 DB 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다.
대표적인 예로는 Tomcat, JBoss, Jeus 등이 있다.
Web Server 가 필요한 이유
클라이언트(웹 브라우저)에 이미지 파일(정적 컨텐츠)을 보내는 과정을 생각해보자.
- 이미지 파일과 같은 정적인 파일들은 웹 문서(HTML 문서)가 클라이언트로 보내질 때 함께 가는 것이 아니다.
- 클라이언트는 HTML 문서를 먼저 받고, 그에 맞게 필요한 이미지 파일들을 다시 서버로 요청한 후에야 이미지 파일을 받아온다.
웹 서버를 통해 정적인 파일들을 Application Server 까지 가지 않고 앞단에서 보내줄 수 있다.
즉, 웹 서버에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.
WAS 가 필요한 이유
웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다.
웹 서버만 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어놓고 서비스를 해야 한다. 하지만 이렇게 수행하기엔 자원이 절대적으로 부족하다.
따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때그때 결과를 만들어 제공함으로써 자원을 효율적으로 사용할 수 있다.
Web Service Architecture
웹 서버를 WAS 앞에 두고, 필요한 WAS 들을 웹 서버에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다.
1. 기능을 분리하여 서버 부하 방지
WAS 는 DB 조회나 다양한 로직을 처리하니라 바쁘기 때문에 단순한 정적 컨텐츠는 Web Server에서 빠르게 클라이언트에 제공하는 것이 좋다.
WAS 는 기본적으로 정적 컨텐츠를 제공하기 위해 존재하는 서버이다. 만약 정적 컨텐츠 요청까지 WAS 가 처리한다면 정적 데이터 처리로 인해 부하가 커지게 되고, 동적 컨텐츠의 처리가 지연됨에 따라 수행 속도가 느려진다. 즉, 이로 인해 페이지 노출 시간이 늘어나게 될 것이다.
2. 물리적으로 분리하여 보안 강화
SSL에 대한 암복호화 처리에 Web Server 를 사용한다.
3. 여러대의 WAS 연결 가능
Load Balancing 을 위해서 웹 서버 사용
대용량 웹 어플리케이션의 경우(여러개의 서버 사용) Web Server 와 WAS 를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
예를 들어, 앞 단의 Web Server 에서 오류가 발생한 WAS 를 이용하지 못하도록 한 후 WAS 를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다.
4. 기타
접근 허용 IP 관리, 2대 이상의 서버에서의 세션 관리 등도 Web Server 에서 처리하면 효율적이다.
즉, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 Web Server 와 WAS 를 분리한다.
Web Server 를 WAS 앞에 두고 필요한 WAS 들을 Web Server 에 플러그인 형태로 설정하면 더육 효율적인 분산 처리가 가능하다.
References
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html