[2일차] 순환참조 . .

Woozy9ucci·2022년 10월 22일
1

오늘 JpaRepository를 활용하여 코딩을 하던 중 순환참조를 두번째 맞이하였다. . .
처음 맞이 했을 때는 Dto에 옮겨담으면서 쉽게 해결 했지만
오늘은 장시간 테스트 및 코딩에 지쳐 머리가 돌아가지 않는 상태에서 맞이해서 그런지
알고 있음에도 간단히 해결하지 못했다. . .
또한 @ManyToMany 의 지양 과 헷갈려 명확한 개념이 잡히지 않았기도 했다.
문제는 다음과 같다.

  • 단순 편의를 위해 양방향 연관관계를 맺는게 적절했는지 설계단계에서 충분히 살피지 못했다.
  • 편의를 위해 양방향으로 관계설정을 했다면 @JsonIgnore 어노테이션을 통해 Json Convert 시
    보여주지 않아도 되는지 미리 파악하지 않았던 점이 패착이였다.
  • JsonIgnore 하지 않아도 방법이 있다.
    반환될 객체의 멤버로 양방향 연관관계에 있는 Entity를 가지게 된다면 JsonConvert 할 때
    서로를 계속하여 참조하는게 문제이다.
    따라서 멤버로 갖을 때 Entity가 아닌 Dto에 옮겨담아 리턴해 주는 방법이 있다.
  • postList를 foreach문을 돌려 post.getComments 할 시 List를 받아오는데 이의 타입을 바꾸기 위해 2중 for문을 사용했다. 당장 해결에 급급해서..
  • 그렇지만 젊고 똑똑한 조원덕에 JpaRepository를 통해 DB에서 꺼내올 때
    Dto의 List로 받아오면 된다는 걸 알게되었다.
  • 다음에는 설계단계에서 유의하는 것이 중요 할 것 같다.

결론
1.양방향 관계설정이 되어있을 때
2.객체안에 해당 Entity가 있을 경우
3. @JsonIgnore 어노테이션이 없는 경우(붙이기 곤란한 경우) 순환참조가 발생하니 이에 유의하여 설계하도록하자.
4. 혹시 List안의 List와 같은 상황을 마주쳤을 때 JpaRepo에서 받아올 때 Dto List로 받아오자!
5. https://thxwelchs.github.io/JPA%20%EC%96%91%EB%B0%A9%ED%96%A5%20Entity%20%EB%AC%B4%ED%95%9C%20%EC%9E%AC%EA%B7%80%20%EB%AC%B8%EC%A0%9C%20%ED%95%B4%EA%B2%B0/
그 외에 위와 같은 방법이 있더라
아래에도 @JsonManagedReference 등 좋은 해결책이 나와있다.
https://m.blog.naver.com/writer0713/221587351970

1개의 댓글

comment-user-thumbnail
2022년 10월 22일

퍼가요~

답글 달기