[Spring] 서블릿 객체의 생명주기

strongmhk·2023년 7월 19일
0

Spring

목록 보기
19/25
post-thumbnail

📌포스팅에 앞서..

필자가 배운 내용을 정리하고자 함에 의의를 뒀으니 비유적인 표현이 많고 개념을 정의함에 있어서 정석적인 정의가 아님을 인식해주었으면한다.
피드백 절대환영!!!







📌클라이언트의 자원 요청 종류

  • URL: 자원 접근 방법 ex) http://naver.com/a.png -> a.png라는 자원을 요청
  • URI: 식별자 접근 방법 ex) http://naver.com/picture/a -> picture이라는 식별자로 a라는 picture(사진)을 요청






📌서블릿 컨테이너

서블릿 컨테이너란 스프링의 내장 톰캣 서버를 의미한다.
그렇다면 서블릿 컨테이너는 클라이언트의 요청을 어떻게 처리할까?







🎈요청에 응답

첫번째 요청시

  • 서블릿 컨테이너에게 요청이 전달됨
  • 서블릿 컨테이너가 서블릿 객체 생성
  • 서블릿 객체는 init()을 호출
  • Service() 호출 직전에 새로운 스레드 생성
  • 해당 스레드는 Service() 안의 http 메서드(get, post, put, delete, patch 등) 실행하여 DB연결, 데이터 html에 담아서 응답

두번째 요청시

  • 이미 생성돼있는 서블릿 객체 재사용
  • 서블릿 객체 재사용하므로 init 메서드 실행하지 않음
  • Service() 호출 직전에 새로운 스레드 생성해 http 요청에 따라 메서드실행






🎈다수의 요청 동시접근시 처리(스레드의 재사용)

다수의 요청이 동시접근할 수 도 있다.
이럴때 요청의 개수만큼 스레드를 생성한다.
그러나 컴퓨터 성능에 따라 스레드를 생성할 수 있는 개수가 다르다.
이럴 경우에는 스레드를 재사용(pooling)한다.


ex) 20개의 요청이 동시에 서블릿 컨테이너에게 전달됐다고하자.
그러면 서블릿 컨테이너는 20개의 스레드를 생성하여 20개의 요청을 동시에 처리할 수 있다.
만약 내 컴퓨터는 20개의 스레드까지만 생성할 수 있는데 동시에 25개의 요청이 들어오면
5개는 대기를 시키고 20개 중 할 일을 마친(요청에 reponse한) 스레드를 소멸시키지않고(원래 할 일을 마친 스레드는 소멸된다) 대기중인 요청을 위해 재사용한다.
스레드를 재사용하는 것을 pooling이라고한다.


생성 가능한 스레드의 개수를 늘리는 방법도 있다
예를 들어 1000->10000개로 늘리고 싶다면

  • scale-up : 1개의 컴퓨터의 수용 능력을 10000개까지 늘림
  • scale-out : 1000개까지 수용 가능한 10개의 컴퓨터 사용






📝참고(메서드 호출)

자바의 메모리 영역에는 static, heap, stack이 있다.
만약 A 클래스의 hello() 메서드가 있다고 하자.
만약 각각 다른 3명의 클라이언트가 hello()를 호출했다고 하면, heap에 A클래스 객체를 1개만 올려 사용하지만, 각각의 요청에 대한 hello() 메서드는 stack 메모리에 3개의 공간을 차지하게 된다.
즉, 객체는 공통으로 쓰지만 호출된 메서드는 각각의 독립적인 메모리 공간을 가진다.

profile
저 커서 개발자가 될래요!

2개의 댓글

comment-user-thumbnail
2023년 7월 19일

좋은 글 감사합니다!

1개의 답글