웹서버 : 클라이언트로부터 직접 요청을 받아 처리하고 저용량의 정적파일들을 제공한다.
동적 서비스를 제공하거나 웹 서버와 데이터 베이스 서버 또는 웹 서버와 파일 서버사이에서 인터페이스 역할을 수행함.
스프링프레임워크는 MVC패턴을 지향한다.
즉 클라이언트가 요청한 데이터를 컨트롤러에서 받아서 실질적으로는 서비스에서 처리하게해서 JPA를 통해서 DB에 데이터가 담긴다.
HTTP 통신방식은 원래 비연결 비상태가 원칙이다. 따라서 Client 에서는 미리 정해진 HTTP 규격에 맞게 요청을 보내게 되고 서버는 요청을 해석하여 Client 가 원하는 데이터를 보내주어야 한다. 즉, HTTP메서드를 통해 클라이언트의 요청을 해석하고, 그에 맞는 데이터 형식으로 보내주는 것이다. 즉 정적으로 요청-응답을 하는 것이다.
그런데 클라이언트의 요청이 1이라는 정적데이터를 요청하는 것이 아닌 1+2와 같은 변환된 데이터를 요구하면 어떻게 할까?
각 정적페이지에 1~100까지 만들어서 db에 저장한다음 클라이언트의 요청에 해당하는 정적페이지를 꺼내서 응답해주어야 할까?
이렇게 되면 불필요한 데이터가 DB에 저장되어 공간이 낭비된다.
유동적으로 1+2를 간단하게 계산해서 클라이언트에 응답해주면 된다.
위에서 살펴보았듯이 Web Server는 정적으로 통신하기 때문에 유동적인 데이터 처리를 하지 못한다.
예를들면 어제 웹페이지 방문객이 1명이었는데 오늘 2명이 들어와서 총방문객수를 3명을 표현해야 되는데 Web Server에서는 이걸 처리할 방법이 없다. 오로지 이에 해당하는 정적파일을 꺼내서 사용할 수 밖에 없는데 이러면 경우의 수가 무수히 많아져서 1+2에 해당하는 파일을 찾기위해 서버에 엄청난 부담을 줄 수 밖에 없다.
따라서 이 정적 파일의 데이터만 계산해서 넣어주는 프로그램과 같은 역할이 바로 WAS인 것이다. 대표적인 예가 바로 PHP와 톰캣 서블릿, js가 있겠다.
위 이미지를 보면 원래 Web Sever에서 DB로 가는 흐름에서 중간에 WAS가 처리를 해줌에따라서 사용자의 요청에 따른 데이터만 가공해서 클라이언트에 응답해주고 있다.
이렇게 통신을 하게되면 서버의 부담을 줄이는 동시에 효과적으로 사용자의 요청 혹은 서비스를 제공할 수 있다.
이렇게 데이터를 가공한 후에 Client 에게 반환해주는 작업을 Dynamic(동적) 인 웹처리라고 한다.
우리가 스프링프레임워크를 사용하면서 이런 WebSever나 WAS와 같은 것을 따로 설치하지 않아도 원하는 것을 출력할 수 있는 이유가 바로 Apache Tomcat이 내장이 되어있기 때문이다. Apache Tomcat은 Apache HTTP Server가 개발된 같은 Apache 재단에서 개발이 되었다.
참고 :
-Spring에서 Servlet의 동작방식
출처 : 스파르타 코딩클럽 스프링 심화 1주차 강의자료
Spring Boot 에서는 Servlet 을 단위로 하여 Client의 요청을 처리하게 되는데 Servlet은 Java 에서 Thread 기반으로 Client 요청에 대해서 Dynamic 하게 작동하는 구성요소다.
이때, Interface 인 Servlet 을 구현한 추상 객체를 상속받아 구현되어있는데, 요청에 따라서 각기 다른 Servlet 이 실행이 된다. Servlet 을 요청에 연결하고, 수명 관리를 해주는 것이 바로 Servlet Container인것이다.
Apache Tomcat은 기본적으로는 Servlet Container 이나 자체적으로 Web Server 가 내장이 되어있다. 이 때문에 외부의 HTTP 요청을 받을 수 있어서 Apache Tomcat 은 WAS 기능을 일부 가지고 있는 Servlet Container 라고 볼 수가 있는 것이다.
참고 : https://tecoble.techcourse.co.kr/post/2021-05-24-apache-tomcat/
매일 보고있던 스프링 실행 콘솔창의 내용중 일부분
공부하지 않았으면 그냥 실행되는 부분이겠거니라고 넘겼을텐데
이걸 공부하고 보니까 미생의 한 명대사가 떠올랐다.
승부에서 이겼을때는 바둑알 하나 하나가 살아줘서 고맙다 - 장그래
나 또한 매일 서버를 시작할때 이게 작동되어서 내가 개발을 할 수있음에 이 스프링프레임워크가 고맙고 이 TomCat이 작동되어서 너무 고맙고 또 고맙다.