@JsonIgnore [Spring]

jbong·2025년 2월 3일
0

스프링부트

목록 보기
5/15

배경

RestAPI로 구현을 하던 와중에 db에 저장된 데이터에 대해 GET 요청을 보내고 데이터를 확인 하려고 하니, JSON 데이터가 무한히 반복되고 있는 현상을 겪었다.

원인

문제의 원인은 두 테이블간 참조 관계에 속해 있을 때 두 테이블의 객체간에 서로 순환 참조를 하는 경우, 순환 참조로 이해 JSON 직렬화 과정에서 무한 루프가 발생하고 있던거였다.

예를 들어 movie 테이블과 actor 테이블이 있을 때 두 테이블 간 특정 객체간에 서로 순환 참조를 한다면 다음과 같이 참조하여 무한 반복이 발생한다.

해결 방법

1. @JsonIgnore


public class Actor {
 
    // 위 코드는 생략
    
    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "movie_id", nullable = false)
    private Movie movie; 
}
코드에서 Actor 클래스는 현재 Movie 테이블의 movie_id를 참조하는 것을 볼 수 있는데, @JsonIgnore 어노테이션을 이용하지 않는다면, 각 두 테이블은 순환 참조를 하는 상황이 발생하여 json 데이터가 무한으로 반복되는 현상이 일어날 수 있다. 따라서 @JsonIgnore를 사용하여 방지할 수 있다.

2. Dto

데이터 전송 객체(Data Transfer Object, DTO)를 사용하여 필요한 데이터만 포함하여, 순환 참조가 발생하지 않도록 하게 할 수 있다.
profile
노력하는 개미

0개의 댓글