졸업 프로젝트를 진행하면서 수많은 오류들을 만났는데 다음에 다시 만날것 같은(만나지 말아야겠지만) 오류들을 한번 정리해보려고 한다.
프론트엔드에게 Json형식으로 데이터를 넘겨주는 중 오류가 발생했는데, 찾아보니 무한 참조 오류였다.
우리가 데이터베이스를 설계할때 연관관계를 양방향매핑으로 설정해놓은것이 있었는데 이것 때문에 문제가 발생한 것이였다.
그리고 나는 별 생각없이 Dto를 사용하지않고, jpa에서 리턴한 entity를 그대로 프론트에게 넘겨주었다.
그래서 내가 User entity를 리턴했을때
User review컬럼에서 Review테이블참조 --> Review테이블의 user컬럼에서 또 User참조 --> 반복,,,
위와 같은 무한참조가 일어나면서 재귀호출의 깊이가 엄청나게 깊어져 stackOverflow
가 발생하였다.
entity를 그대로 리턴하면 연관 관계가 있는 테이블 전체가 함께 리턴되기 때문에, dto를 사용하여 참조하는 테이블 전체가 아니라 필요한 컬럼만을 리턴하도록 한다.
양방향 매핑이 필요없다면 한방향 매핑을 통해 이를 방지할 수 있다. 나도 데이터베이스 설계를 할때 이를 잘 고려해야겠다.