오늘 마주한 문제들을 풀어보는 시간!
익숙하다. 한번 걸려봤던 바로 순환 참조에 걸렸다. 문제는 바로 TopsterService와 LikeService가 서로 순환참조를 해서 Bean을 떠줄 수가 없다는 것. 이를 해결하려면 한쪽 Service에만 의존성을 주입해줘야 한다. 그렇다면 어느 Service에 의존성을 주입해주는 게 좋을까? 이를 해결하러 성원 튜터님께 갔다가 진짜 청천벽력과 같은 이야길 들었다. 바로 종속된 entity에서는 상위 entity를 참조하는 것은 설계가 잘못 됐다는 것.... 진짜 이게 무슨소리야! 싶은 말이였지만 성원 튜터님의 설명을 듣다보니 정말 납득이 됐다.(물론 구현은 다른 문제다) 바로 하위 엔티티는 상위 엔티티를 찾아서 사용하는 것은 좋지 않다는 것. 지금 우리 코드에선 Like를 저장할 때 연관관계를 맺기 위해 LikeService에서 Like를생성한다 그 후 Topster를 Repository에서 findby를 이용해 찾아온 후, Like 엔티티에 Set시키면서 연과관계를 맺어준다. 이때 Topster를 찾는 과정이 설계상 오류였다. 왜냐하면 위에서 말했듯 종속된 엔티티는 상위 엔티티를 참조하는것은 안좋기 때문!! 따라서 이를 해결하기 위해서는 TopsterService에서 Like를 만들어서 LikeService에 Like Entity를 내려주는 식으로 로직을 작성해야 한다는 것. 이를 해결하기 위해선 Topster에 List<Like>를 만들고 Transaction을 걸어서 List에 add를 해주면 되지 않을까? 라고 생각해봤다.