싱글톤 빈
스프링의 빈은 싱글톤 패턴으로 관리됩니다. 싱글톤이란 생성자가 여러 차례 호출 되더라도 실제로 생성되는 객체는 최초에 생성된 객체를 반환하게 됩니다.
이렇게 하는 이유는 메모리 절약을 위해서 입니다. 보통 싱글톤 패턴이 적용되는 객체가 필요한 경우는 해당 객체가
리소스를 많이 차지하는 역할을 하는 무거운 클래스일 때 적합합니다.
싱글톤 빈의 쓰레드 안전성
그렇다면 싱글톤 빈은 쓰레드에 있어서 안전할까요? 결론적으로 말하자면, 안전하지 않습니다.
만약 싱글톤 빈 내부적으로 값이 변할 수 있는 인스턴스 멤버 변수가 존재한다면, 모든 쓰레드가 하나의 공유되는 변수를 사용하기 때문입니다. 이를 방지하려면 싱글톤 객체로 하여금 상태(stateful)를 유지하게 설계하면 안됩니다.
스프링에서 쓰레드 안정성 있게 사용 할 수 있는 이유 또한 그에 맞게 무상태로 설계 하기 때문입니다
스프링의 싱글톤 빈은 상태를 가지지 않는 불변 객체입니다. 일반적으로 사용하는 컨트롤러와 서비스
클래스들은 객체들을 주입 받아서 사용하지 내부적인 맴버 변수를 사용하지 않습니다.
다시 말해, 스프링 빈을 쓰레드 안전성 있게 사용하기 위해서는 클래스가 불변 객체여야 합니다.
상태성을 가지고 있는 빈을 쓰레드 안전성 있게 만드려면 @RequestScope 어노테이션을 활용하면 됩니다.
해당 어노테이션은 매 요청마다 새로운 빈을 생성하여 반환하게 설정되기 때문입니다.
'Spring' 카테고리의 다른 글
Bean과 Component 뜯어보기 (0) | 2023.03.22 |
---|---|
BeanFactory와 ApplicationContext의 차이점 (0) | 2023.02.21 |
스프링 시큐리티 아키텍처에 대하여 (0) | 2023.01.29 |
@Transaction에 대하여 (0) | 2023.01.06 |
스프링 검증 BindingResult에 대하여 (0) | 2022.12.28 |