[피노키오] JPA 양방향 mapping 시, 무한참조 문제 해결

조유정·2024년 1월 30일
0

피노키오

목록 보기
2/3

문제상황 : JPA 양방향 mapping 시 무한참조 문제 발생

doubt List > user > doubt List > user > doubt List > …

문제

해결방법 탐색하기

  1. Entity로 반환하지 않고, DTO를 적극 활용
  2. Json으로 직렬화 할 속성에서 무시 해버리기 (@JsonIgnore)
  3. 직렬화할 대상 객체의 toString override하여 재정의하기
  4. @JsonManagedReference@JsonBackReference 어노테이션으로, 직렬화 방향을 설정을 통해 해결
  5. @JsonIdentityInfo을 통해 순환참조될 대상의 식별키로 구분해 더이상 순환참조되지 않게 하기

해결하기

@JsonIgnoreProperties 어노테이션을 사용하여 Json 직렬화 속성에서 무시하는 방법을 택하였다.

@ManyToOne
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
@JsonIgnoreProperties({"doubtList"})
private UserEntity user;

@JsonIgnoreProperties 어노테이션의 의미는 doubt에 의해 호출된 user에서는 doubtlist 자료를 가져오지 말라는 것이다.

결과 확인하기

해결

doubt 데이터를 조회하였을 때, @JsonIgnoreProperties 어노테이션으로 설정한대로 user 데이터의 doubtlist는 무시하고 참조하고 있다.

앞으로의 진행 방향

  • 프론트엔드에서는 userId로 보내주던 데이터를 user로 보내주었을 때 처리를 할 수 있는가?
    • 현재 단계에서는 프론트엔드가 리팩토링 데이터를 처리할 수 있는지 확인할 수 없다.
    • 추후 문제가 발생한다면, DTO를 생성하여 기존 userId를 response 해주던 방식으로 변환하여 response 해줄 예정이다.
profile
나는 아직 멍청하다

0개의 댓글