# 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라
2023. 2. 5. 15:26
카테고리 없음
🚗 싱글톤이란? 싱글톤은 인스턴스를 애플리케이션에서 오직 하나만 생성할 수 있는 클래스를 의미한다. 예로 스프링 기본 빈이 싱글톤이다. 스프링 빈을 싱글톤으로 사용함으로써 이점은 모든 클라이언트 별로 인스턴스를 생성할 이유가 없기 때문에 무의미한 메모리 낭비를 줄일 수 있다. 별개로 스프링에서의 빈 싱글톤은 애플리케이션 전반의 싱글톤이 아닌 스프링 ApplicationContext 내에서의 싱글톤을 의미한다. 즉, new XXXService();를 하면 새로운 객체가 Context 밖에 생성이 된다는 의미이다. 🚗 싱글톤의 주의점 싱글톤은 모든 클라이언트가 공유하는 자원이기 때문에 인스턴스 변수가 존재하면 안된다. 만약 인스턴스 변수를 의도치 않게 하나의 클라이언트에서 변경하게 되면 모든 클라이언트에게 ..
스프링에서 싱글톤 빈을 사용해도 위험하지 않은가?
2022. 2. 14. 23:26
Spring
스프링은 싱글톤 빈인데 어떻게 여러 요청을 한 번에 처리하지? 이런 생각이 든 이유는 10개의 요청이 들어왔다고 할 때 싱글톤 빈들을 공유할텐데 어떻게 같이 사용하지? 요청당 쓰레드가 할당 되는 것은 맞는데 이상한데?? 모르겠다. 그냥 뭔가 이상했다. 이상한 점 멀티 쓰레드가 하나의 빈을 사용할 수 있나? 기다려야 하는 것 아닌가? 동시에 사용이 가능하다면 값이 변경되면 위험한거 아닌가? 어떻게 한개의 빈이 여러 요청을 처리할 수 있는거지? 해당 글을 읽고나니 당연하게 알고 있는 내용이었다. 그래도 정리 해보자. 멀티 쓰레드가 하나의 빈을 사용할 수 있나? 기다려야 하는 것 아닌가? 멀티 쓰레드는 CPU당 하나의 쓰레드를 기본적으로 생성하게 된다. CPU가 4개이면 8개의 쓰레드를 2개씩 나누어서 한다고..
스프링의 빈 스코프
2022. 1. 14. 08:34
Spring
빈 스코프란? 보통은 싱글톤 빈을 사용하게 된다. 싱글톤 빈은 스프링 컨테이너의 시작 → 종료까지 유지되는 스코프를 가졌다. 스코프라는 것은 빈이 살아있는 범위를 의미한다. 빈 스코프의 종류 싱글톤 → 기본 스코프, 스프링 컨테이너 시작 → 끝 프로토타입 → 의존 관계 주입까지 살아있음. 매번 새로운 객체를 생성한다. → 싱글톤 빈은 스프링 컨테이너 생성 시점에 초기화 메서드가 실행되지만 프로토타입은 빈 조회(ac.getBean)할 때 초기화 메서드가 실행이 된다. 즉, ac.getBean()을 할 때 의존관계 주입이 일어난다. → 스프링 컨테이너가 종료될 때 종료 메서드가 호출되지 않는다. 호출하려면, 조회한 빈에서 직접 호출해주어야 한다. 웹 스코프 request : 웹 요청이 들어오고 나갈 때 까지..