본문 바로가기

강의 정리/스프링 부트와 JPA활용 23

3. OSIV와 성능 최적화 Open Session In View : 하이버네이트 Open EntityManager In View : JPA spring.jpa.open-inview is enabled by default spring.jpa.open-in-view : true (default) OSIV ON (spring.jpa.open-in-view : true) 언제 JPA 가 DB connection 을 가져오는가? DB Transaction이 시작할 때, JPA 가 database connection 을 가져온다. 언제 JPA 가 DB connection 을 반환하는가? osiv가 켜져있으면, 유저한테 response 가 나간 뒤에 반환한다. 단점 너무 오랫동안 DB 커넥션을 갖고있는다. 실시간 트래픽이 중요한 애플리케이션에.. 2021. 1. 9.
2. 컬렉션 조회최적화 1. 1:N fetch join의 문제점 1:N 에서 join을 하면 N 개의 row 가 나오는 문제점이 있다. orders(1) : order_item(n) 의 연관관계의 경우 조인하면 아래와같이 로우가 4개 생긴다. 위의 조인된 컬럼에서 중복을 제거하고 싶다.. 어떻게? JPA의 distinct 를 사용해서 제거한다. DB에 distinct 키워드 제공 엔티티가 중복인 경우, 중복을 제거해서 컬렉션에 담아주는 기능을 제공한다. em.createQuery( "select distinct o from Order o" + " join fetch o.orderItems oi" + " join fetch oi.item i", Order.class).getResultList(); 단점 1:N fetch join.. 2021. 1. 9.
1. 지연 로딩과 조회 성능 최적화 1. 순환참조가 있는 엔티티를 직접 반환하는 API 의 문제점과 해결책 순환참조가 있는 엔티티를 반환하는 api를 사용하면 순환참조로 인한 무한루프가 발생 해결책 (비추천) : @JacksonIgnore FetchType.LAZY 인 경우, 프록시를 통한 가짜 객체를 생성하는데, Jackson이 파싱하지 못하는 에러 발생 해결책 (비추천) : implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5' 모듈을 등록 Hibernate5Module을 빈으로 등록하여 프록시는 Jackson 이 파싱하지 않도록 함 애초에 엔티티를 직접 반환하지말고, DTO로 변환하는 정책을 사용하자. 2. Dto 로 감싸서 반환하도록 하는 API 로 변.. 2021. 1. 7.