[현문hyun답] Apache, Nginx, Tomcat 이란 뭐고 차이점은 뭘까?
서론
웹서버를 구축하면서 Apache와 Nginx, 그리고 Tomcat 중에 선택해야 했다. 스프링 부트를 배우면서 Tomcat이 내장되어 있다는 건 알았지만 Tomcat이 뭔지는 몰랐고, 참여하고 있는 프로젝트에서는 Apache와 Tomcat을 사용하다가 Nginx와 Tomcat으로 바꿨다고 한다. 이 프로젝트에서는 내가 서버를 관리한 게 아니었고, 애초에 웹서버에 대한 지식이 없었기 때문에 그냥 넘어갔는데 이번에 웹서버를 구축하면서 이 세 가지의 차이점을 알아보게 되었다. 가장 궁금했던 건, 세 가지 전부 웹서버라고 하면서 왜 두 가지를 같이 쓰는지였다.
Web Server(웹서버)
먼저 웹서버에 대해 먼저 알아보자. 위키백과에서는 다음과 같이 설명하고 있다.
웹 서버(web server)는 다음의 두 가지 뜻 가운데 하나이다.
- 웹 서버 : 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램
- 웹 서버 (하드웨어) : 위에 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터
(https://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%84%9C%EB%B2%84)
간단하게 말해서, 웹 서버는 웹 페이지를 클라이언트에게 전달해주는 기능을 하는 컴퓨터 프로그램이다. 이때 클라이언트는 보통의 경우 웹브라우저(크롬, 네이버웨일, 파이어폭스 등)을 뜻한다.
스프링 부트를 실행시키면 http://localhost:8080에서 확인할 수 있는데, 내장 톰캣은 8080포트에서 내가 만든 웹을 내가 사용하는 브라우저에서 확인할 수 있게 해주는 것이었다.
Apache(아파치)
Apache는 소프트웨어 재단의 이름으로, 흔히 말하는 아파치는 정확하게 말하자면 Apache HTTP Server(아파치 HTTP 서버)이다. 무료로 운용할 수 있으며 2017년 10월 기준 실제로 동작하고 있는 웹사이트들의 웹 서버 소프트웨어 중 1위를 차지하고 있는 인기있는 웹서버다. 정적인 데이터를 처리하는데 사용된다.
Tomcat(톰캣)
Tomcat 역시 풀네임은 Apache Tomcat(아파치 톰캣)으로, Apache에서 개발한 Web Application Server, WAS(웹 애플리케이션 서버)이다. 웹서버를 이야기할 때 같이 나오지만 Tomcat은 WAS로, 동적인 데이터를 처리한다는 차이점이 있다. Tomcat은 웹서버와 연동하여 실행할 수 있는 자바 환경을 제공한다. Tomcat만으로도 웹 시스템을 구성할 수 있지만 안정성을 위해서 웹서버와 연동하여 사용한다.
Nginx(엔진엑스)
Nginx는 아파치 HTTP 서버와 같은 웹 서버이다. 가벼움과 높은 성능을 목표로 하고 있으며 웹 서버, 리버스 프록시, 그리고 메일 프록시 기능을 가지고 있다.
Apache vs Nginx
Apache는 스레드/프로세스 기반의 구조, Nginx는 비동기 이벤트 기반의 구조이다. Apache는 http 요청이 올때마다 스레드나 프로세스를 새로 만들기 때문에 많은 수의 사용자가 동시 접속을 할 수록 CPU 부하가 높아진다. 이는, 동시에 연결된 커넥션이 만 개 이상이 되면 하드웨어 성능과 관계없이 서버가 더 이상의 커넥션을 형성하지 못하는, C10K 문제를 발생시킨다. 만 개까지 도달하지 않더라도 사용자가 늘어날 때마다 쓰레드가 생성되므로 자원 낭비가 심하다. 이에 비해 Nginx는 비동기 이벤트 기반의 구조로 더 적은 리소스로 처리가 가능하다.