해결된 질문
작성
·
211
2
간혹 유튜브 영상이나 ORM과 관련된 담론이 있는 글들을 보면 JPA의 속도 문제를 문제점으로 삼는 분들을 보았습니다. 그리고 JPA로는 한계가 오는 점들은 네이티브 쿼리를 사용해서 해결을 할 수 있다는 점, 그리고 태현님께서도 특정 상황에서는 JdbcTemplate을 사용해서 문제를 해결할 수 있다는 점을 강의에서 말씀 해주셨는데요.
하지만 그 '특정 상황'의 예시가 잘 떠오르지가 않는데 어떤 것이 있을까요? 배민의 영상에서도 동욱님은 JPA와 QueryDSL을 사용해서 몇 억건의 데이터도 잘 처리하셨고, 영한님께서도 책을 개정판을 내지 않는 이유로 이미 많이 성숙한 기술이라서 극적인 변화가 없는 기술이라고 하셨으며 어떤 유튜버분도 말씀하시길 'JPA라는 기술이 문제 자체를 일으킨다기 보단 개발자가 JPA에 대한 이해가 부족해서 문제가 발생한다.' 라고 하셔서 더 미궁속으로 빠집니다.
혹시 태현님께서도 이런 상황을 겪으신 적이 있으신지, 있다면 어떻게 해결하셨는지 궁금합니다!
답변 1
2
안녕하세요! wisehero님! 이번에도 좋은 질문 주셔서 감사합니다! 😊
결론부터 말씀드리면 JPA 대신 완전히 다른 기술을 사용해야 하는 제가 경험해본 "특정 상황"은 JdbcTemplate
의 batchUpdate를 소개해드렸던 <추가 - MyBatis 적용과 DB 접근 기술 비교 (feat. 대용량 저장)> 강의에서 확인해보실 수 있습니다.
많은 양의 데이터를 빠른 시간 안에 저장하려면 JPA 대신 JdbcTemplate
을 사용해야 한다는 영상입니다!!
이 외에 추가적으로 JPA를 사용해서 성능이 문제가 될만한 상황은
수억건, 수십억건 (RDS + 샤딩 + 튜닝) 레벨을 넘어가는 더더더 많은 데이터의 저장
과도한 혹은 이해가 부족한 연관관계 설정으로 인한 fetch 문제 (대표적으로는 1 + N 문제가 있죠)
정도가 떠오르네요! 🙂
전자의 경우는 사실 RDS의 근본적인 한계이기 때문에 보통은 NoSQL 쪽으로 넘어가는 방식을 띄고요!
후자의 경우는 연관관계에 대한 이해도를 높이고 적절한 해결 방향을 찾거나, 연관관계를 사용하지 않고 JPA의 장점을 취하는 방식으로 나아가게 됩니다.
결론적으로 제 경험상 JPA를 사용하면서 "속도 문제"로 근본적인 어려움을 겪은 적은 없었습니다. 위에서 말씀드렸다시피 속도 문제가 발생하는 원인에 따라 적절한 기술을 활용해 문제를 해결할 수 있기 때문이죠!
물론 속도 이슈로 JPA 대신 다른 기술을 사용했다는 것 자체가 JPA가 "속도 문제"가 있는 것이 아니냐? 라고 할 수 있고, 그 의견도 충분히 일리가 있다고 생각합니다.
단지 "JPA에 "속도 문제"가 있으니 (혹은 없으니) 그 기술은 안좋아! / 좋아!" 보다는
위에서 말씀드린 batch insert
/ 더더더 많은 데이터
/ 연관관계 이슈
정도는 JPA가 갖는 단점(?) 특징(?) 으로 이해하고 그때 그때 적절한 기술을 사용하면 되지 않나 싶습니다. 😊
답변이 도움이 되었으면 좋겠습니다. 감사합니다! 🙏