티스토리 뷰

Bean의 스코프 알아보기


Bean의 싱글톤 스코프

  • Bean은 기본적으로 별다른 설정이 없다면 싱글톤의 스코프를 가진다
    • 싱글톤이란 ? 애플리케이션 전반에 걸쳐 Bean의 인스턴스가 오직 1개 뿐이다
  • 한번 직접 확인해보자!
  • Single 클래스와 Proto 클래스를 만들었다

Single 클래스와 Proto 클래스
ApplicationRunner를 통해 스프링부트를 실행시킬 때 해당 클래스의 run도 실행시킨다!

  • Single은 proto를 주입받았고 AppRunner는 Single과 proto를 주입받았다
  • AppRunner, Single 각각 Proto를 주입받았지만 싱글톤이기 때문에 둘은 같은 Proto를 참조하고있다!
  • 실행시켜서 결과를 확인해보자!

출력결과! 같다

  • 위에서 알 수 있듯이 기본적으로 싱글톤이다
  • 그럼 매번 인스턴스를 생성하는 프로토타입 스코프는 Bean 에 어떻게 적용할까?!

Bean의 프로토타입 스코프

  • Bean을 프로토 타입으로 만들기 위해서는 @Scope 애너테이션을 사용할 수 있다!

@Scpoe의 value값을 prototype으로!

  • 이번에는 Proto 에 single을 주입해 프로토 타입과 싱글톤 타입의 차이를 비교해보자!

  • Proto는 프로토타입 Single은 싱글톤 타입이다
  • Proto는 매번 컨테이너에서 Bean을 가져올 때 마다 새로운 인스턴스를 반환한다!
  • 결과를 통해 확인해보자

Proto는 매번 다르지만 Single은 항상 같음!

  • Proto와 Single의 차이를 바로 확인할 수 있다
  • 그럼 Bean을 주입하면서 두가지가 혼합될 때 문제는 없을까?!

프로토 타입 Bean -> 싱글톤 타입 Bean 참조할 때

  • 만약 프로토 타입의 Bean이 매번 같은 싱글톤 타입의 Bean을 참조할 때 어떻게 될까?

  • 이런 경우 우리가 의도한 대로 프로토 타입의 빈은 매번 같은 타입의 Single 빈을 사용할 수 있다!
  • 그래서 의도와 알맞게 흘러가서 문제가 발생하지 않는다!

싱글톤 타입 Bean -> 프로토 타입 Bean 참조할 때

  • 그럼 반대일 때는 어떻게 될까 ?
  • 싱글톤 타입의 Bean으로 매번 다른 타입의 프로토 타입 Bean을 참조하고 싶다고 가정하자

  • 위의 그림처럼 싱글톤 타입의 Single이 프로토타입의 Proto를 주입 받았다
  • 그럼 우리가 원하는대로 매번 다른 Proto를 참조할까 ?
  • 답은 아니다! 출력결과를 보자

  • 우리가 원했던 결과는 매번 다른 Proto를 참조하는 것이였지만 항상 같은 Proto를 사용한다!
  • 이유는 싱글톤의 Single에 처음 주입받은 Proto가 변하지 않기 때문이다!
  • 그럼 이렇게 쓰고싶을때 의도한대로 하려면 어떻게 해야할까?!

scoped-proxy 사용하기!

  • 방법 중 하나는 다이나믹 프록시로 Proto 타입을 감싸는 것이다!
  • 말은했지만 어렵다...! 아직 원리에 대해서는 완벽하게 이해하지는 못했다.. 뒤에서 다시 Proxy_pattern를 살펴보자!

  • 위와 같이 proxyMode를 ScopedProxyMode로 바꾸고 Proto Class이기 때문에 TARGET_CLASS를 주자
  • 그럼 결과는?!

  • 우리가 원했던 결과를 얻을 수 있다!
  • 위와 같이 사용하며 아래 그림과 같이 매번 바뀔 수 있는 Proxy로 Proto를 감싸고 매번 다른 값을 전달하는 것 같다!
  • 다시한번 proxy에 대해 읽어봐야지..! 마지막으로 싱글톤 객체 사용시 주의할 점에 대해 확인해보자!

 


싱글톤 객체 사용시 주의할 점

  • 싱글톤 객체를 사용할 때 생각해야할 부분은 해당 객체의 프로퍼티를 공유한다는 점이다!
  • 만약 여러개의 쓰레드가 같은 싱글톤의 특정한 값을 건드리면 원치 않는 값이 나올 수 있다!
  • OS에서 동기화 문제에 해당하는 것 같다! 이럴 때는 항상 해당 값을 안전하게 사용할 수 있도록 해야한다!

 

 

오늘은 빈의 스코프에 대해 살펴봤다

싱글톤은 한번 들어본적이라도 있어서 괜찮았다.

근데 Proxy에 대해서는 처음들어봐서 어렵다..!

Proxy에 대해 공부하고 나중에 또 한번 스코프를 봐야겠다!!

 

다들 열공~~~

 

댓글
댓글쓰기 폼
공지사항
Total
50,925
Today
33
Yesterday
42
링크
TAG
more
«   2021/02   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28            
글 보관함