본문 바로가기

JPA/JPA + SpringBoot7

(X To Many ) 컬렉션 조회 최적화 김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다. https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C 지난 포스팅에서는 to ONE 연관관계를 가진 엔티티를 조회시에 패치 조인을 사용해서 쿼리를 최적화할 수 있었다. 하지만 이번에는 to MANY관계일 때인데, 이는 간단하게 패치조인을 사용한다고 해서 해결되지 않는다. +추가로 그전에 현재 프로젝트에는 hibernate5 module이 빈으로 존재한다. 이 친구가 있으면 엔티티 반환시에 프록시로 존재하는 엔티티는 반환하지 않는다. 만약 Order엔티티에 member엔티티가 연관관계로 있고, Order리포지토리를 사용해서 Order들을 find했다면 member엔티티들은 프록시 객체일 것.. 2021. 9. 14.
(X To ONE ) LAZY로딩에 의한 N+1문제 해결 김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다. https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C DTO를 반환시에 모든 연관관계마다 LAZY로 설정하고, 엔티티를 반환하기 보다 DTO객체에 담아 반환하는 것은 반드시 필요하다. EAGER로 설정되면 만약 멤버 엔티티가 name, address, orders, 를 포함하고 있을 때, orders에 대한 정보는 필요하지 않은데, orders까지 가져온다면 이는 쓸데 없는 쿼리가 나가 성능을 저하시킬 수 있기 때문이다. 그렇다면 LAZY를 설정하고 DTO객체에 필요한 데이터만 담는다 해서 모든 것이 해결될까? 그것은 물론 아니다. LAZY로 인해 연관관계가 있는 엔티티를 조회할 때, N.. 2021. 9. 8.
JPA 엔티티 수정 (merge와 dirty checking) 김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다. https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C 변경감지(dirty checking)와 병합(merge) 엔티티 수정은 두가지 방법이 있습니다. 1. 변경감지 (dirty checking) 2. 병합 (merge) 그 전에 준영속 상태에 대해 알아야합니다. 준영속 엔티티: JPA가 더는 관리하지 않는 엔티티, 즉 영속성 컨텍스트에서 더 이상 관리되지 않는 엔티티를 말합니다. (https://kingchan223.tistory.com/139?category=870827) 우리가 엔티티를 수정한다면 해당 엔티티는 준영속 상태입니다. 이렇게 준영속 상태인 엔티티를 dirty checkin.. 2021. 7. 31.
회원 관련 기능 구현하기, 테스트 회원에 대해서는 아래와 같은 기능을 구현합니다. • save() • findOne() • findAll() • findByName() member와 관련된 service, repository를 만들어보겠습니다. 파일 구조는 아래와 같습니다. 먼저 데이터 베이스에 직접 접근하는 MemberRepository를 먼저 보겠습니다. MemberRepository @PersistenceContext: 엔티티 메니저( EntityManager ) 주입. 원래는 JPA영속성 컨텍스트에 접근하기 위해서는 Persistence 객체를 통해 EntityManagerFactory를 만들고, 팩토리에서 EntityManager를 만들어 사용해야합니다. (영속성 컨텍스트: https://kingchan223.tistory.co.. 2021. 7. 28.