@JsonBackReference @JsonManagedReference
꽤 중요한 어노테이션을 배웠다.
항상 양방향 연관관계를 맺은 엔티티끼리 순환참조되어 json 파싱 오류가 나면 필요없다고 판단되는 쪽에 @JsonIgnore로 해결해왔었는데, 이 순환참조 문제를 위한 어노테이션이 따로 있었음을 알았다. @JsonIgnore는 항상 응답에서 아예 제외되기 때문에 나중에 프로젝트가 확장됨에 따라 부작용이 생길 수 있을 것이다.
사용방법은 간단하다.
일대다 관계라고 하면, 일(부모) 쪽에 @JsonManagedReference를 달고, 다(자식) 쪽에 @JsonBackReference를 달면 끝이다.
이 순환참조 문제가 Member -----------1:N-------------- MemberAchievement ------------------M:1----------------- Achievement
이 관계에서 나타나서, Member 쪽에 @JsonManagedReference를, MemberAchievement쪽에 @JsonBackReference를 달아 해결하고, Member를 조회할 때 Achievement까지 불러왔어야 했으므로, 원래 양방향이었던 오른쪽 관계를 단방향으로 바꾸어서 처리했다.
앙방향으로 유지하면 역시 순환참조 문제가 발생해 어노테이션을 활용해야 했는데, 그러면 Achievement를 못 불러왔기 때문이다.
순환참조 문제를 해결하는 방법을 정리하면 이렇다.
1. @JsonIgnore
2. @JsonManagedReference, @JsonBackReference
3. Dto 사용
4. 양방향 -> 단방향으로 변경
엔티티 자체가 계층 간에 전달되는 것이 큰 문제가 없다면 어노테이션을 활용하면 코드가 깔끔하고, dto를 사용해야한다면 상황에 따라 코드가 지저분해질 수 있기는 하다.
'이노베이션 캠프' 카테고리의 다른 글
캠프 회고 (0) | 2022.11.05 |
---|---|
[TIL] 78일차 (0) | 2022.10.20 |
[TIL] 68일차 (0) | 2022.10.10 |
[TIL] 61일차 (2) | 2022.09.30 |
[TIL] 60일차 (0) | 2022.09.29 |