JPA와 ORM관련 질문 드립니다 !
안녕하세요.. 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을 작생해야 합니다.
결국 지금 시기는 어느정도 양쪽을 이해하고, 사용해야 하는 시기라 생각합니다. :)
감사합니다.
실무 조언 관련 질문입니다.
0
41
1
H2데이터베이스 파일 생성
0
49
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
47
1
JPQL 메소드와 락
0
50
1
Delivery @OneToOne
0
57
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
87
2
UnsupportedOperationException 발생
0
82
3
H2 Database 연결이 안됩니다.
0
87
2
연관관계 매핑 질문드립니다.
0
80
2
h2데이터베이스 실행오류
0
104
2
persistence.xml
0
102
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
77
1
영속성 컨텍스트
0
62
1
JPA 프록시
0
89
1
Native Query와 MyBatis
0
63
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
82
1
임베디드 타입 예시 코드 관련 질문
0
112
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
90
3
인텔리제이 패키지 커서 단축키 질문
0
106
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
135
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
68
1
임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.
0
95
1
데이터베이스가 초기화되는 것 같아요
1
175
2





