안녕하세요
현재 Spring boot + JPA 를 사용해보려고 이것저것 하고 있는데...
많은분들이 경험하셨던 것처럼 저도 무한재귀 현상을 겪었습니다.
물론 무한재귀를 해결하는 방법은 간단하게 cycle 을 끊어버리면 되지만 (@JsonIgnore 를 사용한다던가 뭐..)
@OneToMany , @ManyToOne 같은 양방향 상황에서
어느쪽에서 요청하든 값을 가져와야 하는... 그런 짜증나는 상황이 발생하게 된겁니다...
예를들어서....
BBS 테이블이 있고 Tail 이 있는데 말 그대로 게시판과 댓글 테이블입니다.
1개의 게시글에는 N 개의 댓글이 달릴 수 있는 그런 1:N 관계형 테이블인거죠
JPA 객체로 본다면 BBS 객체를 조회하면 Tail 배열을 갖고올 수 있어야 하고 , Tail 객체를 조회하면 해당 댓글이 포함된 BBS(게시글) 객체를 갖고올 수 있어야 하죠
Bi-directional 으로 값을 갖고와야 하는데... Json 은 이럴경우 객체 양쪽에 참조가 있으니까 무한재귀를 타게됩니다.
무한재귀를 @JsonIgnore 또는 @JsonManagedReference, @JsonBackReference 를 사용해서 끊을 수 있겠지만
이건 말 그대로 단방향만 지원합니다. 그러므로 위와 같이 양방향을 다 참조해야된다 라는 전제가 붙으면 Json Serialize 위배됩니다.
그러면서 찾은것이 바로 @JsonIdentityInfo 인데요... 이놈이 reference 를 봐도 도통 이해가 안됩니다....
여러 테스트를 해봤는데도 이해가 안되고... 더 짜증나는건 deserialize 에서도 문제가 발생한다는겁니다....
property에 설정한 값이 존재하지 않을경우 절대 deserialize 되지 않는데... 혹시 이런저런 문제를 경험하신 분이 계신가 궁금합니다.
보통 어떻게 해결하시는지요??
참고로 저는 Entity(VO) 객체를 @RequestBody 값으로 받고 싶고 @ResponseBody 값으로 내보내고 싶습니다... 다른 VO객체를 만들기는 싫어서;;;