카테고리 없음

[JPA] JSON 직렬화 순환 참조 해결하기

숲별 2022. 12. 12. 18:25
728x90

순환 참조.

JPA에서 양방향으로 연결된 엔티티를 JSON 형태로 직렬화하는 과정에서, 서로의 정보를 계속 순환하며 참조하여 StackOverflowError 를 발생시키는 현상

.

직렬화.

객체/데이터를 바이트 형태로 변환하여 네트워크를 통해 송수할 수 있도록 만드는 것

 

1. Entity 대신 DTO 로 반환

  • 가장 추천하는 방식이다.
  • Entity 클래스는 데이터베이스와 맞닿는 핵심 클래스이다.
  • Entity 클래스를 기준으로 수많은 클래스나 비즈니스 로직들이 동작하고 있다.
  • Entity 클래스를 통해 여러 클래스들이 영향을 받을 수 있으므로 Entity 클래스를 Request/Response 클래스로 사용하는 것은 강력하게 추천하지 않는다.
  • 컨트롤러에서 Response 값으로 여러 테이블을 조인해야하는 경우가 많으므로, DB Layer 와 View Layer 의 역할 분리를 철저하게 해주자.
  • 역시나 객체지향 설계에 있어서 역할과 책임은 중요한 요소인 것 같다.

 

2. @JsonManagedReference & @JsonBackReference

양방향 관계에서 직렬화 방향을 설정하여 순환 참조를 해결할 수 있도록 설계된 애노테이션

@JsonManagedReference

  • 연관관계 주인 반대 Entity 에 선언
  • 정상적으로 직렬화 수행

@JsonBackReference

  • 연관관계의 주인 Entity 에 선언
  • 직렬화가 되지 않도록 수행

 

3. @JsonIgnore

  • 양방향 관계를 가지고 있는 두 엔티티 중 하나의 엔티티의 참조 필드에 직렬화를 제외시키는 방법
  • JSON 직렬화 과정에서 해당 애노테이션이 선언된 필드는 직렬화 대상에서 제외
  • 해당 필드가 직렬화에 필요할 경우에는 적합하지 않은 방법

 

https://data-make.tistory.com/727

 

[JPA] JSON 직렬화 순환 참조 해결하기

[JPA] JSON 직렬화 순환 참조 해결하기 순환 참조. JPA에서 양방향으로 연결된 엔티티를 JSON 형태로 직렬화하는 과정에서, 서로의 정보를 계속 순환하며 참조하여 StackOverflowError 를 발생시키는 현상

data-make.tistory.com