1. 웹 서버, 웹 애플리케이션 서버
웹이라는건 다 HTTP를 기반으로 통신을 한다.
인터넷을 통해서 서버에 접속하고 서버에서는 HTML을 만들어서 클라이언트에 내려준다
클라이언트에서 서버로 데이터를 전송, 응답 할때
HTTP라는 프로토콜을 통해서 데이터를 전송, 응답 받는다.
심지어 서버간에 데이터를 주고받을때도 HTTP를 주로 사용한다.
웹서버는 HTTP를 기반으로 동작하는 서버다.
정적 리소스, 기타 부가기능을 전송한다
정적리소스 : HTML, CSS, JS, 이미지, 영상
대표적으로 NGINX랑 APACHE라는 웹 서버가 있다.
웹 애플리케이션 서버는 보통 WAS라 한다
얘도 HTTP를 기반으로 동작한다.
큰 차이는 프로그램 코드를 실행해서 애플리케이션 로직을 실행할 수 있단것이다.
동적인 HTML, HTTP API(JSON)도 다 WAS를 통해서 제공한다.
대표적으로 TOMCAT, JETTY, UNDERTOW를 WAS라 한다.
웹 서버, 웹 애플리케이션 서버(WAS) 차이
- 웹 서버는 정적 리소스(파일)만, WAS는 애플리케이션 로직까지 실행할 수 있다.
- 사실 둘의 용어도 경계도 모호하다
- - 웹 서버도 플러그인 설치해서 프로그램 실행하는 기능을 포함할 수 있다.
- - 웹 애플리케이션 서버도 웹 서버의 기능을 제공한다.
- 자바는 서블릿 컨테이너 기능을 제공하면 WAS라고 한다.
- - (이것도 요즘 애매해지는게 서블릿 없이 자바 코드를 실행하는 서버 프레임워크도 있음..)
- WAS는 애플리케이션 코드를 실행하는데 더 특화되어있고 웹서버는 정적리소스를 실행하는데 특화되어 있다.
WAS는 클라이언트 요청이오면 애플리케이션 로직도 실행할 수 있고 CSS, JS, 이미지도 다 제공 가능함
이렇게 보니까 WAS가 너무 많은 일을 담당하는데? 란 생각이든다.
맞다. WAS 하나가지고 운영하면 이런 위험이있다.
WAS가 너무 많은걸 담당하면 서버 과부화의 우려도 있다.
그리고 사실 HTML, CSS, JS, 이미지 같은 경우에는 사실 값이 싸다.
시스템적으로 보면 파일하나 냅두고 잘 서빙하면 되서 단순하다.
그치만 애플리케이션 로직은 비싸다.
여러 의미가 있는데 정적리소스 제공하는건 그냥 파일 있는거 불러다가 내려 주면되지만
애플리케이션 로직은 데이터베이스 뒤져야하고 필요하면 다른 서버 호출해야하고
비지니스 로직이 들어가 있기 때문에 복잡하다.
이런 값비싼 비지니스 로직이 정적리소스 때문에 수행하기 어려우면 안된다.
WAS는 그리고 생각보다 잘 죽는다 ㅎ
개발자가 개발하는거기 때문에 문제가 있을수 있다.
WAS가 장애가 나버리면 웹브라우저에서 접근조차 안되는거다.
오류화면을 흔히 볼텐데 WAS에 정적리소스도 다 넣어두면 오류화면 조차도 노출이 불가능해진다.
WAS만 가지고 시스템을 구축하기엔 부담이 있다.
그래서 일반적으론 이런 형태의 웹 시스템을 구축한다.
정적리소스를 앞에둔다 (WEB Server)
정적인 리소스는 여기서 다 쳐리하고
동적인게 필요한 URL은 뒤로 넘겨서 WAS가 처리하고
DB뒤져서 데이터 찾고 내려준다.
이렇게하면 WAS는 중요한 애플리케이션 로직에 집중할 수 있는 장점이있다.
웹서버는 단순 정적리소스 관리, 필요하면 WAS 호출하는것만 전담해서 업무를 분담할 수 있다.
그리고 또 이렇게 하면 좋은점은 시스템 리소스를 효율적으로 쓸 수 있다.
정적리소스가 많이 필요하면 web server만 증가 시키면되고
애플리케이션 로직만 많이 호출되면 거기에 맞게 was 서버만 늘리면 된다.
(물론 실제론 이것보다 더 복잡함)
Web Server는 잘 안죽는다
단순 파일만 읽어다가 클라이언트한테 제공만 하면 되니까
그런데 WAS는 잘 죽는다
개발자가 로직을 잘못짤수도 있고 DB가 죽을수도 있고...대부분의 장애는 WAS에서 난다.
WAS가 죽더라도 고객 요청을 WAS를 던져도 Web Server는 오류화면을 띄울수 있다.
고객에게 오류화면을 보여줄수 있다.