Open toychip opened 8 months ago
코드를 최적화 시켜보시오
public class House{
private List<People> people=new ArrayList<>();
private Dog dog;
}
public List
엔티티로 조회하는 것보다, DTO로 리포지토리를 조회하는 경우 다음과 같은 특징이 있다.
💯 쿼리방식 선택 권장 순서
기존에 default값이 OSIV가 켜져 있는 상태인데 이 상태는 트랜잭션이 끝나도 ,API 가 유저한테 반환될때까지 혹은 유저한테 화면이 렌더링될때까지 영속성 컨텍스트가 계속 살아있다 즉 DB connection을 물고 있다.
이 점 때문에 오랫동안 DB 커넥션 리소스를 사용할 수 있어서, 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자랄 수 있다.
김영한 강사는 고객서비스의 실시간 API는 OSIV를 끄고, 커넥션을 많이 사용하지 않는 곳에서는 OSIV를 켠다고 한다.
엔티티 조회 방식은 페치 조인이나 hibernate.default_batch_fetch_size, @BatchSize와 같이 코드를 거의 수정하지 않고 옵션만 약간 변경함으로써 다양한 성능 최적화를 시도할 수 있다. 반면에 DTO를 직접 조회하는 방식은 성능을 최적화하거나 성능 최적화 방식을 변경할 때 코드를 많이 변경해야 한다.
일대다 조인으로 데이터가 예측할수 없이 증가함. 일대다에서 일을 기준으로 페이징을 해야되는데 다를 기준으로 row가 생겨버림. => 1+n문제 발생. 따라서 batch size를 적용하여 페이징을 한다
xToOne은 fetch 조인하면서 페이징처리가 동시에 가능하다. xToMany는 이것이 동시에 불가능하다. 그렇기 때문에 xToMany은 fetch join을 사용하지 않고 지연로딩을 그대로 가져가면서 BatchSize를 설정하거나 default_batch_fetch_size를 설정한다.
📌 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
학습기간: 11월 15일까지