본문 바로가기
Spring/Spring

스프링의 작동원리(서블릿 컨테이너)

by 불면증김씨 2022. 1. 31.

                       서블릿 컨테이너                     

 스프링은 URI요청을 받기 때문에 서블릿 컨테이너가 동작할 수 밖에 없는 구조이다. 그리고 최초 요청 시, 지정된 스레드 개수만큼 계속해서 객체가 생성된다. 그리고 그 이후부터는 객체가 생성되지 않고 기존 만들어진 객체를 재사용하게 된다. 그러면서 최종적으로 만들어지는 것이 request객체와 response객체다. 이 객체는 스프링이 아니라 톰켓이 만들고 들고 있는 객체이다.

 

 

스프링에서 아파치가 아닌 톰켓이 작동하는 이유

URL(L location): 자원 접근할 때 사용하는 주소 요청 방식

ex) http://naver.com/a.png

URI(I identifier): 식별자를 통해서 접근하는 방식

ex) http://naver.com/picture/a

 

URL 접근방식을 스프링은 막아놨다. 그래서 URI 접근해야한다.

=> 식별자를 통한 접근

=> 특정한 파일을 요청할 수 없다.

=> 요청시에는 무조건 자바를 거친다.

=> 아파치는 톰켓에게 제어권을 넘겨줘야 한다.

 

 

서블릿 컨테이너가 객체를 생성하는 방식

서블릿 컨테이너의 객체 생성

 

 최초의 요청이 들어오면 스레드를 하나 생성한다. 그리고 이 스레드가 서블릿 객체를 하나를 만든다.

스레드를 만드는 이유는? 요청은 한명이서 하는게 아니라 여러명이 하는거다. 그래서 동시처리를 위해 스레드를 만든다. (동시 접근을 허용하기 위해서) 만일 스레드가 만들어지지 않는다면, 하나의 요청을 처리하는 동안 다른 요청은 요청을 처리하기까지 기다려야한다.

 스레드는 무한정 만들어 지는 것이 아니고, 만약 20개의 스레드를 지정한다. 스레드가 20개 만들어지고 아직 응답이 끝나지 않았는데 21한번째 요청이 들어오면 21번째 요청은 대기를 한다. 그리고 1번째 스레드가 응답을 해주면 스레드는 사라지지 않고 21번째 요청을 받는다(재사용) 재사용하게 되면 스레드가 만들고 삭제되는 과정이 없어지기 때문에 속도가 빨라진다.

그러면 스레드를 많이 만들면 대기안하잖아? 스레드를 너무 많이 만들면 그만큼 각각 스레드가 처리하는 일이 느려진다(ex 3초->6초) 그래서 서버의 성능에 맞게 스레드를 생성해야한다.

'Spring > Spring' 카테고리의 다른 글

스프링 MVC 흐름  (0) 2022.02.01
DI(의존성 주입)  (0) 2022.02.01
Spring의 작동 원리 ( web.xml)  (0) 2022.01.17
Spring의 작동 원리 (http/tomcat)  (0) 2022.01.17
Spring 개념  (0) 2022.01.13

댓글