server: 서비스를 제공하는 쪽
client: 서비스를 제공받는 쪽
web server: 어떤 컴퓨터로 하여금 서버 역할을 하도록 도와주는 소프트웨어. 대표적으로 Apache, NGINX, IIS(windows 용)
웹서버란, 웹 사이트를 제공하는 서버(로 만들어주는 소프트웨어)
클라이언트가 서버에 지정된 url을 요청하면, 서버 컴퓨터의 외부에서 접속 가능하도록 개방해놓은 특정 디렉토리를 통해 파일을 클라이언트에게 제공하도록 하는 것이 웹서버의 역할
동적인 웹사이트 제공하는 방법(apache). APM(apache+php+mysql)
=> 아파치에 php를 해석할 수 있는 모듈을 설치하여, mysql의 데이터를 가져와 php에 정의된 방식을 해석하여 동적 웹사이트를 제공
nginx로도 위와 유사한 방법으로 동적인 웹사이트를 제공할 수 있다.
tomcat: web application server(와스 WAS)로, java와 jsp로 만든 웹 혹은 api application을 실행할 때 사용. 동적 사이트를 전문적으로 처리
apache, nginx 는 php와 같은 가벼운 동적 리소스는 모듈을 통해 해석할 수 있지만, 스프링 같은 복잡한 프레임워크의 경우는 tomcat 같은 WAS가 필요하다.
WAS에는 대표적으로 tomcat, jetty, undertow
apache 없이 tomcat 만으로도 웹사이트 제공이 가능. 클라이언트에게 동적 웹사이트를 직접 전달할 수도 있고, 정적 웹사이트를 건내주는 것도 가능하다.
하지만 그런 방식으로는 잘 사용하지 않는다.
apache나 nginx를 앞단에 두고 뒷단에서 was가 처리하도록 하는 이유: revers proxy, load balancing
forward proxy: 사용자가 웹사이트에 접속할 때, 사용자의 ip를 감추기 위해 중간에 프록시를 통해 서버와 통신하는 방법
revers proxy: 사용자에게 서버의 정보를 감춤. 서버 내부적으로 파일이 어디에 있는지, 서비스 포트는 몇 번 포트를 사용하는지 등... 요청이 들어오면 프록시가 알아서 포트를 연결하고 서버의 파일들을 제공
load balancing: WAS 소프트웨어들은 단일로 사용하지 않고, 여러 서버를 두는 경우가 많다.
- 지속성, 웹사이트의 동적 부분 업데이트를 하기 위해 서버를 재시작할 때, 단일 서버는 서버가 재가동 되는 동안에 서비스가 중단된다.
- 부하분산, 성능적인 측면에서 하나의 서버가 모든 부하를 감당하는 것보다, 여러 서버가 부하를 나눠 받는 게 더 좋다.
- 캐싱, reverse proxy cache를 말한다. 서버에 자주, 반복적으로 요청될 만한 데이터들을 캐시로 만들어 놓고 요청이 들어오면 바로 응답해준다.
- WAS health check, 정상작동하는지 점검
- 외 web server는 서비스를 안정적으로 제공하기 위한 다양한 기능을 제공한다.
Apache와 nginx는 근본적으로 작동 방식에 있어 차이가 있다.
apache는 다중 프로세스(MPM Multi Process Module) 방식으로 처리, 요청이 올 때마다 한 프로세스로 처리하는 방식(mpm_prefork)과 하나의 프로세스 안에서 스레드를 생성하는 방식이 있다. = 컴퓨터 자원을 많이 소모함
nginx는 event-driven 방식으로 처리, 하나의 프로세스를 두고 여러 요청을 동시에 처리하기 때문에 성능이 좋다. apache도 이를 보완하기 위해 event-driven 방식을 도입
두 작동 방식의 차이 때문에 nginx는 성능과 가벼움을 추구하는 애플리케이션에서 사용하고, apache는 다양하고 검증된 기능들을 필요로하는 애플리케이션에서 사용된다.