Board
와BoardReply
사이에 1:N 양방향 매핑이 되어있는데
Board
에서List<BoardReply>
를 조회하는 경우
조회된BoardReply
는Board
를 다시 조회하고,
다시 조회된 Board는List<BoardReply>
를 또 다시 조회하면서
Board
와BoardReply
사이의 사이클이 생성되며 무한루프에 빠지게 된다
🌎 링크참조
1. 양방향 관계에서 직렬화 방향을 설정해주어 순환참조를 해결할 수 있도록 설계된 annotation을 @JsonManagedReference
또는 @JsonBackReference
를 사용한다!
@JsonManagedReference
➡️ 연관관계의 주인의 반대 entity에 선언한다
직렬화를 정상적으로 수행하도록 한다@JsonBackReference
➡️ 연관관계의 주인 entity에 선언한다
직렬화가 진행되지 않도록 수행한다
해당데이터를 포함시키지 않는 어노테이션 @JsomIgnore
을 사용한다
이 어노테이션을 사용하면 JSON 데이터에 해당 프로퍼티는 null로 들어가게 된다
DTO를 사용
순환참조의 상황이 발생한 주 원인은 양방향 매핑
이기도 하지만, 더 정확하게는 entity를 직접 반환한것이 순환참조 발생의 큰 원인중 하나이다
➡️ entity 자체를 return 하는것이 아니라, DTO객체를 만들어 필요한 데이터만 반환하면 순환참조 관련 문제를 사전에 방지 할 수 있다