개발자
지난 프로젝트에서 Querydsl 만 사용해서 프로젝트를 진행했었습니다! 그런데 아무래도 JPQL 빌더이다 보니 Querydsl 만 사용하는 쿼리 작성에 한계가 보이기 시작했었는데.. 제가 너무 욕심이 과해서 너무 한방 쿼리를 날리려고 한 걸 수도 있지만 그럼에도 최소한의 집계쿼리를 포함해서 쿼리를 작성하고자 했는데 join으로도 해결이 안 되더라고요…. 그래서 결국은 쿼리를 쪼개서 보내고 애플리케이션 계층에서 자바 코드로 조합하는 형태로 완성은 하였지만 Querydsl 을 작성하기 전에 SQL로는 순조롭게 작성이 된 코드가 Querydsl 로 옮겨지지 않는다는 게 조금은 속상하더군요….제가 미숙해서 못한 것도 있을 수 있겠지만 그래도 Querydsl 로 SQL을 100% 활용할 수 없다는 게 조금은 불편하다고 생각이 들었습니다! 이전에 듣기로는 JPA만으로는 모든 쿼리를 처리할 수 없기 때문에 JdbcTemplate 나 MyBatis 를 함께 사용하는 경우가 있다고 들어본 기억이 있습니다! 실제로 실무에서도 JPA와 다른 SQL 매퍼를 조합해서 사용하는 경우가 많을까요?? CUD 작업은 JPA가 너무너무 편리하고 좋은데.. 조회에 있어서는 역시 MyBatis 나 JdbcTemplate 를 사용해 보는 것이 괜찮은 방법인지 궁금합니다!!
답변 1
인기 답변
JPA가 생성해주는 쿼리 작업은 깊이가 깊어지면 러닝 커브가 좀 있습니다. 몇몇 강의에서도 JPA를 100%로 사용하지는 않는 것으로 알고있습니다. 저또한 JPA를 깊게는 파보지 않아서 모르지만 복잡한 통계쿼리 등을 JPA로 구현한다면 매우 힘들 수 있겠다고 생각합니다. (아무 설계 없이 모델(엔터티) 구성하다 자칫하면 꼬입니다.) 결론은 역시 개발에 정답은 없습니다. 현재 본인이 최대한 할수있는 만큼 하시면 됩니다. 현업가서 더 어려운 쿼리를 하시게 될 날이 있을 수 있습니다. 현재의 경험을 잘 정리해두고 이를 면접에서 어필해보시는게 좋다고 봅니다. 답을 주는 면접관이 있을수도 있습니다. 화이팅하세요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 03월 09일
실제로 많은 실무 프로젝트에서는 JPA와 MyBatis 등을 함께 사용하는 경우가 있습니다. 상황에 따라 적재적소에 최적의 도구를 활용하는 것이 중요합니다. JPA는 객체 지향적으로 데이터를 처리하기 때문에, CUD 작업이나 간단한 조회시 매우 편리하고 재사용성이 높습니다. 반면, JPA의 몇 가지 한계 때문에 복잡한 집계 쿼리 또는 동적 쿼리의 핸들링이 어려울 수 있습니다. Querydsl은 이러한 JPA의 한계를 좀 더 완화시켜 주며, 타입 세이프한 쿼리 작성 및 동적 쿼리 생성 등을 제공하지만, 그래도 모든 SQL 기능을 100% 커버하지는 못합니다. 이런 경우에 MyBatis나 Spring JdbcTemplate 등을 함께 사용하면 좋습니다. MyBatis는 SQL 매퍼로써, SQL 문장을 XML 혹은 Annotation으로 관리할 수 있어 복잡한 쿼리와 동적 쿼리 사용에 유연하고, 성능 튜닝도 용이합니다. 하지만 SQL과 자바 코드가 분리되어 있는 만큼 디버깅과 유지보수가 어려울 수 있습니다. 따라서, CUD는 JPA로 처리하고, 복잡한 조회 쿼리는 MyBatis나 JdbcTemplate으로 처리하는 식으로 각각의 장점을 취하면 좋을 것 같습니다. 이러한 방법은 여러 시스템에서 검증된 방식이며 현업에서도 종종 사용되고 있습니다. 하지만 이러한 선택은 팀원들과 충분히 논의하고 결정해야 합니다. 각 도구마다 학습 커브와 유지보수 난이도, 그리고 팀 구성원들의 선호도 등 을 고려해야 하기 때문입니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!