Search
Duplicate

[스프링 핵심원리 기본] 싱글톤 컨테이너 - 싱글톤 방식의 주의 점

상태
스프링 핵심원리 기본
담당자
속성 1
Spring
JAVA
속성
8
1) 싱글톤 패턴의 주의할 점
싱글톤 패턴은 객체 인스턴스를 하나만 생성해서 공유하는 방식으로 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 상태를 유지하게 설계해야 된다.
무상태(stateless)로 설계해야 된다.
스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다!!.
2) 객체 생성
Code
3) 빈을 등록 후 사용
Code
4) 문제 발생
하나의 객체의 공유 필드 안에 값을 세팅했기 때문에, 특정 클라이언트가 다른 클라이언트 값을 변경하는 문제가 발생한다.
사용자 A의 주문금액은 10,000인데 20,000이라는 결과가 나왔다.
때문에 공유 필드는 항상 조심해야 한다.! 스프링 빈은 항상 무상태(stateless)로 설계해야 한다.
5) StatefulService와 StatefulServiceTest 수정
Code : StatefulService
Code : StatefulServiceTest
스프링 빈을 무상태로 변경하였다.
결론
현재 위의 예시는 멀티 스레드를 사용하지 않아서, 복잡하지 않지만 실제로 많은 실무에서 싱글톤의 값을 변경함으로써 문제가 많이 발생한다고 한다. 이를 명심하고 무상태로 만들 수 있게 주의하자!