본문 바로가기

스터디/소연

Spring Web MVC에서 요청 마다 Thread가 생성되어 Controller를 통해 요청을 수행할텐데, 어떻게 1개의 Controller만 생성될 수 있을까요?

각각의 Thread는 singleton으로 생성된 Bean( ⇒ Controller 포함 ) 들을 참고하여 일을 함

*이 때 생성되는 Bean들은 기본적으로 singleton

> Controller 역시 singleton으로 각각의 Thread들이 하나를 공통적으로 사용한다고 보면 됨

 

Controller 객체는 Heap에 생성되지만 class에 대한 정보는 Method  영역에 저장됨 > 모든 Thread들이 접근 가능

 

하나의 Singleton Controller가 수많은 요청을 처리하는 것이 아니고 각각의 Thread가 singleton으로 생성된 Controller를 참고하여 요청을 실행함

 

 

 

 

결론

생성한 Controller 클래스에 대한 정보가 JVM 메모리 영역 중 Method Area(메서드 영역)에 올라가기 때문입니다. 

Controller 객체는 Heap(힙)에 생성 되지만, 해당 클래스의 정보(메소드 처리 로직, 명령들)는 Method Area(메서드 영역)에 생성 됩니다.

따라서 결국 모든 Thread가 객체의 메서드를 공유할 수 있기 때문에 Controller는 1개만 생성됩니다.

 

 

 

https://velog.io/@ejung803/Spring-Web-MVC에서-요청-마다-Thread가-생성되어-Controller를-통해-요청을-수행할텐데-어떻게-1개의-Controller만-생성될-수-있을까요