티스토리 뷰

728x90
***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   pagingApiController defined in file
┌─────┐
|  qnaService defined in file
↑     ↓
|  sellerService defined in file
└─────┘


Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

 

문제

정확히 문제가 발생한 배경은 qnaService에 있던 판매자인지 여부를 확인하는 메서드를 떼어내서 sellerService에 넣고 발생했다.

 

근데 더 문제는 로직을 아무리 째려봐도 순환적인 문제가 발생하지 않았음

그냥 딱 한 번만 확인하고 넘어가기 때문에 로직의 순환 문제가 아니라는 것을 말한다는걸 알아챔

 

해결

원인은 로직의 개념에서 참조를 말하는 것이 아니라

단순히 Bean이 서로를 참조하고 있는지에 대한 여부를 말하고 있다는 것이었음

 

본인 문제의 원인은 "사용하고 있지 않던" qnaService가 sellerService에 존재함으로서 참조를 하려고 해서 발생한 문제였다.

 

@Service
@Transactional
@RequiredArgsConstructor
public class SellerService {

    private final QnaService qnaService;

 

위 qnaService가 사용하지 않고 있었음에도 순환참조 문제를 발생시킨 원인이었다.

 

해당 필드를 지움으로서 문제 해결!

 

스프링 자체에서 순환 참조가 가능하게 만들 수 있는 아주 쉬운 방법이 있었지만 만약 이게 로직적으로 잘못된 개념이었다면 나중에 훨씬 더 큰 기회 비용으로 고쳐야 되는 것을 알았기에 근본적 원인을 찾고자 하였다.

 

로직 문제가 아니었던게 다행이고 필요없는 코드는 그때 그때 지우자는 교훈을 얻었다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
29 30 31
글 보관함