본문 바로가기

JPA

(2) Mysql 실행 계획 분석 및 쿼리 튜닝 1. 서론2. 쿼리 응답 속도3. 부하 테스트4. 실행 계획 분석5. 쿼리 튜닝6. Spring에서 쿼리 힌트7. 결과8. 결론과 마무리 1. 서론지난 글에서 QueryDsl을 사용하여 DTO 조회로 극한의 성능 최적화를 진행했었습니다. 그때 결과적으로 약 6배 이상의 성능이 개선되었는데,데이터를 가져오는 양과 트랜잭션 범위의 차이에 의한 것이라고 생각했었습니다. 하지만 김영한님의 강의에서 요즘은 네트워크 성능이 좋아졌기 때문에 성능상 크게 차이가 나지 않을 것이라 하였고, 그렇다면 트랜잭션의 범위 차이와 user_roles 쿼리 한번의 추가로 6배나 차이가 생길까? 하는 의문이 계속 들었습니다. 그래서 테스트 했던 것을 다시 회고하는 중에, 엔티티로 모두 조회하는 쿼리에 포함되어 있던 distinct가.. 더보기
스프링 JPA 테스트 코드에 무심코 적용한 @Transactional 스프링 프로젝트에서 많은 사람들이 JUnit으로 테스트 코드를 작성할 때, @Transactional 어노테이션을 사용한다. 하지만 Spring Data JPA와 함께 Service 테스트 클래스에 @Transactional을 무심코 사용한다면 예상하지 못한 테스트 실패나 누락이 발생할 수 있다. 문제 상황 1:N 연관 관계에 있는 엔티티들을 fetch join으로 잘 조회되는지 테스트하고자 했다. @Entity public class Board extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "board_id") private Long boardId; @ManyToOne(fetch = F.. 더보기