1일1배움/Spring (김영한 님)
[23/04/05] 왜 스프링은 싱글톤으로 빈을 만드는 것일까?
kim chan jin
2023. 4. 5. 17:54
토비 Vol1 p.105
GPT에게 물어봄.
내가 모르는 개념들이 나와서 나중에 다시 돌아와서 공부하자.
싱글톤 패턴은 객체를 오직 하나만 생성하도록 보장하여 자원을 효율적으로 관리할 수 있게 해주는 패턴입니다. 그러나 싱글톤 패턴에는 여러 가지 문제점이 있습니다. 예를 들어, 상태가 있는 객체에 대해서는 상태가 공유되는 문제가 발생할 수 있으며, 의존성이 있는 객체들 간의 결합도가 높아져 유연성이 떨어질 수 있습니다. (응집도와 결합도를 구분하자)
스프링은 이러한 문제점을 해결하기 위해 빈(Bean)을 싱글톤으로 만듭니다. 스프링에서는 컨테이너가 빈의 생성과 소멸을 담당하며, 스프링에서는 빈을 싱글톤으로 만들어 관리합니다. 이를 통해 객체를 여러 개 생성하는 문제와 메모리 누수 등의 문제를 방지할 수 있습니다.
또한 스프링에서는 싱글톤 빈이라고 해서 반드시 상태가 공유되는 것은 아닙니다. 스프링에서는 싱글톤 빈의 상태를 공유하지 않도록 하는 방법들을 제공합니다. 예를 들어, 빈 스코프(Scope)를 지정하여 요청(Request), 세션(Session) 등의 범위를 갖게 하거나, ThreadLocal을 사용하여 각 스레드별로 고유한 상태를 갖게 할 수 있습니다.
따라서, 스프링에서 빈을 싱글톤으로 만드는 것은 객체 생성 및 자원 관리를 효율적으로 하기 위한 것이며, 스프링에서는 싱글톤 빈을 사용하면서도 상태 공유 등의 문제점을 해결할 수 있는 방법들을 제공하고 있습니다.