Spring의 작동 원리 (http/tomcat)
내장 톰켓을 가진다
socket 통신
- 특징: 소켓은 운영체제가 가지고 있는 것으로, 한번 연결되면 연결이 끊어지지 않고 계속해서 유지가 된다.
- 장점: 한번 열결되고 나면 서버 입장에서는 B,C가 누구인지 알 수 있다.
- 단점: 여러 사용자들과 연결되고 소켓들이 여러 개 생기게 되면 부하가 계속해서 커진다.
소켓오픈하면 포트 번호가 필요하다. 최초의 5000번 포트는 연결용도로만 사용한다. 연결이 되는 순간 새로운 소켓을 만든다. 새로운 소켓은 새로운 스레드를 생성한다. 그리고 기존 5000 포트 연결이 끊기고 새로운 소켓(5001포트)로 연결이 된다. Main스레드인 5000포트는 새로운 사용자를 받는다.
C가 A의 5000포트로 연결이 되면 또 다시 새로운 소켓이 만들어진다. 그리고 연결이 끊기고 새로운 소켓(5002포트)에 연결이 된다. 왜냐하면 main스레드(5000포트)는 또다시 새로운 사용자를 받는 일을 해야하기 때문이다.
http 통신
- 특징: 문서를 전달하는 통신으로 stateless방식이다. http는 운영체제가 들고 있는 소켓을 기반으로 만들어 졌다. 이는 새로운 소켓을 만드는 것이 아닌 다이렉트로 사용자의 요청을 받아서 응답한다. 그리고 나서 연결을 끊어버린다.
- 장점: 부하가 적다.
- 단점: 다시 연결 시, 매번 새로운 사용자로 인식한다.
-> 이런 단점을 보안해서 만든 것이 web서버이다.
사용자 요청에 응답을 하고 나서 연결을 끊어 버린다.
http의 탄생
웹서버
웹 서버(Web Server)는 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램을 말한다.
요청시 요청할 대상의 ip 주소를 알아야한다. 그리고 어떤 데이터가 필요한지를 url로 명시해줘야한다. (url은 자원을 요청하는 주소)
요청할 때만 응답해주면 되기때문에 갑은 을의 ip주소를 알필요가 없다. 그렇기 때문에 을의 요청이 없다면 을의 ip주소를 모르기때문에 응답할 수 없다.
톰켓
정적 자원 요청은 아파치에서 바로 처리한다. 하지만 자바 코드 요청 시, 아파치는 자바코드를 인식하지 못해 응답할 수 없다. 그렇기 때문에 톰켓을 이용한다. 아파치가 이해하지 못하는 요청이 오면 제어권을 톰켓에게 넘긴다.
톰켓은 .jsp에 있는 모든 자바 파일을 컴파일한다. 그리고 컴파일된 데이터를 .html에 덮어씌운다. 그리고 그 컴파일 된 .html파일은 다시 아파치에게 돌려준다. 그럼 아파치는 .html파일을 응답해준다.
결론적으로 톰켓이 하는 일은 자바 파일을 컴파일하고 html파일로 만드는 것이다.
웹서버 / 톰켓의 차이
웹서버: 요청한 파일을 응답해주는 애
톰켓: 요청한 파일 중에 자바 코드가 요청되면 그것을 컴파일해서 html파일로 번역해서 주는 애