결론부터 말 하자면, 아파치와 NginX란 모두 웹 서버이다. 그렇다면 웹 서버란 무엇일까?
위키백과의 힘을 빌려보자면 아래의 뜻을 가지고 있다
웹 서버 : 웹브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML문서와 같은 웹페이지를 반환하는 컴퓨터 프로그램
웹 서버 (하드웨어): 위 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터
즉 간단히 하면 우리가 현재 보는 velog페이지, naver등의 웹페이지를 우리가 볼 수 있게 브라우저(크롬, 사파리, 파이어폭스등..)에게 http문서를 전달해주는 기능이 있는 컴퓨터 프로그램을 뜻한다.
웹 사이트가 서비스 되기 위해 필요한 것들에는 브라우저가 읽을 수 있는 파일들이 필요하다. html, css, js, 이미지 등 데이터를 서버에서 사용자의 컴퓨터로 보내줄 수 있어야 한다. 이러한 파일들을 우리에게 보내주기 위해 기존에 서버 컴퓨터에 저장되어 있게 된다. 이 서버의 특정 위치에 이 파일들을 넣어준 후 이 폴더를 외부에서 접근할 수 있도록 개방해서 지정된 주소로 접속하면 이 파일들을 받아갈 수 있도록 하는 것이 웹서버의 기본적인 기능이다.
하지만 위와 같이 파일들을 일반적으로 받아가서 보여주기만 하면 정적 웹이 되게 된다.
정적 웹이란 변화가 없는 데이터들, 고정된 html, css, js로 제공되는 변하지 않는 완제품이라 생각하면된다.
하지만 실상적인 웹페이지는 누가 댓글을 달거나, 게시글이 새롭게 추가되거나, db에 저장되어 있는 데이터들이 변하거나 하는 경우가 대부분이다. 그렇기 때문에 아파치와 php, MySQL을 연동시켜 동적인 웹사이트를 제공하기도 한다.
웹(W)과 서버(S) 사이에 애플리케이션(A)가 들어가게 된 것이다. 즉 웹 서버처럼 단순히 파일을 가져다주고 제공해주는 것이 아니라, 중간에 뭔가 프로그래밍 된 걸 더 한다는 뜻이다. 즉 동적사이트를 전문적으로 처리해주는 것이며 대표적으로 톰캣이 있다.
톰캣만으로도 파일을 클라이언트에게 제공해줄 수도 있다. 그렇다면 톰캣만 쓰면되지 왜 아파치와 톰캣을 같이 쓸까? 이유는 아래와 같다.
과거에는 아파치의 정적 리소스 제공이 빨랐다. 하지만 최근에는 톰캣의 정적 리소스 제공도 빨라져서 큰 차이는 없어졌다.
웹서버에서 reverse proxy를 이용하기 때문에 보안상의 이점이 존재한다.
리버스 프록시란 : 내부 어플리케이션과 외부 클라이언트 사이에 자리잡아서 클라이언트의 요청을 적절한 서버로 보내주는 역할을 한다. 많은 어플리케이션들이 자체적으로 가지지 못한 로드 밸런싱, 보안, 가속화 기능을 가지고 있다.
리버스 프록시의 로드 밸런싱 기능으로 톰캣서버를 여러개 돌리기 때문에 하나의 WAS서버가 고장나거나, 업데이틀 해줘야 할 때, 한 서버가 종료되더라도 다른 서버가 돌아가기 때문에 끊김없이 서비스를 제공받을 수 있다.
리버스 프록시의 캐싱기능을 이용하여, 리소스들을 빠르게 제공해 줄 수 있다.