본문 바로가기

공부 기록/영상 후기

[2019] Spring JPA의 사실과 오해

https://youtu.be/rYj8PLIE6-k

연관관계 매핑

단방향 vs 양방향

Entity 매핑 : Entity 클래스에 DB 테이블과 컬럼, 기본 키, 외래 키 등을 설정하는 것

연관관계 매핑 : DB 테이블의 외래 키를 객체의 참조와 매핑하는 것

- 다중성 : @OneToOne, @OneToMany, @ManyToOne, @ManyToMany

- 방향성 : 단방향, 양방향

-- 양방향 매핑은 단방향 매핑에 비해 반대 방향으로의 객체 그래프 탐색 기능이 추가된 것뿐, 대개의 경우 단방향 매핑이면 충분하다.

-- 일대다 연관관계 매핑에서 cascade를 통한 insert 시 양방향 관계를 맺어주면 추가적인 update 쿼리가 사라진다.

  

N+1 문제

Fetch 전략 : FetchType.EAGER, FetchType.LAZY

N+1 문제 : Entity에 대해 하나의 쿼리로 N개의 레코드를 가져왔을 때, 연관관계 Entity를 가져오기 위해 쿼리를 N번 추가적으로 수행하는 문제

- EAGER 전략 뿐만 아니라 LAZY 전략으로 설정해도 연관 Entity를 참조하면 추가적인 쿼리가 수행된다.

- findAll() 또한 N+1 문제가 발생할 수 있다.


Spring Data JPA Repository

JPA Repository와 JOIN

JPA Repository 메서드로도 JOIN 쿼리를 실행할 수 있다.

- "_"(underscore)를 통해 내부 속성값에 접근할 수 있다.

  

Page vs Slice

Page interface는 Slice interface를 상속받았다.

- Page 객체로 반환받을 때 select count(*)가 추가로 수행된다.

  

JPA Repository 메서드와 DTO Projection

JPA Repository 메서드로도 DTO Projection을 할 수 있다.

- Class 기반 Projection, Interface 기반 Projection, Dynamic Projection