http는 운영체제가 가지고 있는 소켓을 이용해서 만들어졌는데, 프로그램이 운영체제가 들고 있는 어떤 기능을 통해서, 불러서 사용하는것을 시스템콜 이라고 한다.
http의 기반은 소켓이다.
톰켓 vs 웹서버
내가 재미있는 동영상 세개를 가지고 있을 때 친구 세명이 이 영상을 보고싶어한다. 이때 나는 갑이고 친구세명은 을이다.
http는 항상 을이 갑에게 request 요청하는데, request하기 위해서는 내 컴퓨터가 어디있는지 위치를 알아야해서 ip주소를 알아야한다. 그리고 1,2,3번 동영상 중에 어떤것이 필요한지 정확하게 명시해줘야하기때문에 url(자원을 요청하는 주소)을 알아야 한다.
그러면 갑은 response 응답 해주는데, 이때 갑의 입장에서는 을의 ip를 몰라도되는데 을이 request할때 자기가 누군지 밝히기 때문에 그 정보를 토대로 갑이 response 해주면 된다. 그러면 갑이 웹서버가 된다.
http에서 갑은 을의 ip주소를 알필요가 없어서 모른다. 요청할때만 응답해주면 되는 구조이기 때문.
그래서 을이 요청하지 않을때 주소를 몰라서 응답할 수 없다. 응답하려면 소켓이 필요하다. 소켓은 계속 연결되어있어서 원하는 시점에 파일을 바로 전달할 수 있다. 여기서 오고가는 자원들은 static 자원이라고 한다. 요청시마다 변하는 자원이 아니라 정적인 데이터이다.
웹서버: 아파치가 있을때 내 컴퓨터 C:\work를 공유한다면 여기 안에 있는 자원들은 그냥 request,response 할 수 있다.
그런데 .jsp(자바코드)를 요청하게 되면 아파치는 자바코드를 이해하지 못한다. 그래서 자바코드 요청시에 응답하지 못한다.
그것을 해결하기 위해 톰켓을 단다. 웹서버:아파치+톰켓. 아파치는 자기가 이해하지 못하는 파일에 대한 요청이 오면 제어권을 톰켓에게 넘긴다. 톰켓은 .jsp안에 있는 모든 자바코드를 컴파일하고 컴파일이끝나면된 데이터를 .html에 덮어씌운다.
즉, 톰켓이 하는일 : 자바코드 컴파일->html 문서 만들어주고 아파치에게 되돌려줌. 그럼 아파치는 그 html파일을 response해줌
웹브라우저는 html, js, css 등 정적인 데이터만 이해할 수 있다.
아파치는 요청한 파일을 응답해주는것, 톰켓은 요청한 파일중에 자바코드가 요청되면 그것을 컴파일해서 html로 번역해서 돌려줌