출처
순수한 DI 컨테이너
순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다
객체를 새로 생성한다.
고객 트래픽이 초당 100이 나온다면
초당 100개 객체가 생성되고 소멸된다.
즉 메모리 낭비가 심하다.
해결방안은 싱글톤 패턴을 이용하여
해당 객체가 딱 1개만 생성되고 공유하도록 설계하면 된다.
싱글톤 패턴
> 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다.
private 생성자를 이용하여
외부에서 new 연산자를 통해 임의로 객체를 생성할 수 없도록 막는 방법이다.
싱글톤 컨테이너
> 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서
객체 인스턴스를 싱글톤으로 관리한다.
스프링 컨테이너 덕분에
고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라,
이미 만들어진 객체를
공유해서 효율적으로 재사용할 수 있다.
즉, 스프링은 싱글톤 방식으로 동작한다.
* 싱글톤 방식의 주의점 *
싱글톤 방식은 하나의 같은 객체 인스턴트를 여럿이서 공유를 하기 때문에
상태를 유지하게 설계하면 안된다!
즉 무상태(stateless)로 설계해야한다.
무상태란 무엇인가?
> 특정 클라이언트에 의존하고 있는 필드가 있으면 안된다.
> 특정 클라이언트가 값을 변경할 수 있으면 안된다.
> 가급적이면 읽기만 가능하도록
> 공유되지 않는 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다.
** 공유 필드는 항상 조심 **
스프링 빈은 항상 무상태로 설계를 하자!
'여니의 프로그래밍 study > Spring & Spring Boot' 카테고리의 다른 글
[스프링부트] Maven과 Gradle의 차이점 (0) | 2022.03.20 |
---|---|
[스프링부트] 프로젝트 생성하기 (0) | 2022.03.03 |
[스프링부트] 스프링 컨테이너와 스프링 빈 (1) | 2022.01.16 |
[스프링부트] 스프링 컨테이너와 스프링 빈 (1) | 2022.01.16 |
[스프링부트] loC, DI, 컨테이너 (0) | 2022.01.15 |