서버의 구분
Web Server : 클라이언트의 HTTP요청을 받아 정적 파일(.html, .css, .js, .png, .jpeg ...)을 제공하는 서버
WAS(Web Application Server) : 요청에 대한 동적 처리 후 응답하는 서버
* 클라이언트라 함은 브라우저, 웹 크롤러 가 있다.
Web Server 의 기능
1. 정적인 컨텐츠 제공 (WAS를 거치지 않고 자원을 바로 제공)
2. 클라이언트의 요청을 WAS에 전달 -> WAS의 처리 결과를 다시 받아 응답
* Apache Server, Nginx, IIS 등이 있다.
WAS(Web Application Server) 의 기능
1. DB 조회 등 다양한 로직을 처리하여 동적인 컨텐츠를 제공하는 서버
2. Web Server의 역할이었던 정적 컨텐츠 제공도 할 수 있고, 성능상 큰 차이가 없다.
* Node, Spring, Tomcat, Flask 등이 있다.
Web Server 가 필요한 이유
이미지와 같은 정적 파일들은 WAS를 거치지 않고 바로 전달하면 되기 때문에, 두개를 분리하여 비교적 무거운 일을 해내는 WAS 의 부담을 줄여줄 수 있다.
WAS 가 필요한 이유
웹 컨텐츠에는 정적, 동적인 요소가 모두 있다.
사용자의 요청에 맞게 적절한 동적 컨텐츠를 제공해야 할 때 필요하다.
이때 Web Server 만을 사용한다면 사용자의 요청에 대한 결과 값을 미리 만들어놔야 하는데, 그렇기에는 자원이 절대적으로 부족하다.
WAS가 모두 수행 하면 되지 않을까?
1. 기능을 분리하여 서버 부하 방지
- WAS는 데이터 베이스를 조회하거나, 더 다양한 로직을 처리하는 역할이 있기 때문에, 단순히 정적 컨텐츠는 Web Server 에 위임하면 좋다.
- WAS의 처리 속도가 오래걸린다면 단순히 정적컨텐츠를 응답하는 것에도 지연이 생기고, 결국에는 페이지 노출시간이 늘어나게 된다.
2. 여러대의 WAS 를 연결 할 수 있다.
- Load Balancing 을 위해서 사용할 수 있다.
- SSL 인증을 Web Server 에서 처리하면 뒷단의 WAS는 몇개, 어떤 종류가 와도 함께 효과를 누릴 수 있다.
3. fail over, fail back 을 할 수 있다.
4. 물리적인 분리로 보안을 강화할 수 있다.
또한 캐시서버를 앞단에 붙이거나, 상황에 맞게 web server 나 WAS 를 유연하게 늘릴 수 있는 등의 장점이 있다.
Apache vs Nginx
아파치는 다중처리 모듈 방식으로 처리하기 때문에 클라이언트의 요청마다 thread가 생성되는 구조여서 동시 접속 요청시 효율성 측면에서 취약한 반면, Nginx 는 Event-driven 방식을 수행하기에 고정된 프로세스를 생성하고 내부적으로 비동기처리를 하여 효율적으로 작업을 처리한다.
따라서 Nginx의 경우 동시 접속 요청이 많아도, process, thread 생성 비용이 들지 않기 때문에 유리한 측면이 있다.
이전까지는 "WAS 만 사용하면 되지" 라는 생각이었고, 웹 서버를 굳이 사용해야하는 이유를 찾고있었습니다.
하지만 이미 웹 서버가 해야할 일을 다른 곳에 분담하고 있었습니다.
S3, Lambda, EB 등의 서비스를 이용한다는 것 자체가 WAS 의 부하를 줄이기 위한 것들이었고,
직접 이런 인프라를 구축하려보니 웹 서버가 필요했습니다.
요즘 데브옵스에 관심이 부쩍 많이 생기면서 자동으로 해주던 것들의 원리파악이 꽤나 재밌는 것 같습니다