팀 프로젝트 중 조원의 코드에서 초면인 어노테이션 발견!
결론적으로 셋 다 JSON 직렬화 과정에서의 순환참조 문제 때문에 사용하는 어노테이션들이다.
이번 프로젝트가 SNS 비스무리한 거라 게시글-해시태그 간 양방향 매핑이 되어있는데,
이때 게시글을 직렬화하려고 하면, 게시글 내부의 해시태그들을 직렬화하려 하고,
각 해시태그들 내부에 있는 게시글을 또 직렬화하려고 하고,
이렇게 무한한 직렬화의 늪에 빠진 뒤 StackOverFlow가 난다.
연관관계의 주인이 아닌 Entity에 선언
평범하게 직렬화한다.
// Article.java
@JsonManagedReference
@OneToMany(mappedBy = "article", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Hashtags> hashtags = new ArrayList<>();
연관관계의 주인 엔티티에 선언
직렬화 X
// Hashtag.java
@JsonBackReference
@ManyToOne
private Article article;
이걸 붙이면 아예 JSON 데이터에 null로 들어간다.
Entity를 반환해본 적이 없었음...