GitHub

https://github.com/Choidongjun0830

2024/07 23

[JPA 활용 2편] API 개발 고급 - 컬렉션 조회 최적화

컬렉션인 일대다 관계 (OneToMany)를 조회하고 최적화하기. 일인 쪽이 하나고, 다 쪽이 3개면 전체 row가 3줄로 뻥튀기가 된다. 이 경우에는 최적화하기 어렵다.  주문 조회 V1: 엔티티 직접 노출엔티티를 직접 노출하기 때문에 사용하면 안된다. 주문 조회 V2: 엔티티를 DTO로 변환DTO안에 엔티티가 있으면 안된다. 이 경우에도 다 노출이 되어버린다. 엔티티에 대한 의존을 완전히 끊어야 한다. 속에 있는 엔티티도 DTO를 만들어서 바꿔주어야 한다. 하지만 N+1 문제 발생주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화데이터가 뻥튀기 된다고 하셨는데 Hibernate6부터는 distinct가 되어서 뻥튀기 되지 않음.hibernate5를 사용하면 em.createQuery()를 ..

Spring 2024.07.05

[JPA 활용 2편] API 개발 고급 - 지연 로딩과 조회 성능 최적화

주문 + 배송 정보 + 회원을 조회하는 API를 만들기 간단한 주문 조회 V1: 엔티티를 직접 노출 -> 무한 루프에 빠지게 됨. 주문에서 멤버로, 멤버에서 주문이 있네? 주문으로양방향이 걸리는 필드를 @JsonIgnore 해주어야 함.하지만 이러면 500 오류가 남.또는 Hibernate5Module을 등록해서 사용해야함.하지만 엔티티를 직접 노출하면 데이터 그대로 노출하는 것이라 좋지 않다. 이 방식을 사용하면 안된다.DTO로 변환해서 사용하는 것이 좋다.지연 로딩을 피하기 위해 즉시 로딩으로 바꾸면 안됨. 연관 관계가 필요없는 경우에도 데이터를 항상 조회해서 성능 문제가 발생한다. 간단한 주문 조회 V2: 엔티티를 DTO로 변환 이 방식이면 엔티티가 바뀌어도 api 스펙이 바뀌지 않아서 좋다. 하지..

Spring 2024.07.03
728x90