본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : 싱글톤 사용시 주의해야 하는 것

by 오주현 2022. 1. 8.
반응형
싱글톤 사용시 주의해야 하는 것

싱글톤 방식의 주의점


  • 상태를 유지하게 설계하면 안 된다.
    • 특정 클라이언트에 의존적 필드가 있으면 안되고, 값을 변경할 수 있는 필드가 있으면 안되고, 가능하면 읽기만 가능해야 한다.
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
(강의 내용을 참고로 개인 공부하여 올린 내용입니다.)

반응형

댓글