해결된 질문
작성
·
362
2
안녕하세요.. JPA를 배우면서 의문이 들어 질문 드립니다. JPA 그리고 ORM을 사용하는 이유가 쿼리문을 직접 짜지 않아도.. 혹은 몰라도 객체로서 접근하여 데이터를 가져오는 것이 가능하다는 것과 생산성에 있다는 말씀 하셨습니다. 하지만 제가 JPQL를 배우면서 느낀건 JPQL이지만 똑같이 쿼리를 짠다는 느낌이 들어서요... 그렇다면 특정 조건으로 데이터를 가져올 경우, JPA가 객체지향적으로 조금 조율된 쿼리문일뿐. 쿼리를 짜야 한다는 면에서는 Mybatis 와 똑같은 느낌이 아닐까... 라는 생각을 하게 되어서.. 만약 대형 프로젝트에서 복잡한 쿼리문이 대다수인 경우 차이점을 못느끼지 않을까 생각합니다. 해당 부분에 대해서 어떻게 생각하시는지 궁금합니다 ! 그렇다면 쿼리문을 모르고 순수 객체나 함수로서 데이터를 가져올수 있는 수준까지 지원이 안되는 것인지도 궁금합니다 !!
답변 1
4
안녕하세요. Kioni님^^
프로젝트 성격마다 다르겠지만 크게보면 대부분의 실무 프로젝트는, 80% 정도의 단순한 쿼리와 20%의 복잡한 쿼리로 이루어져 있습니다.
JPA와 이것을 활용하는 스프링 데이터 JPA를 활용하면 이 단순한 80%의 쿼리를 제거할 수 있습니다. 이것만 해도 개발자 입장에서는 높은 생산성의 증가를 가져옵니다. 향후 스프링 데이터 JPA 강의를 들어보시면 이 부분을 이해할 수 있습니다.
여기에 추가해서 QueryDSL 같은 기술을 사용하면 복잡한 쿼리 대부분도 자바 코드로 작성할 수 있습니다.
그리고 남은 5% 정도의 너무너무 복잡하거나, 통계성 쿼리 같은 경우 네이티브 쿼리를 사용해서 문제를 해결합니다.
쿼리 중심으로 사고하는 것 vs 객체를 중심으로 사고하고, 꼭 필요할 경우 쿼리를 사용하는 것의 차이라고 보시면 될 것 같아요. 결국은 주가 무엇인가 하는 것이지요.
쿼리문을 모르고, 순수 객체나 함수로 데이터를 가지고 오는게 정말 좋은가? 라고 하면, 여기에는 아무래도 한계가 있습니다. 우리가 데이터를 RDB에 저장하기 때문에 여기에서 오는 한계를 어느정도는 인정해야 합니다.
그렇다면 정말 모든 것을 객체로 사용하는게 좋은가? 라고 하면, 사실 SQL은 정말 막강하지요. SQL 몇줄이면 될 것이 자바코드로 작성하려면 한참 걸릴 수 있으니까요.
쿼리문을 모르고 순수 객체나 함수로 데이터를 가져올 수 있는 수준인지는 스프링 데이터 JPA가 어느정도 해결해주지만, 복잡한 쿼리는 결국 JPQL이나 QueryDSL을 작생해야 합니다.
결국 지금 시기는 어느정도 양쪽을 이해하고, 사용해야 하는 시기라 생각합니다. :)
감사합니다.