JPA 관련하여 DB query 지연 발생시 질문이 있습니다.
안녕하세요. 현재 실무에서 mybatis를 사용하고 있지만, 주도적으로 JPA를 실무에 도입하고 싶어 공부중인 주니어 개발자입니다.
한가지 궁금한 점이 생겼는데요.
어느 하나의 db table select 쿼리에서 지연이 발생한다면,
mybatis는 mapper의 쿼리 실행 계획을 보고 직접 query를 개선할 수 있는데,
JPA의 경우는 query를 자동으로 생성해주기 때문에 메소드 선언만으로는 개발자가 디테일한 쿼리 수정을 할 수 없다고 생각합니다.
이 경우, 차선으로 JPA가 생성해주는 query를 테스트 코드나 yml 설정을 통해 로그로 확인하고
JPQL을 사용해서 성능 개선을 해야하나요 ??
(DBA가 Java를 모른다는 전제 하에 이러한 궁금증이 생겨서 질문드립니다 ^^)
답변 1
0
안녕하세요. FRODO님^^
네 맞습니다. JPQL을 사용해서 성능을 개선하면 됩니다.
좀 더 자세히 설명드릴께요.
mybatis나 스프링 JdbcTemplate처럼 SQL을 직접 다루면 SQL을 직접 복사해서, 실행계획 툴에 넣거나 해서 실행계획을 바로 확인할 수 있습니다.
JPA는 JPQL을 사용하기 때문에 JPQL을 수정하면 됩니다. JPQL을 실행해서, 로그나 콘솔에 찍힌 SQL을 뽑은 다음에 실행계획을 확인하고, JPQL을 수정하면 됩니다.
저도 생각해보니 95% 정도의 문제를 대부분 JPQL로 해결했습니다. 그런데 정말 가끔 JPQL로 해결이 안되면, 대신에 native SQL을 직접 할 수 있습니다. 이런 경우 JPA가 제공하는 native SQL을 사용하거나 또는 스프링 JdbcTemplate를 사용하면 됩니다.
질문해주신 메소드 선언만으로는 개발자가 디테일한 쿼리를 수정할 수 없다고 생각합니다.
-> 이 부분은 스프링 데이터 JPA를 말씀하시는 것 같네요^^ 스프링 데이터 JPA도 @Query를 통해 JPQL을 직접 사용할 수 있으니, 쿼리 수정이 필요하면 이것을 사용하면 됩니다.
감사합니다^^ 추가 질문이 있으면 언제든지 편하게 질문해주세요.
inheritance startegy 선택시 고려사항
0
4
0
Entity 동등성 비교
0
13
1
실무 조언 관련 질문입니다.
0
41
1
H2데이터베이스 파일 생성
0
51
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
48
1
JPQL 메소드와 락
0
52
1
Delivery @OneToOne
0
57
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
89
2
UnsupportedOperationException 발생
0
82
3
H2 Database 연결이 안됩니다.
0
89
2
연관관계 매핑 질문드립니다.
0
82
2
h2데이터베이스 실행오류
0
105
2
persistence.xml
0
103
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
77
1
영속성 컨텍스트
0
62
1
JPA 프록시
0
90
1
Native Query와 MyBatis
0
63
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
83
1
임베디드 타입 예시 코드 관련 질문
0
112
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
91
3
인텔리제이 패키지 커서 단축키 질문
0
106
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
136
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
68
1





