Programming/삽질일지

[6/22 TIS] configuration에서 발생할 수 있는 순환 참조에 주의하자.

JKROH 2023. 6. 22. 01:57
반응형

 프리 프로젝트를 진행하고 테스트를 위해 애플리케이션을 실행하는 과정에서 순환참조 문제가 발생했다. 생성자 레벨에서 순환 참조를 최대한 주의했기 때문에 어느 부분에서 순환 참조 문제가 생기는지 알 수 없었다. 순환참조가 발생한다고 알려주는 클래스 들에서는 생성자 레벨에서의 DI에 의한 순환참조는 발생하지 않았다.

 

 문제 상황은 Configuration 클래스와 Service클래스에서 발생했다. 도저히 뭐가 문제인지 모르겠어서 구글링을 진행했고, 비슷한 사례를 겪으신 분의 글을 발견해 해결할 수 있었다.

 

https://velog.io/@platinouss/Spring-Circular-References-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0

 

[Spring] 순환 참조(Circular References) 해결하기

순환 참조 발생 원인 및 해결 방법에 대해 기술해보고자 한다.

velog.io

 

 이 분과 마찬가지로 나 역시 Configuration에서 Bean을 통해 PasswordEncoder를 만들고 있었다. 그리고 만들어진 PasswordEncoder를 Service에서 사용했다. 문제는 해당 Configuration에서 PasswordEncoder를 사용하는 Service를 DI받고 있다는 것이었다.

 

 Configuration을 만들기 위해선 Security가 필요하다. 그런데 Security가 만들어지기 위해선 Configuration에서 만드는 PasswordEncoder가 필요하다. 이렇게 순환참조가 발생한 것이다.

 

 문제상황은 위의 분과 마찬가지로 새로운 Configuration을 만들어 PasswordEncoder를 Bean등록하는 방법으로 해결했다.

 

 Configuration을 통해 Bean객체를 등록할 때는 해당 Bean 객체가 어디에 사용되는지에 유의하자.

반응형