컬렉션 조회 최적화 - 엔티티 직접 노출

HotFried·2023년 11월 24일
0

코드

@RestController
@RequiredArgsConstructor
public class OrderApiController {
    private final OrderRepository orderRepository;

    @GetMapping("/api/v1/orders")
    public List<Order> ordersV1() {
        List<Order> all = orderRepository.findAllByString(new OrderSearch());
        for (Order order : all) {
            order.getMember().getName();
            order.getDelivery().getAddress();
            List<OrderItem> orderItems = order.getOrderItems();
            
            orderItems.forEach(o -> o.getItem().getName());
        }
        return all;
    }
}

주의점 & 정리

  • hibernate5Module 이용 시 지연 로딩 필드를 null로 출력하게 된다.
    이 때, 필요한 정보는 강제 초기화를 해 출력할 수 있다.
  • 양방향 연관관계면 무한 루프에 걸리지 않게@JsonIgnore 를 추가

  • 엔티티를 직접 노출하는 방법은 지양해야 한다.

참고하면 좋을 글
1. API 호출 시 FetchType.Lazy -> Json 오류 (InvalidDefinitionException - ByteBuddyInterceptor)
2. API 호출 시 FetchType.Lazy -> 무한루프


참고 :

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

profile
꾸준하게

0개의 댓글