본문 바로가기

Back/Java

싱글턴은 빈 스코프의 일부일 뿐이다.

스프링을 공부하다가, Scope 라는 빈의 라이프사이클에 대한 내용을 공부했는데 상당히 흥미로운 내용을 발견했다.

 

실제로 프로젝트를 진행하면 포틀릿 관련된 내용을 자주 접할 수 있었다. 도대체 이게 뭐시당가 라면서 고민했지만 하던대로 코딩해도 문제가 없었으니 넘어갔던 기억이 난다.

 

하지만 여기서 이걸 볼 줄이야...

내용은 다음과 같다.

 

 

0. Scope 정의는 기본적으로 Bean 생성 및 소멸을 어떻게 할 것인가? 그것에 대한 정의라고 볼 수 있다.

1. 스프링에서 Bean 정의를 할 때, 특정 목적에 맞도록 Scope 정의를 할 수 있다.

2. 싱글턴, 프로토타입 같은 기본적인 정의가 존재한다.

3. 웹에서 사용하는 Request, Session 또한 Bean Scope 일부다.

4. Global Session 방식은 포틀릿 기반 웹 앱에서 사용하며, MVC 기반 앱 내 모든 포틀릿 간 공유가 가능하다. !!!

5. Thread 요청이 있을 경우 새로운 빈 인스턴스를 생성하고 반환되며, 동일한 Thread 한해서만 동일한 빈이 제공된다.

 

 

4번을 보면 Global Session 이라는 방식을 사용한다면 모든 포틀릿 간 실시간으로 공유가 가능하며 작업을 할 수 있다.

이 방식은 대규모 앱 제작 시, 실시간으로 적용되고 변경되는 앱 상태를 확인하며 눈으로 보면서 작업할 수 있는 앱 제작용 앱에서 확인할 수 있었다.

 

하도 싱글턴에 대한 이야기가 많아서 그게 핵심이고 전부인 줄 알았는데, 앱 자체가 고도화되고 특수한 목적을 달성하기 위해서 제작된 경우에는 싱글턴 보다는 다른 Scope 선택하는 비중이 훨씬 높은 것 같다.