Web Server와 Web Application Server(WAS)
Web Server란?
웹 브라우저(클라이언트)로부터 HTTP 요청을 받아
HTML 문서와 같은 정적 컨텐츠를 제공하는 프로그램
정적 컨텐츠
요청 인자 값에 상관없이 달라지지 않는 컨텐츠(html, css, image 등)
어느 사용자 요청이든 항상 동일한 컨텐츠를 말합니다.
Web Server의 기능
클라이언트로부터 HTTP 요청을 받을 수 있습니다.
1. 정적 컨텐츠 요청 시
정적 컨텐츠(html, jpeg, css등)을 제공할 수 있습니다.
2. 동적 컨텐츠 요청 시
Web Application Server(WAS)로 전달하여
WAS가 처리한 결과를 클라이언트에 전달합니다.
Web Application Server(WAS)란?
DB 조회나 다양한 로직(비지니스 로직 등) 처리를 요구하는
동적인 컨텐츠를 제공하기 위해 만들어진 프로그램
동적 컨텐츠
요청 인자에 따라 바뀔 수 있는 컨텐츠입니다.
WAS의 기능
클라이언트로부터 HTTP 요청을 받을 수 있습니다.
대부분의 WAS는 Web Server를 내장하고 있습니다.
요청에 맞는 정적 컨텐츠를 제공할 수 있습니다.
DB 조회나 다양한 로직 처리를 통해 동적 컨텐츠를 제공할 수 있습니다.
WAS 서버는 Web 서버를 내장하고 있는데
왜 Web Server를 따로 사용하여야 할까요?
Web Server를 같이 사용했을 때의 장점
1. 책임 분할을 통한 서버 부하 방지
- 정적 컨텐츠는 Web server, 동적 컨텐츠는 WAS가 담당
Nginx 설정
2. 여러 대의 WAS 로드밸런싱
- WAS가 처리해야 하는 요청을 여러 WAS가 나누어서 처리할 수 있도록 설정
Nginx 설정
3. 여러 대의 WAS Health check
Health check란?
서버에 주기적으로 HTTP 요청을 보내 서버의 상태를 확인하는것 입니다.
ex) 특정 url 요청에 200 응답이 오는가?
Fails : 만약 200 응답이 오지 않는다면 서버를 비정상이라고 인지하게 되고,
Passes : 복구되어 요청이 성공하면 서버를 정상으로 인지하여 요청을 전달합니다.
Interval : health check를 통해 서버 상태를 확인하는 요청을 날리는 주기(default : 5초)
Fails : 아래의 경우 3회 연속 실패하면 서버가 비정상이라고 인지(default : 1회)
Passes : 서버가 다시 복구되어 요청이 2번 연속 성공하면 서버가 정상으로 인지(default : 1회)
4. 보안
WAS는 DB관련 권한을 가질 수 있기 때문에 외부에 서버를 노출하면
보안상 문제가 발생할 수 있습니다.
리버스 프록시를 통해 실제 서버를 외부에 노출하지 않을 수 있습니다.
서비스 이용자의 증가(실제 적용)
이용자가 증가하면 WAS 1대로 역부족인 상황이 발생합니다.
그래서 WAS 1대를 추가하여 단순히
서버 부하분산을 사용자에게 맡긴다고 가정해봅시다.
예를들어 공지사항에 서울에 거주중인 회원들은 그대로 접속하고
이외 다른지역 사람들은 다른 아이피로 접속해달라고 남기는것입니다.
하지만, 사용자는 서버 부하에 관심이 없습니다.
결론적으로 제대로 서버 부하가 분산되지 않습니다.
그래서 Web Server를 사용하여야 합니다.
여기서 사용자가 더욱더 증가하게 된다면?
동적 컨텐츠 처리량이 많아집니다.
즉 WAS 한대로는 역부족한 상황이 발생합니다.
로드밸런싱을 통해 2대의 WAS를 동시에 운영
Web Server를 활용하여 로드밸런싱을 사용합니다.
두곳의 WAS서버로 부하 분산이 되어 안정적으로
서비스를 운영할 수 있게됩니다.
갑자기 WAS 1대에 문제가 발생한다면?
문제가 생긴 WAS로 요청이 계속 전달되어 부분적 서비스 오류가 발생합니다.
Health check를 통해 서버에 이상이 생기면,
WAS에 대한 연결을 자동으로 차단하도록 설정합니다.
Health check의 fails 설정만큼 정상 응답이 오지 않으면
비정상 서버로 간주하게 됩니다.
즉, 사용자는 서비스에 대한 이상을 감지하지 못하고
오류가 발생한 WAS에 대해서만 연결을 끊는 설정을 할 수 있습니다.
문제가 생겼던 서버가 복구된다면?
Health check passes 설정만큼 정상 응답이 온다면,
해당 WAS 서버와 연결하여 다시 요청을 정상적으로 전달합니다.
정리
결론적으로 WAS만으로도 서비스는 가능하지만
서비스의 확장성, 안정성을 고려한다면 앞 단에
Web Server를 두는 것이 유리하다고 볼 수 있습니다.
출처
테코톡 유튜브 https://www.youtube.com/watch?v=mcnJcjbfjrs&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=60