Nginx 와 Tomcat 의 차이는 무엇일까?
웹 서버는 정적 리소스를 빠르게 처리할 뿐만 아니라, 리버스 프록시의 역할을 하여 로드 밸런싱 같은 기능을 통해 시스템의 보안성, 확장성, 안정성을 책임지는 핵심 인프라 요소이다.
특징
- HTTP 기반으로 동작
- 정적 리소스 제공, 기타 부가기능 제공
- 정적(파일) HTML, CSS, JS, 이미지, 영상
- 대표적으로 Nginx, Apache 가 존재
표면적인 기능으로 보았을 때 웹 서버는 단순히 정적 파일만 관리하는 것으로 볼 수 있지만, 아래와 같은 기능들을 더 지원한다.
- 분산 처리를 위한 로드 밸런싱
- 자주 요청 하는 데이터를 최적화 하는 정적 파일 캐싱
- WAS 의 응답 IP 를 숨기는 리버스 프록시
- HTTP 기반으로 동작
- 웹 서버가 갖고 있는 기능을 전부 포함 (정적 리소스 제공 기능)
- 프로그램 코드를 실행해서 애플리케이션 로직 수행
- 동적 HTML, HTTP API
- 서블릿, JSP, 스프링 MVC 같은 것들이 WAS 에서 동작
- 대표적으로 톰캣, Jetty 가 존재
웹 서버와 웹 어플리케이션 서버의 차이 는 무엇일까?
- 웹 서버는 정적 리소스 제공, WAS 는 어플리케이션 로직 수행
- 웹 서버도 프로그램을 실행하는 기능을 포함하기도 함
- 웹 어플리케이션 서버도 웹 서버의 기능을 제공 함
- WAS 는 어플리케이션 코드를 실행하는 데 더 특화 되어있음
웹 시스템을 구성할 때 WAS 와 DB 만 두어도 구성이 가능하다. 단, WAS 가 정적 파일 제공도 해야하고 어플리케이션 로직도 실행 해야 하기 때문에 너무 많은 역할을 담당하게 되며 서버 과부하에 우려가 된다. 또한, WAS 서버에 장애가 발생하더라도 정적 파일을 제공할 수 없기 때문에 현재 에러가 난 상황인지 노출이 불가능하다.
위와 같은 단점을 보완하기 위해 WEB 서버, WAS, DB 로 시스템을 구성한다.
각자의 역할을 분담하게 되며 아래와 같은 역할을 맡는다.
- 정적 리소스는 웹 서버가 처리
- 어플리케이션 로직 같은 동적인 처리는 WAS 가 처리하여, 중요한 어플리케이션 로직 처리 전담
효율적인 리소스 관리가 가능하다.
- 정적 리소스가 많이 쓰이면 웹 서버 증설
- 어플리케이션 로직의 리소스가 많이 사용 되면 WAS 서버 증설
정적 리소스만 제공하는 웹 서버는 무거운 작업을 수행하는 것이 거의 없기 때문에 잘 안죽는다. 하지만, 어플리케이션 로직이 동작하는 WAS 는 많은 리소스를 사용하기 때문에 잘 죽는다. 이러한 WAS 서버 또는 DB 에 장애가 발생할 시 오류 화면을 제공할 수 있다.
Summary
- 웹 서버는 정적 리소스 제공, WAS 는 어플리케이션 로직 수행
- 웹 서버와 WAS 를 같이 두는 구성을 사용하면, WAS 는 비즈니스 로직에 중점을 둘 수 있으며 정적 파일을 서빙하는 리소스가 많이 드는 경우 웹 서버를 증설하고, 어플리케이션 로직이 리소스를 많이 사용하면 WAS 를 증설하는 전략을 선택할 수 있다.
- WAS 장애 발생 시 웹 서버가 장애 페이지를 제공하여 응답 없음이 아닌 현재 에러가 발생했다는 페이지를 사용자에게 노출할 수 있다.