웹사이트를 제공하는 서버
웹 브라우저 클라이언트로부터 html요청을 받아 정적컨텐츠 html js css 를 제공하는 컴퓨터 프로그램이다.
아파치랑 nginx가 대표적인 웹서버 프로그램이다.
점유율을 보면 최근에 nginx의 점유율이 크게 오른것을 볼 수있다.
자바랑 jsp 웹 또는 api 어플리케이션을 사용할 때 이 톰캣을 사용한다.
웹과 서버사이에 어플리케이션이란 말이 들어가서 WAS(Web Application Server)이다
동적사이트를 전문적으로 처리해준다.
현재는 스프링부트에 톰캣이 내장되어있다.
스프링으로 코딩한 웹앱을 war 파일로 빌드하면 그 안에 .class 파일 jsp 이미지 css등이 압축되어있다.
톰캣의 특정폴더에 war파일을 넣고 명령어를 실행하면 스프링서비스가 톰캣을 사용해서 돌게된다.
요새는 반대로 jar파일을 사용해서 돈다.
정적리소스도 관리하긴함 .
아파치와 같이 HTML, CSS, javascript등 정적파일을 처리해주는 서버로서의 역할을 한다.
동시에 웹서버이자 리버스프록시 로드벨런서역할도 해준다.
웹서버. 정적파일을 처리해줌. 요새는 톰캣에서 정적리소스들도 관리해주지만
아파치를 여전히 사용하는 이유는 reverse proxy가 보장되기 때문이다.
멀티프로세스 모듈로 일한다.
1995년 만들어진 http server project 인 아파치서버
클라이언트에게서 요청이 들어올때마다 process에 연결하는데, 미리 prefork로 만들어놓은 프로세스를 connection했다.
이런 점 덕분에 확장성이 높았고 응답률도 좋았다.
하지만 1999년 인터넷 트래픽이 증가하면서 동시커넥션이 많아지면서 아파치는 메모리 부족현상이 이어지고 cpu에도 부하가 커졌다.
그렇게 태어난게 NGINX이다.
기존에는 APACHE와 함께 사용되기 위해 만들어졌다.
아파치 서버가 요청을 처리하는 방식이다.
요청마다 쓰레드가 생성된다. 접속자가 많을수록 쓰레드가 생성되어 cpu와 메모리자원의 소모가 커진다
Nginx의 구조를 보면 한개 혹은 고정된 프로세스만 생성하여 비동기 방식으로 처리가 가능하다.
적은 자원으로 효율적인 운용이 가능하게 된것이다.