본문 바로가기
728x90

JPA8

[Spring] Bulk Insert 성능 개선 이전에 Querydsl Bulk Update 성능 개선 글을 포스팅했고 이번에는 Bulk Insert에 대한 내용을 다루려고 한다. 아마 Querydsl의 블로그 마지막 편이 아닐까 싶다. 좋은 공부 거리가 있으면 다시 포스팅할 수도... JDBC에는 rewirteBatchedStatements라고 해서 Insert 합치기 옵션이 있다. 이 옵션이 활성화되어 있어도 JPA에서는 auto_increment 일 때 Insert 합차기 기능이 적용되지 않는다. JPA를 이용한 Bulk Insert와 JDBC를 이용한 Bulk Insert를 비교해보자. 1. JPA Bulk Insert public void jpaBulkInsert() { List bulk = Lists.newArrayList(); for(in.. 2022. 11. 27.
[Spring] Querydsl Bulk Update 성능 개선 일괄 업데이트 최적화에 대해 방식에 대해서 글을 정리해보고자 한다. JPA 사용하다 보면 더티 체킹(Dirty Checking)을 많이 사용하게 된다. 더티 체킹에 대해서 궁금하면 이 전 포스팅 글을 한번 읽어보는 것을 추천한다. 간단하게 설명하자면 조회된 엔티티의 변경 사항을 자동으로 데이터베이스에 반영해주는 기능이다. 1000건 ~ 10000 건등의 대량의 엔티티의 변경을 해야 한다면 해당 엔티티들을 조회해서 엔티티의 값을 변경하는 방식으로 개발이 될 것이다. 이러한 방식은 성능을 저하시키는 악영향을 끼치게 된다. 테스트 코드와 성능을 비교해보자. license 1000건의 엔티티를 조회해서 name을 업데이트하는 방식으로 테스트 진행해보자. 1. Dirty Checking 방식 @Transactio.. 2022. 11. 26.
[Spring] JPA 더티 체킹 (Dirty Checking) Querydsl 벌크 업데이트 대해서 글을 정리하려고 했는데 더티 체킹에 대한 내용이 있어서 먼저 더티 체킹에 대해 글을 써보려 한다. JPA 더티 체킹(Dirty Checking) Transaction안에서 Entity의 변경 상태를 확인하는 과정을 말한다. 즉, Entity의 상태 변경 검사를 뜻한다. Transaction은 두 가지 방식을 사용한다. 1. Class 또는 Method에 @Transactional Annotation을 사용하는 방식 @Transactional public void updateUser(Long id, String name) { Player player = playerRepository.findById(id); player.setName(name); } 2. EntityT.. 2022. 11. 25.
[Spring] Querydsl Join 성능 개선 Querydsl exists 성능 개선에 이어서 Querydsl Join에 대한 글을 정리해보려고 한다. 일단 Cross Join에 대해서 간단하게 정리해보자 Cross Join은 상호 조인이라 불리며, 한 테이블의 모든 컬럼들과 다른 테이블의 모든 컬럼들을 조인되는 기능이며 성능상 잘 나오지 않는다. 두 테이블의 나올 수 있는 모든 경우의 수를 대상으로 하기 때문에 성능이 좋을 수 없다. 그래서 Cross Join은 피하는 게 좋다. 왜 Cross Join을 이야기하는가? 오늘 성능 개선에 대한 내용의 주인공이다. 테스트용 @OneToOne 세팅 Member Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTI.. 2022. 11. 21.
300x250