Wanna be Brilliant Full-Stack Developer
2/21 Spring 톰캣은 무엇인가?? 본문
톰캣은 무엇인가?
HTTP는 운영체제 소캣이라는애를 이용해서 만들어졌는데
만약 프로그램이 운영체제가 들고 있는 어떤 기능을 통해 프로그램을 만날떄 소캣을 불러서 사용하는것이 시스템 콜이라고 한다.
시스템이 들고 있는 어떤 기능을 콜해서 불러서 만들었다고해서 HTTP의 기반은 소켓이다
우리가 멀 구분해야하냐면 톰켓과 웹서버에 대한 차이를 알아야한다.
웹서버에 대해서 정확히 알아야한다.
웹서버는 내가 컴퓨터를 하나 샀다. 그리고 재밌는 동영상들을 가지고 있다.
그래서 동영상이 내가 세개가 있고 그리고 친구들이 컴퓨터를 각각 가지고 있는데 이 친구들은 내 동영상을 보고싶어하는데 나는 친구들의 영상을 볼필요가 없으니 친구들이 내 데이터가 필요한 상황이다.
그래서 이럴떄 친구들은 나에게 머라하냐면 우리는 월드 와이드 웹으로 연결되어있기 때문에 모두 선으로 연결되어있어
그러니까 인터넷 통신을 통해서 너가 가지고 있는 영상들을 나에게 줄수 있겠니? 물어봐야하는 사람은 내가 아니라 친구들이다.
그래서 내가 갑! 친구들은 을이다.
HTTP 웹서버는 갑이다. 갑이라는건 을이 필요한 데이터를 가지고 있다는 것이다.
그래서 HTTP 통신을 어떻게 보냐면 을이 갑에게 Request한다! 리퀘스트 하기위해서는 내 컴퓨터가 어디에 있는지 위치를 알아야해서 리퀘스트 할때는 IP주소를 알아야한다!
리퀘스트 할떄 어떤 영상이 필요한지 정확히 명시해야하는데 이것들이 URL이라는것으로 만들어진다.
URL은 자원을 요청하는 주소이다.
URL에 가장 마지막에 있는 L은 Location 이다. 자원에 위치를 내가 요청을 해서 필요한 데이터를 받을 수 있다!
리퀘스트 하게되면 그 값은 Response를 하게되는데 응답할때 갑의 입장에서는 을의 IP를 원래는 몰라도된다.
왜냐하면 갑은 을컴퓨터에 가서 데이터를 가져올 필요가 없기 때문에!
을이 요청하면 을이 요청한 IP주소를 토대로 자기가 누구인지 리퀘스트 할떄 밝히는데
그 정보를 토대로 다시 정보에 응답해주면된다.
그 갑이 웹서버가 되는것이다.
이상황에서 우리가 느낄수 있는것은 HTTP에서 갑은 을의 IP주소를 모른다 알필요가 없다. 왜냐하면 을이 요청할떄만 응답해주면 되는 구조이기 떄문이다.
그러면 갑이 못하는것도 있다 요청하지 않았을떄는 내가 어떻게 응답할수 있을까? 을의 주소를 모르니까 못한다.
을의 주소를 알기위해서는 소캣을 써야한다. 소캣은 을이 연결하는 순간 응답을 해주겠지만
이떄 연결이 지속되어있어야 하기떄문에 소캣통신은 연결이 지속되어있는 통신이다!
그렇기 때문에 한번 연결하고 나면 갑이 을한테 자기가 원하는 시점에 항상 언제나 데이터를 전달해줄 수 있다.
EX) 을이라는애가 A라는 데이터를 전달해줬따. 전달해준 시점에 웹서버가 다른 을들한테 a를 전달해주고싶다면? 갑 입장에서는 을들의 IP를 알고있어야하는데 모른다. 이런 통신을 하기 위해서는 (연결이 지속된) 소캣이 필요하다
하지만 우리가 하는 HTTP 통신은 단순하게 요청시에 응답만 해주는 구조이고, 응답은 단순하게 HTML 문서, 특정 자원을 요청에 대해서 응답해주면 되고 이 자원들은 전부 Static (정적인) 자원들이다.
요청시마다 변하는 자원이 아니다. 정적인 데이터를 응답해주는것이 웹서버이다.
톰캣은 무엇인가?
웹 서버는 흔히 사용하는것이 아파치이다.
우리의 컴퓨터에 특정 폴더를 지정해서 그걸 사람들에게 공유를 하는데 이 내부에는 수많은 자원들이 있는데
어떤애가 자원을 요청한다고 리퀘스트 하게 되면 아파치는 그 자원을 응답해주면 끝난다.
근데 만약에 애가 요청을 하는게 .jsp파일나 자바코드가 적혀있는걸로 요청을 하게되면 이 아파치는 자바코드를 이해할수 없다. 자바코드 요청시에 응답하지 못한다 . 그래서 아파치에 + 톰캣이라는걸 달게된다
톰캣이라는 애를 달게되면 아파치가 자기가 이해 못하는 어떤 파일에 대한 요청이 오게되면 제어권을 톰캣에게 넘겨주는데 그것이 톰캣이다!
그리고 이 톰캣은 .jsp파일 안에 있는 모든 자바코드를 컴파일 하고 컴파일이 끝나면 그 컴파일된 데이터를 .html에다가 덮어씌운다. 결국은 톰캣이 하는일은 자바 코드를 컴파일하고 html문서로 만들어주는것이다
그리고 나서 아파치한테 돌려준다
아파치는 그 해당.html파일을 응답해준것이다.
근데 흔히 요청을 할떄는 Web 브라우저로 요청을 하는데 만약에 웹브라우저가 .jsp를 Requset하게 되면 애가 .jsp 파일이 그대로 돌아가면 웹브라우저가 이해를 못하기 떄문에 내용이 꺠져버린다.
그래서 어떻게 하는거냐면 아파치가 이거는 웹브라우저로 요청이 왔는데 .jsp파일은 웹브라우저가 이해를 못하니까 톰캣한테 넘기고 톰캣이 .jsp파일을 컴파일해서 html로 변환해서 html파일을 응답하게 되면 웹브라우저가 .html을 받고 파일을 정상적으로 읽을 수 있게 된다.
웹브라우저는 html, javascript, css 파일을 통신을 통해서 읽어주는 프로그램이다.
아파치는 요청한 파일을 응답해주는것
톰캣은 요청한 파일중에 자바 코드가 요청이 되면 그것을 컴파일해서 html파이롤 번역해서 돌려주는것이다
'Some Memos > Spring 개념' 카테고리의 다른 글
2/22 Spring Web.xml은 무엇인가?? (0) | 2022.02.24 |
---|---|
Spring 서블릿 객체의 생명주기?? (0) | 2022.02.22 |
2/17 SpringBoot 개념 HTTP는 무엇인가? (0) | 2022.02.18 |
2/15 Spring WHAT IS ORM?? (0) | 2022.02.15 |
I don't get Spring MessageConventor & 스프링 개념잡기3 (0) | 2022.02.11 |