Trouble Shooting : 순환 참조 문제

mangez_js·2025년 1월 13일

Study

목록 보기
38/47

순환 참조 문제

Spring Boot나 Hibernate를 사용하여 양방향 연관 관계를 정의했을 때 직렬화 과정에서 문제가 발생할 수 있습니다.
순환 참조는 객체 A가 객체 B를 참조하고, 객체 B가 다시 객체 A를 참조하는 상황을 의미합니다.

@Entity
public class ChatRoom {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "chatRoom")
    private List<Message> messages;
}

@Entity
public class Message {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "chat_room_id")
    private ChatRoom chatRoom;
}

해결 방법

@JsonManagedReference와 @JsonBackReference

Jackson 라이브러리가 제공하는 @JsonManagedReference와 @JackBackReference를 활용

  1. @JsonManagedReference
  • 부모 역할의 필드에 붙입니다.
  • 역할 : JSON 직렬화 시 포함할 필드로 저장합니다.
  1. @JsonBackReference
  • 자식 역할의 필드에 붙입니다.
  • 역할 : JSON 직렬화 시 제외될 필드로 저장합니다.

효과

  • 문제 해결 : 순환 참조로 인한 스택 오버플로우 문제가 해결되었습니다.
  • 정확한 직렬화 : 부모-자식 관계를 유지하면서 JSON 데이터를 직렬화 할 수 있습니다.

0개의 댓글