@JsonManagedReference, @JsonBackReference, @JsonIgnore

메밀·2024년 8월 27일

팀 프로젝트 중 조원의 코드에서 초면인 어노테이션 발견!

순환참조 이슈

결론적으로 셋 다 JSON 직렬화 과정에서의 순환참조 문제 때문에 사용하는 어노테이션들이다.

이번 프로젝트가 SNS 비스무리한 거라 게시글-해시태그 간 양방향 매핑이 되어있는데,
이때 게시글을 직렬화하려고 하면, 게시글 내부의 해시태그들을 직렬화하려 하고,
해시태그들 내부에 있는 게시글을 또 직렬화하려고 하고,

이렇게 무한한 직렬화의 늪에 빠진 뒤 StackOverFlow가 난다.

@JsonManagedReference

연관관계의 주인이 아닌 Entity에 선언
평범하게 직렬화한다.

	// Article.java
    
	@JsonManagedReference
    @OneToMany(mappedBy = "article", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Hashtags> hashtags = new ArrayList<>();

@JsonBackReference

연관관계의 주인 엔티티에 선언
직렬화 X

	// Hashtag.java

	@JsonBackReference
    @ManyToOne
    private Article article;

@JsonIgnore

이걸 붙이면 아예 JSON 데이터에 null로 들어간다.

몰랐던 이유

Entity를 반환해본 적이 없었음...

0개의 댓글