본문 바로가기
728x90

JPA8

[Spring] Querydsl exists 성능 개선 테스트용 테이블 test1 생성하고 Date 값을 300만건 생성하였다. 조회 대한 테스트는 test1 테이블로 진행해보겠다. 조건에 대한 데이터가 존재하는지에 대한 쿼리 1. count로 조회하여 count > 0 조건으로 존재 여부를 파악할 때 select COUNT(*) > 0 from test1 where create_at > '2022-11-01'; 실행시간 : 331 ms 2. exist로 존재 여부를 파악할 때 select exists(select * from test1 where create_at > '2022-11-01'); 실행시간 : 10ms 두 가지 방식은 실행시간 차이가 많이 난다. 데이터양이 많아질수록 실행시간에 대한 차이는 더 커질 것이다. 이유는 정말 간단하다. 1번 방식은 .. 2022. 11. 20.
[Spring] Querydsl Repository 구현 Querydsl 설정은 Querydsl Gradle 설정 참고 이전 글 작성할 때 테스트했던 player table로 querydsl을 적용해보자. Player Table QuerydslConfiguration @Configuration public class QuerydslConfig { @PersistenceContext private EntityManager entityManager; @Bean public JPAQueryFactory jpaQueryFactory() { return new JPAQueryFactory(entityManager); } } JPAQueryFactory를 서비스에서 주입받아 사용하기 위해 Configuration을 설정해야 한다. Entity Class 생성 player.. 2022. 11. 19.
[Spring] Querydsl Gradle 설정 (Gradle 7.X) Gradle에 Querydsl Dependencies 설정 dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.querydsl:querydsl-jpa' // Querydsl 추가 annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // 아래는 NoClassDefFoundError 발생 시 추가 고려사항.. 2022. 11. 18.
[JPA] N+1 문제 1. N+1 문제란? JPA에서 요청이 1개의 쿼리로 처리되길 기대했는데 N개의 추가 쿼리가 발생하는 현상으로 1:N 또는 N:1 관계를 가진 Entity 조회할 때 발생하게 된다. 이 문제는 서버와 DB 간의 악영향을 끼치는 큰 문제인데 10만, 100만 개 등의 많은 양의 데이터를 N+1의 DB 조회가 일어난다고 가정해보면 분명 서비스의 큰 문제가 발생하게 될 것이다. 정말 무섭다. 예전에 N+1 문제로 한참을 고생했던 기억이 있어서 다시 되새길 겸 N+1문제에 대해 다시 정리해보려고 한다. (그만큼 중요하다고 생각되는 문제) 2. Test 설정 테스트 위해 table 2개를 만들었다. note와 memo table이고 두 table에 관계는 1:N 관계로 간단하게 설정하였다. note table i.. 2022. 11. 12.
300x250