스프링 핵심 원리(기본편)

Ch06. 컴포넌트 스캔 - 중복 등록과 충돌

webmaster 2022. 2. 20. 18:46
728x90
  • 컴포넌트 스캔에서 같은 빈 이름을 등록하면 어떻게 될까? 다음 두 가지 상황이 있다. 
    • 자동 빈 등록 vs 자동 빈 등록 
    • 수동 빈 등록 vs 자동 빈 등록 자동

빈 등록 vs 자동 빈 등록

  • 컴포넌트 스캔에 의해 자동으로 스프링 빈이 등록되는데, 그 이름이 같은 경우 스프링은 오류를 발생시킨다.
    • ConflictingBeanDefinitionException 예외 발생

수동 빈 등록 vs 자동 빈 등록

  • 만약 수동 빈 등록과 자동 빈 등록에서 빈 이름이 충돌되면 어떻게 될까?
  • 자동 빈 등록 VS 수동 빈 등록

    • 수동 빈 등록이 우선 순위를 가진다.
    • 이 경우 수동 빈 등록이 우선권을 가진다. (수동 빈이 자동 빈을 오버 라이딩해버린다.)
  • 물론 개발자가 의도적으로 이런 결과를 기대했다면, 자동보다는 수동이 우선권을 가지는 것이 좋다. 하지만 현실은 개발자가 의도적으로 설정해서 이런 결과가 만들어지기보다는 여러 설정들이 꼬여서 이런 결과가 만들어지는 경우가 대부분이다! 그러면 정말 잡기 어려운 버그가 만들어진다. 항상 잡기 어려운 버그는 애매한 버그다. 그래서 최근 스프링 부트에서는 수동 빈 등록과 자동 빈 등록이 충돌 나면 오류가 발생하도록 기본 값을 바꾸었다.
  • application.properties에 spring.main.allow-bean-definition-overriding=true 옵션을 켜어야지만 SpringBoot에서 오류 없이 실행 하지만 명확하지 않게 빈 설정을 하는 것보다는 명확하게 빈 설정을 하도록 하는 것이 더 좋다(수동 빈 설정이 우선순위를 가지는 걸 안다고 하여도 다른 개발자들과 협업을 해야 하기 때문에 고려하여 작성)
728x90