🚨에러노트

[Sloved][SPRING] Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR & java.lang.StackOverflowError: null & Infinite recusion 무한참조에러

디카페인라떼 2022. 10. 22. 03:29
문제상황

서버도 잘 돌아가고 아무 무리없이 진행하던 중에 갑자기 팀원 한병이 UX를 해보던 중에 버그가 있다고 하였다.

아까까지만해도 잘되고 있던 로그인에서 갑자기 콘솔에서 

 

🧨Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR  

 

에러가 뜬다고 하여 나도 급하게 접속을 해보니 같은 에러가 나타났다

 

서버로그를 확인해보니 

🧨java.lang.StackOverflowError: null  

 

검색을 해보니 Lombok 사용으로 인한 순환참조에러라고 한다. (toString)?

그런데 에러로그를 더 내려보고나서야 제대로된 원인을 찾을 수 있었다.

 

🧨Infinite recusion (StackOverflowError) : ..

 

아주 친절하게도 무한 참조 / 무한 재귀 라고 알려주고 있다..

 

 

해결방법

Entity를 Json으로 변환 시 즉, Entity ro Json Serilaize 할 때 일어나는 문제이다.

Entity를 Json으로 변환하면서 , 연관된 객체를 다시 Json으로 변환하고 다시 연관된 객체를 변환하고... 무한으로 반복되면서 StackOverflow Error를 뱉는 것이다.

 

무한 참조에러를 해결하는 방법은 여러가지가 있는데 일단 알고있었던 @JsonIgnore를 추가하여 해결하였다. 

 

👉 서버를 빨리 정상화 시키는 것이 우선이었기에 다른 것은 찾아 보지 못하고 일단 이 방식으로 하였다. 추후 좀더 좋은 방법으로 수정해야 겠다

 

👉@JsonIgnore은 Json화 과정에서 아예 배제시키는 것이기 때문에 지양한다고 한다.

 


@JsonManagedReference

  • 무한 참조를 방어하기 위한 어노테이션이다 . 부모 클래스에 @JsonManagedReference를 추가해주고 
@JsonBackReference

  • 자식클래스에 @JsonBackReference를 추가해주면 된다.