maven, java 11
JPA, JPQL
JPA에서는 실행계획을 보고 오라클 힌트와 같은 명령어를 쓰며 튜닝을 할수 없는것인가?
그렇다면... 옵티마이저에게 어떻게 인덱스를 강제할지...
의도와 다른 인덱스를 타고 더 느려지는 쿼리에 관련해서는 어떻게 대응을 할 수 있을지..
"자바 애플리케이션 개발이 중요해요? DB 관련된 부분을 공부하는게 중요해요?"
사실 질문에 답이 있다고, 둘다 중요합니다.
저도 개인적으로 대용량 데이터베이스 솔루션 책 시리즈를 모두 재미있게 읽어볼 정도로 데이터베이스 관련된 공부를 좋아합니다.
- 제가 실무의 다양한 프로젝트를 진행하면서 느낀점은 정말 복잡해서 네이티브 쿼리를 직접 사용해야 하는 경우는 전체의 5% 이하였습니다.
JPA도 이런 상황을 대비해서 네이티브 쿼리를 그대로 실행할 수 있게 열어두었습니다.
하이버네이트를 최초로 만든 게빈킹도 하이버네이트로 100%의 문제를 해결하려고 만든 것이 아니라고 했지요.
대부분의 일반적은 쿼리들은 단순하기 때문에 JPA로 쉽게 풀고, 정말 성능이 너무 중요한 포인트에 네이티브 쿼리로 최적화 하는 방안으로 이해하시면 됩니다.
예를 들어서 JPA로 쉽게 했는데, 성능 테스트를 해봤더니 이건 어쩔 수 없이 힌트를 줘야하는 상황이다.
그러면 이제 이 부분만 살짝 네이티브 쿼리로 변경하는 거지요.
- 좋은 질문입니다. 회사마다 조금 다를 수 있는데, 오라클 데이터베이스를 정말 하드하게 쓰는 회사라면 배우신 내용들이 중요하겠지요.
그게 아니라면 배우신 내용을 하나도 못 써먹을 수도 있습니다.
그런데 어떤 데이터베이스를 사용하더라도 배우신 내용이 모두 도움이 되실꺼에요.
개발자라는 직업이 결국 문제를 해결하는 것이 중요한데, 이정도 깊이있게 공부를 해두면 다른 데이터베이스를 사용해도, 문제가 발생했을 때,
아! 그때 스터디했던 그 내용이 떠오르면서, 이 데이터베이스에도 이런 방식으로 튜닝을 해보는 방법이 있지 않을까?
라는 생각이 나실꺼에요. 저도 소시적? 나름 열심히 데이터베이스 공부를 한 덕분에 DB 관련 문제가 생겨도,
어떻게 해결 방안을 찾아야할지 길이 보이더라구요.
그리고 균형도 중요합니다.
DB 공부도, 애플리케이션 공부도, 만약 학생이라면 알고리즘 공부도 모두 골고루 해두시면 전부 버릴 곳 없이 도움이 되실꺼에요.
제가 지금까지 만난 개발 잘하는 분들의 특징은 특정 하나만 잘하는게 아니라 다 잘하더라구요.
- 가급적 지연 로딩만 사용(특히 실무에서)
- 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생
- 즉시 로딩은 JPQL에서 N+1 문제를 일으킨다.
- @ManyToOne, @OneToOne은 즉시 로딩 -> LAZY 로 설정
- @OneToMany, @ManyToMany는 기본이 지연 로딩