Study22 Inner Join 과 Fetch Join 의 차이 💡 Fetch Join 을 사용할 때 발생하는 쿼리는 Inner Join 의 쿼리와 차이가 없는데 왜 Fetch Join의 성능이 좋을까? Inner Join 오직 JPQL에서 조회하는 주체가 되는 Entity만 조회하여 영속화 Fetch Join 조회의 주체가 되는 Entity 이외에 Fetch Join이 걸린 연관 Entity도 함께 SELECT 하여 모두 영속화 즉, FetchType이 Lazy 인 Entity를 참조하더라도 이미 영속성 컨텍스트에 들어있기 때문에 따로 쿼리가 실행되지 않는다 Inner Join(일반 Join) 의 가장 큰 문제인 N + 1 의 문제가 Fetch Join 에서는 해결됨 쿼리문의 차이 Inner Join public List findAllWithMemberDeliver.. 2022. 7. 29. 지연로딩과 조회 성능 최적화 쿼리 방식 선택 권장 순서 1. 우선 엔티티를 DTO 로 변환하는 방법을 선택한다. 2. 필요하면 패치 조인으로 성능을 최적화 한다. (보통 여기서 해결) 3. DTO로 직접 조회하는 방법을 사용 4. JPA가 제공하는 네이티브 SQL이나 스프링 JDBC Template을 사용해서 SQL을 직접 사용한다. 엔티티에 데이터 직접 조회 API @GetMapping("/api/v1/simple-orders") public List orderV1(){ List all = orderRepository.findAllByString(new OrderSearch()); for (Order order:all){ order.getMember().getName(); // Lazy 강제 초기화 order.getDelivery.. 2022. 7. 29. 회원 API 조회 개발 API 조회 개발 시 일반적인 간단 방법 하지만 이렇게 쓸 경우 응답 값으로 엔티티를 직접 노출하게 된다. 문제점 엔티티의 모든 값이 노출된다. 응답 스펙을 맞추기 위한 로직이 추가된다(@JsonIgnore, 별도의 뷰 로직 등등) 엔티티가 변경되면 API 스펙이 변경된다. API 조회 수정 엔티티를 조회하는 방법은 똑같지만 외부 MemberDto 를 따로 만들어주고 Result를 통해 JSON 데이터의 추가와 수정이 가능할 수 있도록 개발이 가능하다. 강의 : 인프런 실전! 스프링 부트와 JPA 활용2 (김영한) https://inf.run/5NP4 2022. 7. 26. API 개발 기본 API 개발 시 엔티티로 직접받는 경우 Member 엔티티를 이용해 member 의 값을 직접 받을 경우엔, 엔티티에 값이 변경이 생길 경우 API에 대해서 문제가 생길 확률이 높고 데이터에 대한 관리도 어려워져 불안정하다. API 개발 시 별도의 DTO를 이용해 받는 경우 CreateMemberRequest라는 별도의 DTO를 생성 해 데이터를 받은 뒤, Member 엔티티에 넣어주게 되면, 엔티티에 변동이 생겼을 때에도 안정적이고 API 데이터에 대해 안정적인 데이터 수급이 가능하다. 💡 API는 들어오고 나가는걸 절때 엔티티를 사용하지 않는다! 강의 : 인프런 실전! 스프링 부트와 JPA 활용2 (김영한) https://inf.run/5NP4 2022. 7. 25. 이전 1 2 3 4 ··· 6 다음