반응형
MySQL Bulk Insert 적용하기spring: datasource: url: jdbc:mysql://localhost:3306/db?rewriteBatchedStatements=true jpa: properties: hibernate: jdbc: batch_size: 50 # 드라이버에 일괄 처리를 요청하기 전 hibernate가 일괄 처리할 쿼리의 최대 개수 order_inserts: true # 삽입되는 엔티티 유형과 기본 키 값을 기준으로 재정렬 order_updates: true # 변경되는 엔티티 유형과 기본 키 값을 기준으로 재정렬주의할점으로는 IDENTITY ID 전략은 배치 INSERT를 사용할 수 없다.I..
order_inserts와 order_updates를 사용하면 동일한 엔티티 타입이 그룹화되어특히 연관관계가 설정된 엔티티에 cascade 옵션을 설정해 저장할 경우에 DB에 전송되는 쿼리가 효과적으로 줄어든다.하지만 공식문서에서도 성능 저하가 발생할 수 있으므로, 이 설정 전과 후의 벤치마크를 통해 실제로 애플리케이션에 도움이 되는지 확인해보라고 한다. 물론 수만개의 엔티티를 로드하면 flush 전까지 하이버네이트 세션에 캐싱해놓기 때문에 저장할 엔티티가 너무 많다면 OOM이 발생할 수 있다.여기에 추가로 메모리가 간당 간당한 상황에서 order_inserts와 order_updates 이 사용되면 더욱 성능에 영향을 미칠 수 있을 것이다. 해당 옵션의 기능이 무엇인지? 왜 성능에 영향을 미치는지? 언..
DTO를 조회 하되, 그 안에도 엔티티가 있을 경우 DTO로 변환해서 사용해야한다. 아래 그림은 Order와 OrderItem 엔티티의 일부 코드로 "1 : 다" 양방향 관계를 갖고 있는 것을 볼 수 있다. 이 전 포스팅에서 엔티티를 직접 반환하면 안되는이유에 대해 알아봤었다. [Spirng/JPA] Dto와 Entity를 분리해서 사용하는 이유 프로젝트를 진행하거나 강의, 책을 보면 항상 엔티티를 직접 반환하지말고 DTO로 변환하여 반환하라는 말을 접하거나 보았을 것이다. 하지만 단순히 "아 ~ 그렇게 하라니까 그렇게 해야지" 보다 hstory0208.tistory.com 컬렉션도 마찬가지다. 컬렉션도 엔티티를 DTO로 변환해서 반환해야한다. Order와 OrderItem이 연관관계를 갖고 있는 것 처..