📢 오류 사항
Ignoring exception, response committed already: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)
Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)]
💭 이유
스택 오버 플로우의 발생 원인은 JPA의 연관관계에 의한 상황이였다. JPA는 기본적으로 fetch 정책을 default로 LAZY하게 두는데 이로 인해 서로를 호출하게 되는 것이다.
예를 들면
나의 경우에는 사용자가 찜 해 놓은 물건을 사용자 정보 확인을 할때 가져오고 싶은데 연관관계로 인해 찜 목록을 다루는 Entity부분에서도 사용자를 호출하게 되는 것이다. 이로 인해 재귀적인 이슈가 발생하면서 오류가 발생하게 된 것이다.
처참한 현장....
💬 해결
1번. @JsonIngnore의 사용
이 어노테이션은 Jackson 라이브러리에서 제공하는 어노테이션으로 해당 필드가 JSON 직렬화 및 역직렬화 시 무시되도록 지정하게 된다. 그래서 주인 관계에 있는 아이 즉, 데이터를 여러개 가져오는 쪽에 해당 어노테이션을 입력하면 정상적으로 작동하는 것을 볼 수 있다.
2번. 단방향 매핑
사실 이게 가장 이상적이지 않은가 싶다. 양방향 매핑은 언제 어디선가 갑자기 문제를 일으킬 수 있다는 말을 들었다. 우리는 Entity에서 데이터를 뽑아서 DTO로 전환하고 데이터를 전달한다. 이때 DTO에 wishList의 내용을 삽입하도록 할 수 있게 되면 무한 반복하는 행위가 멈출 것이다.
'오류 모음집' 카테고리의 다른 글
💢 Redis를 통해 캐싱을 하면서 발생했던 오류 (0) | 2024.05.31 |
---|