NHN Cloud 2019 강연

https://www.youtube.com/watch?v=rYj8PLIE6-k

Spring JPA의 사실과 오해

  1. 단방향이면 항상 충분한가?
  2. N+1 문제는 EAGER fetch 전략 때문이다?
  3. findAll() 메서드는 N+1 문제를 발행하지 않는다?
  4. Fetch Join에서의 흔히하는 실수

Spring Dat JPA Repository의 사실과 오해

  1. JPA Repository 메소드로는 JOIN 쿼리를 실행할 수 없다?
  2. Page Interface vs Slice Interface
  3. JPA Repository 메소드로는 DTO Projection을 할 수 없다?
    1. Class 기반 (DTO) Projection

      • DTO에 @Value 애노테이션
      • Collection<MemberDto> findByName(String name) (그대로임)
    2. Interface 기반 Projection

      • 인터페이스에서 getName만 선언
      • Collction<MemberNameOnly> findByCreateDateAfter(LocalDateTime createDate);
      • select name from Members where create_dt > {createDate}
      public interface MemberNameOnly{
      	String getName();
      	// 계층 구조 지원
      	List<MemberDetailDto> getDetails();
      
      	interface MemberDetailDto{
      	// Member 아래 MemberDetail 아래 pk 아래 type
      	@Value("#{target.pk.type}")
      	String getType();
      	String getDescription();
      	}
      }
      
      
    3. Dynamic Projection (제네릭!)

      • <T> Collector<T> findByCreateDateAfter(LocalDateTime createDate, Class<T> type);