Error

JPA 양방향 참조관계 무한 루프 [Infinite recursion]

kkkkkdddddhhhhh 2023. 8. 12. 18:08

게시물 리스트 조회 API테스트중 말로만 듣던 양방향 참조 무한루프에 빠졌다....

 

Infinite recursion

해결 방안으로 DTO 사용과 Jackson Annotaion 활용 두 가지가 있었는데

 

Jackson Annotaion 활용 방안으로

- @JsonManagedReference@JsonBackReference 가 존재한다.

어노테이션을 활용하는 방안보다 DTO로 응답하는것이 더 코드가 깔끔하고 최선의 방법이라 생각해 DTO를 활용하는것으로 고민을 했는데

 

?? 난 이미 컨트롤러에서 DTO로 응답하고 있었는데....

@GetMapping("/api/todolist")
public ResponseEntity<List<TodoListViewDTO>> getTodoList(){
List<TodoListViewDTO> todoList = todoBoardService.getTodoList().stream().map(TodoListViewDTO::new).toList();
return ResponseEntity.ok().body(todoList);
}

뭐가 잘못된건지 고민을 하다 DTO Class 에서 Entitiy를 DTO로 변환하는 과정에서 큰 결함을 발견했다...

 

Member 값을 DTO를 변환하면서 Member를 참조할 수 밖에 없는 코드였다....

 

그래서..

 

 

멤버를 DTO로 변환할때에 멤버 Entity에서 아이디만 받아 DTO로 변환하고 ->

type을 String으로 수정하고 dto를 응답하는 식으로 DTO Class를 수정했더니....

 

편안하다

응답 JSON도 깔끔하게 응답하고

 

 

테스트도 문제없이 성공 할 수 있었다!