Before/JPA

[JPA] 일대일 연관관계 Json 파싱 문제 해결

bbyuk 2020. 8. 14. 15:31

현재 진행중인 프로젝트에서 유저 테이블에 프로필카드 관련된 모든 칼럼을 집어 넣어도 되지만 이후에 기능 추가나 서비스 종목 확장시에

 

유저 테이블을 수정하는데 어려움이 많을 것 같아 개발 초기 단계부터 테이블을 서로 분리해 일대일 연관관계로 매핑해두었다.

 

개발중 매칭 알고리즘을 적용해 프로필 카드의 리스트를 객체에 담아 리턴해주어야 하는 API를 개발해야 했는데

 

JPA가 일대일 매핑을 해두었던 유저 테이블의 인스턴스까지 모두 긁어 JSON파일로 묶으려해 발생한 에러이다

 

클라이언트로 유저 데이터는 공개하지않고 프로필카드의 데이터만 제공하는 방식으로 서비스를 개발하려 했기 때문에 일대일 연관관계의

 

주인 클래스로 가서 다음과 같이 @JsonIgnore 어노테이션을 적용해주니 에러가 해결되었다.

 

 

삽질의 과정

 

1. 테스트 데이터가 들어간 디비 테이블에서 유저 인증정보 하나를 가져옴 // API의 파라미터로 넘겨줄 예정!

 

 

 

2. 에러나는 코드부분

 

프로필카드와 연관되어 있는 부분인데 이부분 때문에 JPA가 프로필카드 데이터를 가져올 때 유저데이터를 가져오게 되고 유저 도메인에

 

매핑된 프로필카드의 인스턴스를 채우기 위해 또 같은 프로필카드 데이터를 가져오고,,,,, 계속해서 반복하다보니 무한하게 서로 참조하는

 

에러가 발생하기도 하고 그 부분을 피하려고 양방향 연관관계를 끊어도 보고 했지만 결국 다음과 같은 에러 발생

 

 

커스텀 Response message에 실제 에러 메세지를 담아서 리턴해준 response body이다. json으로 만드는 과정에서 에러가 난듯하다

 

https://jhkang-tech.tistory.com/92 다음 블로그에서 해결책을 찾았다.

 

 

정상적으로 프로필카드의 리스트를 객체에 담아 리턴하는 것을 확인할 수 있었다!

 

양방향 연관관계 매핑시 JSON으로 만드는데 주의해야할듯

 

 

 

 

나는 빠가사리였다.

 

일부러 엔티티를 컨트롤러단에 노출 안시키려고 dto를 만들어서 뿌리는 api로 만들고 있었는데 dto 안에서 엔티티 컬렉션으로 뿌린게

 

화근이었다,,, 하루 삽질,,,