JVM/Spring

[SPRING] 스프링의 컨트롤러는 어떻게 여러 작업을 처리할까?

Hyo Kim 2021. 11. 15. 16:47
728x90
반응형

🤔서론

'TDD, Clean Code with Java' 자동차 경주 미션을 진행하던 도중 해당 리뷰를 받았고, 궁금한 게 생기게 되었다.

스프링의 컨트롤러는 Bean을 통해 싱글톤으로 하나의 객체만이 생성이 될텐데..

 

어떻게 여러 작업을 처리하지..?🤔


😲본론

제가 이상하다고 생각했던 부분은 이 부분입니다.

 

1개만이 생성된 컨트롤러가 어떻게 동시에 10건이든 10만건이든 아무 문제 없이 잘 처리할 수 있지??

 

고민의 답을 찾기 위해 구글을 돌아다니던 중 저와 같은 고민을 한 글을 발견하고 답을 찾았습니다.

(블로그)

 

Controller 1개가 어떻게 수 많은 Request를 처리하는가? (spring mvc, tomcat thread, singleton bean)

Controller 1개가 어떻게 수 많은 Request를 처리하는가 배경 의식의 흐름 Controller는 한 개인가? 지금와서 생각하면 조금 바보같았지만, 저런 질문이 떠오른 이유는 아래와 같습니다. 스프링에서 웹

jeong-pro.tistory.com

여기 블로그에서 딱 저와 같은 고민과 같은 해답이 발견 되어서 해당 문구를 인용하도록 하겠습니다.

"공유"라는 말이 단순하게 같이 쓸 수 있다! 이렇게 생각하고 끝냈어야하는데 바보같이 공유하면 동기화를 해야지 이러면서 lock을 걸고... lock이면 병목... 이런 생각을 했던게 문제였습니다.

출처: https://jeong-pro.tistory.com/204 [기본기를 쌓는 정아마추어 코딩블로그]

👍결론

0. 기본적으로 스프링의 빈은 싱글톤으로 생성된다.

1. 스프링의 컨트롤러도 빈을 통해 싱글톤 으로 스프링 컨테이너에 생성된다.

2. 생성된 컨트롤러의 메소드는 JVM Runtime Data Area - Method Area 에 생성된다.

3. 해당 컨트롤러 객체는 JVM Runtime Data Area - Heap Area 에 생성된다.

4. 생성된 메소드를 어디서, 몇 번을 호출하든지 똑같은 메소드를 공유하여 사용한다.

 

주의 점

1. 싱글톤으로 생성된 객체는 공유되기 때문에 쓰레드 세이프를 위해 상태 값을 가지지 않도록 한다.

728x90
반응형