springboot 개념정리(youtube강좌)

스프링부트 강좌 with JPA 9강 - 톰켓이란?

wannabe 2021. 6. 27. 16:10

1. 스프링부트 동작원리


(1) 내장 톰켓을 가진다. 톰켓을 따로 설치할 필요없이 바로 실행가능하다.

 

http운영체제가 들고있는, 소켓을 이용해서 만들어졌는데,

시스템이 들어있는 기능을 콜해서 만들어진 것을 '시스템 콜'이라고 함.

 

톰켓과 웹서버 차이를 알아야 함!!

 

웹서버에 대해서 정확하게 이해해야 한다. 

내가 컴퓨터를 하나 샀다고 하자. 

그 안에 재미있는 동영상 3개가 있다. 친구들은 내 동영상을 보고싶어 함

나는 친구들 동영상을 볼 필요 없고 친구들이 내 동영상을 보고싶어하는 것!

친구들이 우리는 www로 연결되어있기 때문에 인터넷 통신을 통해서 나에게 동영상 줄수 있어? 라고 

친구들이 물어봐야 함! 즉, 내가 갑이고 친구들이 을이다!!

http웹서버는 갑이다. 즉, 을이 필요한 데이터를 가지고 있다는 것!
그러므로 http통신은 을이 갑에게 request한다!!

이를 위해서, 해당 컴퓨터 IP주소를 알아야함

그리고 1,2,3번 동영상 중에 어떤 동영상이 필요한지 정확히 명시해줘야 해서 URL로 만든다

URL(L:Location)은 자원을 요청하는 주소!! 예를 들어, http: .../a.html 또는 a.avi

html이라는 파일 자원을 요청하는 것! 자원의 위치를 요청해서 필요한 데이터를 가져올 수 있다

request하면? 갑은 response해준다 

응답할 때, 을의 IP를 몰라도 된다. 왜? 을의 컴퓨터에 가서 자료를 가져올 일이 없으니까

request해온 정보를 토대로 그 정보에 response해주면 된다. 

갑이 웹서버가 되는 것!!

http에서 갑은 을의 IP주소를 알 필요가 없다는 것!
웹서버가 하지 못하는 것은? 을이 요청하지 않았을 때, 응답을 못한다. 왜? 을의 주소를 모르니까!

을의 주소를 알기 위해서는 소켓을 써야한다! 소켓통신은 연결이 지속된 통신이므로.

이렇게 연결이 지속된 통신을 위해서는 소켓이 필요하다!!

 

응답은 html문서나 요청한 특정 자원에 대해 해주는 것! 

이 자원은 static자원 즉 정적인 자원이다!! 변하는 동적인 자원이 아니다. 이게 웹서버다!

 

▶그렇다면 톰켓은??? 

웹서버는? 우리가 흔히 사용하는 웹서버는 아파치

컴퓨터에 특정 폴더를 지정하자. C드라이브에 work라는 폴더를 사람들에게 공유한다고 하자. 

이 폴더안에 수많은 자원들이 있겠죠

어떤 사람이 자원을 request하면? 아파치는 response해주면 끝남

 

만약, .JSP파일을 요청하거나 자바코드가 적힌 걸로 요청하면? 아파치는 자바 코드를 이해못한다

그러므로 이 요청에 응답을 못해주게 되니까, 아파치에 톰켓을 달아둔다!

JSP파일 요청이 오면? 제어권을 톰켓에게 넘긴다!

톰켓은? .JSP파일 안의 모든 자바 코드를 컴파일한다

컴파일이 끝나면? 컴파일된 데이터를 .html에 덮어씌운다. 

즉, 자바코드를 컴파일하고 html문서로 만들어주는 것!

그리고 다시 아파치에게 돌려주고 아파치는 .html파일을 response해준다. 

아파치는 요청한 파일을 응답해주는 것!

요청할 때, 웹 브라우저로 요청하게 되는데, 

웹브라우저는 html, javascript,css 또는 avi같은 정적인 파일만 이해할 수 있음(해당 문서를 읽어주는 프로그램)

웹브라우져가 요청한 데이터가 html파일이면 잘 응답받아서 예쁘게 열리겠죠? 

그런데, 자바코드를 요청한다면? response될 때, .JSP그대로 돌려준다면 웹브라우저는 해당 문서를 이해 못함

그래서! 아파치가 웹브라우저로 요청이 왔을때 톰켓에게 넘겨서 html파일로 변환해서 아파치가 html로 response