반응형
싱글톤 사용시 주의해야 하는 것
싱글톤 방식의 주의점
- 상태를 유지하게 설계하면 안 된다.
- 특정 클라이언트에 의존적 필드가 있으면 안되고, 값을 변경할 수 있는 필드가 있으면 안되고, 가능하면 읽기만 가능해야 한다.
class StatefulServiceTest {
@Test
void statefulServiceSingleton() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);
StatefulService statefulService1 = ac.getBean(StatefulService.class);
StatefulService statefulService2 = ac.getBean(StatefulService.class);
//ThreadA : A사용자 10000원 주문
statefulService1.order("userA", 10000);
//ThreadB : B사용자 20000원 주문
statefulService2.order("userB", 20000);
//ThreadA : A사용자 주문 금액 조회
int price = statefulService1.getPrice();
System.out.println("price = " + price);
Assertions.assertThat(statefulService1.getPrice()).isEqualTo(20000);
- 예를 들면 a와 b사용자를 조회했을 때 A가 10000원을 주문했으나 중간에 B가 주문한 20000원이 price값을 대체하면서 A가 20000원을 주문한 것으로 조회가 된다는 문제가 있다.
- 공유 필드를 조심하고 스프링 빈을 항상 무상태로 설계해야 한다.
출처 : 스프링 핵심 원리 - 기본편 - 인프런
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard
(강의 내용을 참고로 개인 공부하여 올린 내용입니다.)
반응형
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : @Configuration과 바이트코드 조작 (0) | 2022.01.09 |
---|---|
[Spring Boot] : @Configuration과 싱글톤의 관계 (0) | 2022.01.08 |
[Spring Boot] : 싱글톤 패턴 (0) | 2022.01.06 |
[Spring Boot] : 웹 애플리케이션 문제 (0) | 2022.01.06 |
[Spring Boot] : Bean Definition (0) | 2022.01.06 |
댓글