개요
회사에서 서비스 개발 중 django server의 앞단에 nginx를 두자고 회의중에 말이 나왔었는데, 이 둘의 차이점을 좀 더 명확하게 정리하고파 포스팅 합니다.
포스팅 내용은 Youtube 우아한 테크 세미나의 알리님의 Web Server vs WAS를 참고했습니다.
Web Server란? (nginx, apache ..)
웹 브라우저(클라이언트)로 부터 HTTP 요청을 받아 HTML 문서와 같은 정적인 컨텐츠
를 제공하는 프로그램
정적 컨텐츠?
- 요청 인자값에 상관없이 달라지지 않는 컨텐츠(html, css, image ..)
- 어느 사용자 요청이든 항상 동일한 컨텐츠
Web Server의 기능
- 클라이언트로부터 HTTP 요청을 받을 수 있다.
- 정적 컨텐츠(html, css, image ..)를 제공할 수 있다.
- 동적 컨텐츠 요청 시 Web Application Server로 요청을 전달할 수 있다.
Web Application Server란? (spring, django, flask ..)
DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공
하기 위해 만들어진 프로그램
동적 컨텐츠?
- 요청 인자에 따라 바뀔 수 있는 컨텐츠
Web Application Server의 기능
- 클라이언트로 부터 HTTP 요청을 받을 수 있다. (* 대부분의 WAS는 Web Server 내장!!)
- 요청에 맞는 정적 컨텐츠(html, css, image)를 제공할 수 있다.
- DB조회나 다양한 로직 처리를 통해 동적 컨텐츠를 제공할 수 있다.
Web Server를 함께 사용하면 좋은 점은?
Web Application Server는 대부분 Web Server를 내장하고 있으므로, WAS만 활용해도 모든 요청을 처리할 수 있는게 아닐까? 라고 생각 할 수 있다.
왜 Web Server를 사용하는지 알아보자.
- 책임 분할을 통한 서버 부하 방지
- 정적 컨텐츠는 Web Server, 동적 컨텐츠는 Web Application Server 에서 처리함으로서 서버의 부하를 방지 할 수 있다.
- 여러 대의 WAS를 로드 밸런싱
로드 밸런싱 : 서버에 가해지는 부하를 분산 해주는 기능
- 서버의 트래픽이 증가하여 더이상 요청을 받아들일 수 없다면 서버를 증설하여 이를 해결 할 수 있을것이다. 이 때 Web Server에서 여러 서버에 요청을 분산 시킬 수 있다.
- 여러 대의 WAS Health Check
- 서버가 어떠한 오류로 인하여 요청을 받아들일 수 없는 상태가 된다면 오류가 발생한 서버로는 요청에 대해서 올바른 응답을 보내줄 수 없을 것이다. 이 때 Web Server 에서 WAS의 상태를 확인하여 오류가 발생한 WAS에는 요청을 전달하지 않도록 할 수 있다.
- 보안
- 리버스 프록시 기능을 사용하여 외부에 서버의 IP를 노출시키지 않을 수 있다.
정리
서비스의 확장성, 안정성을 고려한다면 앞 단에 Web Server를 두는것이 유리할 수 있다.