728x90
반응형
🤔서론
'TDD, Clean Code with Java' 자동차 경주 미션을 진행하던 도중 해당 리뷰를 받았고, 궁금한 게 생기게 되었다.
스프링의 컨트롤러는 Bean을 통해 싱글톤으로 하나의 객체만이 생성이 될텐데..
어떻게 여러 작업을 처리하지..?🤔
😲본론
제가 이상하다고 생각했던 부분은 이 부분입니다.
1개만이 생성된 컨트롤러가 어떻게 동시에 10건이든 10만건이든 아무 문제 없이 잘 처리할 수 있지??
고민의 답을 찾기 위해 구글을 돌아다니던 중 저와 같은 고민을 한 글을 발견하고 답을 찾았습니다.
여기 블로그에서 딱 저와 같은 고민과 같은 해답이 발견 되어서 해당 문구를 인용하도록 하겠습니다.
"공유"라는 말이 단순하게 같이 쓸 수 있다! 이렇게 생각하고 끝냈어야하는데 바보같이 공유하면 동기화를 해야지 이러면서 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
반응형
'JVM > Spring' 카테고리의 다른 글
[SPRING] @Valid @Validated 사용하기 - java bean validation (0) | 2022.03.26 |
---|---|
[SPRING] @Valid 어떻게 동작할까 - java bean validation (0) | 2022.03.26 |
[SPRING] @Transactional readOnly 성능향상 이유 (0) | 2021.09.05 |
[SPRING] synchronized와 @Transactional 을 동시에 사용 시 문제점 (5) | 2021.08.16 |
[SPRING] AOP 우선순위 설정하기. (2) | 2021.08.14 |