Springboot

Spring boot실습 톰켓의 내부

25G 2021. 6. 24. 16:35

 

톰켓에 url 요청을 할 때 요청정보에 들어가는 정보는 누가 요청을 했는지 어떤 프로그램으로 요청했는지 등등에 대한 많은 정보들이 byte스트림으로 String타입이 들어온다. 이때 문자열 그대로 있으면 활용하기 어려우니까 변수에 담아주는 것이 효율적이다. 이때 많은 변수가 담겨있기 때문에 자바 변수를 클래스에 담아둔다

위와 같은 작업을 톰캣이 해준다. request객체와 response객채를 톰캣이 만들어서 자바에게 전달해준다. 그럼 자바 servelet에서 받아서 처리하는 것이다. 그래서 위 두 객체들에 접근하는 방법이 필요하다

 

 

의존성 주입

  • DI, 의존성 주입은 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 필요한 객체를 받아서 사용하는 것이다.
  • 이를 통해 객체 간의 결합도를 줄이고 코드의 재활용성을 높여준다.

즉, 한 클래스를 수정하였을 때, 다른 클래스도 수정해야 하는 상황을 막아줄 수 있습니다.

 

톰캣이 가지고 있는 네 가지 메모리 영역
스코프에 네가지 메모리 영역이 있다.
공동 메모리 영역
따로 만들어지는 메모리 영역
application메모리 영역
session메모리 영역
request메모리 영역
pageContext메모리 영역
이렇게 네 가지 영역이 있다.

각자의 역할이 있다.
-application는 공용이다. 수천 명의 클라이언트가 공통으로 사용하는 영역
-session공용이다. 공통으로 사용하는 영역
-request는 사용자마다 따로 들고 있다.
-pageContext도 사용자마다 따로 들고 있다.

어떻게 사용되는지 범위를 아는 게 중요
톰캣이라는 지구가 만들어질 때
제일 먼저 생성되는 것 application이라는 친구는 성이 무너질 때까지(서버가 종료) 살아있다.
application은 공기 같은 것이다 항상 있다. 이 영역에는 블랙리스트 ip,해커 리스트, 무한반복 접속 같은 서버의 처음부터 끝까지 항상 체크해야하는 사항이 데이터들이 있고 무겁지 않은 데이터들이 있어야 한다.


io(데이터베이스 접근 횟수)가 많이 발생하는 순간 프로그램은 느려진다

session은 클라이언트가 브라우저로 최초 요청할 때 응답을 하면서 해당 사용자 데이터를 해시 형태(키와 값)로 저장한다. 이 저장된 해싱 데이터는 클라이언트가 그 브라우저를 닫으면 이 데이터가 사라진다. 하지만 브라우저에서 클라이언트의 키값(sessionID)을 httpHeader로 받아서 저장되기 때문에 다음 요청 시엔 그 키값을 httpHeader에 담아서 요청이 된다.

 

reqeust 가장 중요한 영역

클라이언트가 10명 들어온다면 request가 10개 생긴다 즉 클라이언트 마다 개별로 들고 있는 영역인 것이다. 그래서 트래핑에 따라서 서버 컴퓨터의 퍼포먼스가 굉장히 많이 요구된다. 해당 서버 요청이 들어올 때 java에서는 요청하나당 각각 스레드를 나눠서 배정하게 되는데 이때 스레드가 왔다 갔다 하며 동시 처리한다. 이때 스레드의 전후 흐름을 파악하는 것이 Context전환인데. 이 또한 cpu에 엄청난 부담이 되고 느려진다. 그래서 java기반 서버는 서버 컴퓨터의 퍼포먼스가 중요한 것이다.    

풀링 기술

 쓰래드기반기술은 대부분 풀링 기술을 사용한다. 예를 들자면 미리 요청을 받을 준비를 한 트래픽보다 넉넉하게 준비해 주는 것이다. 요청이 들어오면 스레드를 대여해줬다가 응답이 끝나면 쓰래드도 같이 반환된다. 그래서 request영역에는 잠깐 쓰고 버리는 데이터들이 들어온다(임시저장장치).

reqeuestDispecher를 쓰면 request를 유지해서 리다이렉트 됐을 때 생긴 새로운 request에 유지된 데이터를 덮어 씌우는 것이다

 

 

302 Found이 응답 코드는 요청한 리소스의 URI가 일시적으로 변경되었음을 의미합니다. 새롭게 변경된 URI는 나중에 만들어질 수 있습니다. 그러므로, 클라이언트는 향후의 요청도 반드시 동일한 URI로 해야 합니다.

'Springboot' 카테고리의 다른 글

Spring boot실습 DBMS연결  (0) 2021.06.25
Spring boot실습 EL표현식 JSPL  (0) 2021.06.24
Spring boot/실습 response의 이해  (0) 2021.06.23
Spring boot실습 FrontController 패턴의 이해!(MVC패턴)  (0) 2021.06.23
JSON에 대해서  (0) 2021.06.23