이전 글에서 다루지 못했던 N+1 관련 내용들을 추가적으로 다룰 예정이다. 이번 글에서 다룰 내용은 다음과 같다.Join 과 Fetch Join 의 차이PagingMultipleBagFetchExceptionDTO엔티티엔티티는 이전 글에서 사용한 Post, Comment 엔티티를 다시 가져오되, Post 엔티티의 연관관계에 Attachment 엔티티가 추가되었다.@Entity@Table(name = "post")@Getter@NoArgsConstructorpublic class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 50, nullable = false) priv..
N + 1 문제란?1번의 쿼리 결과에 대한 N번의 추가 쿼리가 발생하는 문제를 나타낸다.상황별 N + 1 문제 정리쿼리를 조회하는 다양한 상황이 있을 수 있다. 다대일 관계에서 조회를 할 수 있고, 반대로 일대다 관계에서 조회를 할 수 있다.연관관계 엔티티의 글로벌 패치 전략이 Eager 일 수도 있고 Lazy 일 수도 있다.엔티티 전체를 조회할 수도 있고, 단일 엔티티를 조회할 수도 있다.조회를 할 때 Spring Data JPA 를 사용할 수도 있고, Hibernate 를 사용할 수도 있다.fetch join 을 사용할 수도 있고, 사용하지 않을 수도 있다.이번 글에서는 이러한 상황별로 조회 쿼리를 실행했을 때 어떠한 결과가 나타나는지 정리해보려고 한다.글로벌 페치 전략연관관계의 엔티티를 조회하는 시..

Controller 란In Spring’s approach to building web sites, HTTP requests are handled by a controller. You can easily identify the controller by the @Controller annotationIn Spring’s approach to building RESTful web services, HTTP requests are handled by a controller. These components are identified by the @RestController annotationcontroller 는 스프링에서 HTTP 요청(과 응답, 예외 등)을 처리한다. controller 임을 나타내기 위해 ..
name vs referencedColumnName엔티티 필드에 연관관계를 설정할 때 @JoinColumn 어노테이션을 사용할 수 있다.@JoinColumn 의 속성 중 name 과 referencedColumnName 가 혼동돼서 정리해두려고 한다.두 속성은 외래키와 연관이 있다. 외래키는 한 테이블에서 다른 테이블의 행을 식별하기 위해 사용한다.nameThe name of the foreign key column.자신의 테이블에 선언한 외래키 컬럼명이다.다른 테이블의 행을 식별하기 위해 해당 테이블에 선언한 외래키의 컬럼명을 뜻한다.referencedColumnNameThe name of the column referenced by this foreign key column.참조하는 테이블에 선언된 ..