fetch join 2

@JsonIgnore, @JsonBackReference, @JsonManagedReference의 차이 및 FetchType.LAZY와의 관계

@JsonIgnore@JsonIgnore는 사실 OneToMany ManyToOne 등 객체간 참조관계를 원천적으로 차단하는데 사용되기 위해 설계된 것은 아니다. 이 어노테이션은 말그대로 return 해주는 json에서 지정된 컬럼을 제외하겠다는 어노테이션이다. 그래서, password와 같은 민감한 정보가 return값으로 나가지 않도록 사용되기도 하고, json에서 제외되다 보니, 순환참조를 끊는데 사용되기도 하는 것이다. @JsonManagedReference과 @JsonBackReference두 어노테이션은 두순환참조를 끊기 위해 설계되었다. @JsonManagedReference은 조회된 데이터를 정상적으로 serialize(직렬화)시킨다. 즉, 참조되는 데이터를 가져온다는 것이다. @Jsonb..

jpa - N+1문제 원인과 fetch를 통한 해결

N+1 문제란 일단 2테이블에 대한 join에서 발생하는 문제이다. left join 1번으로 끝낼수 있는 쿼리조회가 N번이나 더 추가적으로 더 발생하는 상황을 말한다. 상황 글쓴이테이블(author)과 게시글테이블(post)이 존재한다. jpa의 findAll()을 통해 모든 글쓴이에 대한 모든 게시글 정보를 JSON형태로 조회하고자 한다. 문제발생 아래와 같이 글쓴이테이블(author)이 존재한다. 글쓴이는 여러개의 글을 쓸수가 있고, 글쓴이에 대한 글 목록들을 조회하기 위해서는 post(글목록)테이블과 1 : N의 관계인 oneToMany를 설정해줘야 한다. 즉, author테이블과 post테이블을 join 해야 한다는 말이다. @Data @Entity @Table(name="author") pub..