일대다 양방향 매핑에서 다음과 같은 오류가 나면서 뭔가 코드상으로 무한루프를 도는 에러가 생겼다.
PostMan으로 찍어봤는데 이런식으로 무한정으로 post가 이루어짐 ㅠㅠ
@PostMapping("api/scrap/{userId}/{articlePK}")
public ScrapArticle scrapArticle(@PathVariable("userId") String userId,
@PathVariable("articlePK") Long articlePK) {
return scrapArticleService.scrapArticle(userId, articlePK);
}
양방향 연관관계 매핑을 맺고 있는 Entity를 response( api 의 return 값)으로 주게 될 경우 이런 문제가 생긴다. (여태까지는 이런문제가 없었던게 항상 DTO로 감싸서 response 줘서 문제가 없었다.. 이번에는 기능 테스트 먼저 해보려고 하다보니 이런 오류가 ㅠㅠ)
ManyToOne, OneToMany 양방향 관계에서 ScrapArticle 엔티티를 조회할때
스프링에서 JSON변환을 담당하는 Jackson 라이브러리를 이용해 Entity 객체를 그대로 JSON 문자열으로 변환시키게 되는데
ScrapArticle 객체의 member 필드가 ScrapArticle 엔티티를 참조하고, Member 객체의 scrapArticle 필드가 Member 엔티티를 참조 하고 이를 변환 시키는 과정에서 같은 데이터가 반복적으로 출력이 되는 무한 루프가 발생하는 순환 참조 문제이다.
양방향 관계에서 정방향(자식->부모) 참조할 변수에 어노테이션을 추가하면 직렬화에 포함된다
일대다 양방향 관계에서 다
즉, @ManyToOne
어노테이션이 붙은 필드 부분에 해당 어노테이션을 추가로 붙여주면 된다.
양방향 관계에서 역방향(부모->자식) 참조로 어노테이션을 추가하면 직렬화에서 제외된다
일대다 양방향 관계에서 일
즉, @OneToMany
어노테이션이 붙은 필드 부분에 해당 어노테이션을 추가로 붙여주면 된다.
사실 가장 좋은 방법은 항상 API 의 response로는 DTO만 줄 것,,, Entity 자체를 주는 것은 문제가 참 많다