JPA 3

[개발일지] Fetch join을 통한 N+1 문제 해결

부트캠프를 하고 있는데 학습 자료를 블로그에 올리면 안 된다는 공지 때문에 공부 내용을 못 올리고 있습니다 ㅠ  따로 진행 중에 있는 프로젝트에서 fetch join을 쓸 상황이 생겼고,쓸 것도 없겠다 아직 블로그에서 한 번도 다뤄보지 않은 fetch join을 통한 N+1 문제 해결을 정리해보겠습니다 ~ 문제 상황위는 쿼리가 두 번 나가는 문제 상황입니다. 현재 엔티티에는 끔찍하게 연관관계가 걸려있는데요 Fetch Type을 Lazy로 설정해두었기 때문에 resume 엔티티를 조회했을 때, ManyToOne 관계를 제외한OneToMany 관계에 있는 것들은 전부 프록시에 담기고 실질적인 데이터가 담기지 않습니다. 이 프록시 객체에 접근할 때 실제 쿼리가 나가게 되는 것인데요 이 때문에 resume 엔티..

[JPA] API 개발과 성능 최적화 2 (컬렉션 조회 시 성능 최적화)

컬렉션 조회 최적화엔티티 직접 노출@GetMapping("/api/v1/orders")public List orderV1(){ List all = orderRepository.findAllByString(new OrderSearch()); reuturn all;}현재 하이버네이트 버전 5를 bean으로 등록 시켜준 상황이어서 영속성 컨텍스트에 전부 객체가 들어와 있는 상태다. 추가적으로 양방향 관계는 다 @JsonIgnore을 다 만들어주어야 한다. 이 방법은 역시 저번에도 설명했던 것 처럼 엔티티를 직접 노출하기에 단점이 굉장히 많아,사용하면 안 된다. 엔티티를 Dto로 변환@GetMapping("/api/v2/orders")public List orderV2(){ List orders = ord..

spring/JPA 2024.08.10

[JPA] 객체 지향 쿼리 언어 JPQL 4(기본 문법 - 조인, 서브쿼리, 조건식 , 기본 함수)

조인내부 조인:select m from Member m [inner] join m.team t외부 조인:select m from Member m left [outer] join m.team t세타 조인:select count(m) from Member m, Team t where m.username = t.name[]는 생략이 가능하다. 조인 - ON 절조인 대상 필터링이 가능하다.예) 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인JPQL: select m, t from Member m left join m.team t on t.name = 'A'SQL: select m.*,t.* from Member M left join Team t on m.team_id = t.id and t.name = 'A..

spring/JPA 2024.08.03