서버의 구조를 이해를 제대로 못하니까
nginx를 왜 사용하는지, 톰캣을 왜 사용하는 지 잘 모르겠더라고요
그러다보니 스프링부트도 톰캣이랑 어떻게 상호작용을 하는지 역시 모르는 상태입니다 ㅠㅠㅠ
따라서 이러한 것들을 이해하기 위해 공부를 하였습니다.
웹브라우저와 같은 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠를 제공하는 컴퓨터 프로그램
적은 리소스로 많은 접속을 처리할 수 있는 가벼움을 원하면 Nginx
안정성이 중요하다 그러면 Apache를 사용하면 될 것 같습니다.
근데 주로 Nginx를 사용하는 걸로 알고있습니다.

컨테이너는 동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 소프트웨어 모듈
클라이언트는 정적, 동적인 컨텐츠를 제공해달라고 요청을 하는데 Web Server는 정적인 컨텐츠만 처리가 가능합니다.
Web Container는 동적 컨텐츠를 대신 처리해서 웹 서버에 정적인 파일로 만들어서 보내주는 모듈이라고 생각하면 될 것 같습니다.
클라이언트는 웹서버로 요청을 보낸다.
서블릿을 포함하는 WAS는 컨테이너로 요청을 보낸다.
컨테이너가 요청을 각 서블릿에게 전달한다.
서블릿 메서드가 로드된다.
서블릿은 컨테이너에 관련 응답을 넘겨준다.
컨테이너는 이를 서버에 전달한다. 서버는 응답을 클라이언트에게 전달한다.
Common Gateway Interface(공용 게이트웨이 인터페이스)
하지만 CGI에는 단점이 존재했는데
그래서 이러한 CGI 개선한 다양한 방법들이 나오게 되었습니다.
자바에서는 Servelt 과 Web Cotainer를 통해 이러한 단점을 개선하였습니다.
CGI로 자바 프로그램을 돌릴 필요 없이, HTTP request를 그대로 자바 프로세스 안에서 다 처리하는 것입니다. (사실상 CGI는 옛날옛적 과거의 기술인걸로 ㅋㅋ)
DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Web Application Server
WAS는 JSP,Servelt 구동환경을 제공해주기 때문에 서블릿 컨테이너 라고도 불리죠
WAS = Web Server + Web Container
이렇게 WAS에 대해서도 공부해보니까 이러한 생각이 들었습니다.
어? WAS가 Web Server 와 Web Cotainer가 합친 역할이라면 혼자서 정적,동적인 컨텐츠 모두를 처리할 수 있는거 아닌가?
근데 왜 실제로는 Web Server 와 WAS로 구성되어 Server를 구성하지?? 라는 생각이 들었습니다.

사실상 이게 오늘의 핵심입니다. 위에 Web Server, WAS 등등 개념자체는 원래도 알고있었습니다.
하지만 도대체 왜 Web Server, WAS를 분리하여 사용한건지에 대해 알아보려고 합니다.
WAS와 Web Server는 분리하여 서버의 부하를 방지해야 합니다. WAS는 DB 조회나 다양한 로직을 처리하고, 단순한 정적 컨텐츠는 웹 서버에서 처리해줘야 합니다. 만약 정적 컨텐츠까지 WAS가 처리한다면 부하가 커지게 되고, 수행 속도가 느려질 것입니다.
즉 목적에 맞게끔 분리를 하여 서버에 대한 부하를 나누자! 라는 의미가 되겠네요.
로드 밸런싱을 위해 Web Server를 사용할 수 있습니다. 여러 개의 서버를 사용하는 대용량 웹 어플리케이션의 경우 Web Server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있습니다.
예를 들어 1개의 Nginx로 2개의 WAS를 구성하여 로드밸런싱 처리를 할 수 있겠네요.
위에 여러 WAS 연결 가능과 비슷한 맥락 입니다.
하나의 서버에서 여러 WAS를 구성하면
당연히 PHP, JAVA, Javascript 등의 애플리케이션을 함께 사용할 수 있습니다.
스프링부트만 하다가 Nginx + 스프링 + 톰캣을 구성한 프로젝트와 Nginx + 스프링부트 + 외부톰캣으로 구성한 프로젝트를 마주치고 왜 이렇게 구성을 하였을까? 라는 의문에서 공부를 하였습니다.
오늘은 Web Server 와 WAS의 분리로 얻을 수 있는 이점이 많다 라는 것을 얻어간게 가장 크네요.
언제나 그랬듯이 기초적인 내용을 제대로 이해못한걸 지금 공부하는게 후회되네요.
Nginx, 톰캣에 대한 구축 및 설정 하는건 나중에 기회게 된다면 작성하겠습니다.
앞으로 공부할게 너무 많아진 상태라 뭐부터 공부해야될지 모르겠네요 ㅋㅋㅋ