평소 nginx라는 용어는 많이 봤지만 정작 그 뜻은 몰라서
직접 유튜브에서 찾아보았다.
그 내용을 정리하면 다음과 같다.
웹 서버 :
(e.g. 아파치, nginx, IIS)
대신 이는 정적웹이다.
그 안의 내용들이 바뀔일이 없는 경우에만 이렇게 사용
그러면 동적웹은???
항상 같은 내용이 뜨는 웹사이트가 아니다.
사용자가 접속할 때마다 새로워진다.
옛날에는 Apache + PHP + MySQL = APM으로 동적 PHP 웹 사이트 제공
간혹 톰캣이나 Node.js, Django 내장 서버 등과 클라이언트 사이에서 중간 관리자 역할도 수행
요즘은 스프링 부트에 톰캣이 내장되기 때문에 직접 접하는 일은 거의 없다.
자바랑 JSP로 만든 웹 또는 API 어플리케이션을 실행할 때 톰캣같은 WAS(Web Application Server) 사용된다.
단순히 serving하는 것이 아니라 전문적으로 동적 사이트 처리하는 용도이다.
아파치나 nginx같은 웹서버는 PHP같은 종류는 처리 가능하나,
스프링으로 넘어가면 톰캣같은 전문적인 어플리케이션(WAS) 요구
자바 바이트코드로 컴파일되는 언어들에 쓰이는 것은 톰캣, Jetty..
스프링으로 코딩한 웹앱을 war 파일로 빌드하면
그 안에 .class 파일, jsp, 이미지, css, javascript 파일 등이 압축되어 있다.
톰캣을 다운받으면 여러 폴더들과 파일들이 들어있는 하나의 폴더로 되어있는데, 그 중 특정 폴더에 위의 war 파일을 넣고 명령어를 실행하면 스프링서비스가 톰캣을 사용해서 돌아간다.
요즘에는 스프링을 톰캣이 들어있는 jar파일로 빌드해서 배포한다.
JAVA 외에는 WAS를 명확히 구분하지 않는다.
사실 톰캣 같은 WAS도 아파치 없이 동적인 웹을 서빙할 수 있으나, 정적 리소스도 서빙 가능하다.
그리고 톰캣의 정적 리소스 제공도 빨라진 편
하지만 톰캣 뿐만 아니라 Node.js 서버 어플리케이션이나 닷넷 등 WAS를 뒷단에 두고, 아파치나 nginx같은 WebServer를 앞단에 두어 어플리케이션 서비스를 하는 데는 이유가 있다.
아파치와 nginx는 정적 또는 가벼운 동적 리소스를 제공하는 역할 외에도 다양한 역할을 수행한다.
WAS와 웹 서버가 겹치는 역할도 있지만 각자가 특화된 기능을 활용해 보안, 운영을 성공적으로 수행
작동방식에 큰 차이가 존재한다.
아파치는 MPM(Multi Process Module) 방식으로 일을 한다.
프로세스를 새로 생성하거나(mpm_prefork), 프로세스 안에서 스레드를 생성하는 방식(mpm_worker) 으로 일을 한다.
이는 지나친 context switching으로 컴퓨터 자원을 많이 소비한다.
반면 nginx의 event driven 방식은 일을 한 줄로 세워서, 손님이 오는대로 차례차례 처리한다.
이를 보안하기 위해 아파치에도 이벤트 위주 처리 방식이 도입되었다.