본문 바로가기

JPA

2월 22일 JPA API 개발 고급

속도가 느린것 외 성능 등

등록 수정은 1건씩 진행되기 때문에 성능과 연관이 없고 

주로 성능문제는 조회에서 문제가 발생

 

지연로딩과 조회성능 최적화 (매우 중요)

주문 + 배송정보 + 회원조회 API 개발

지연로딩 때문에 발생하는 성능문제 단계쩍 해결.

 

V1. 엔티티를 노출하는 경우

@GetMapping("/api/v1/simple-orders")

public List<order> orderV1(){

List<order> all = orderRepository.findAllByString(new OrderSearch());

return all;

}

 

1차 문제 = 만약 order 가 member와 delivery와 양방향 연관관계라면

서로 무한루프에 빠지게 된다. (서로 읽어 오려고 시도한다)

1차 해결법 = 양쪽중 한쪽의 필드에 @JsonIgnore를 넣어 막아주면 된다.

 

2차 문제 = order를 가져오는 order에 member는 fetch가 lazy 지연로딩이다.

그래서 JPA가 조회시점에 프록시 ProxyMember를 만들어서 넘겨주면 되는데

ByteBuddyInterceptor가 들어있게된데.

이걸 읽지못해서 문제발생

 

2차문제 해결법 = jpa에게 프록시에 대해서 아무조취 안하게 하면 되는데

hibernate5module을 추가하면된다,

그럼 프록시 지연로딩에 대해서는 null값을 반환하게 된다.

설정에 따라 값을 가져올 수도 있지만 가급적 사용x

 

직접 엔티티 노출을 하지말고 , 지연로딩 설정을 함부로 즉시로딩으로 바꾸면 안된다.