두 객체가 양방향참조일 경우, Response로 넘겨주기위해 Json 으로 파싱할때 문제가 발생한다. 두개의 entity가 서로를 계속 불러오면서 똑같은 데이터가 중복되어 나타난다.
flowchart LR
Post--> Comment-->Post
해결방법
- @JsonIgnore
Json 데이터에 해당 프로퍼티는 null 로 넘어간다.
- @JsonManagedReference & @JsonBackReference
순환참조를 방어하기위한 Annotation이다.
부모클래스에 @JsonManagedReference, 자식클래스에 @JsonBackReference 를 추가한다.
- @JsonIgnoreProperties
부모 클래스(Post entity)의 Comment 필드에 @JsonIgnoreProperties({"post"}) 를 붙여주면 순환 참조를 막을 수 있다.
- DTO 사용
순환참조 문제는 정확하게 따지면 양방향매핑된 entity 자체를 response로 리턴한데에 있다. Entity 자체를 resturn 하지 말고, dto 객체를 만들어 필요한 데이터만 옮겨담아 return 하면 된다.
- 매핑 재설정
양방향 매핑이 꼭 필요한지 다시 한번 생각해본다, 만약 양쪽에서 접근할 필요가 없다면 단방향으로 변환해주자.