문득 이런 생각이 들었습니다.
쿼리문을 작성하지 말고, stream으로 모두 필터링 하면 어떻게 될까?
물론 지금까지 개발자들이 쿼리문을 작성하는 이유는 있겠다고 생각했지만, 그 이유를 정확하게 몰라서 찾아봤습니다.
데이터를 DB → 애플리케이션으로 다 퍼올려야 하는데, 자바 메모리도 매우 많이 사용합니다. 이는 데이터가 커질수록 서비스가 불가능할 정도의 매우 큰 성능 손실입니다.
예를들어 10만개 중 특정 조건에 만족하는 5개라면, 쿼리문으로 5개만 가져와서 사용할 수 있지만, stream 등 자바에서 데이터를 처리하는 경우 실제 서비스중인 메모리에 1만개의 데이터 모두 메모리에 적재함으로써 심각한 성능 문제를 보입니다.
또한 그 많은 데이터를 전송해야 하기 때문에, 네트워크 전송 속도 문제도 발생합니다.
DB는 스토리지에 최적화된 로직을 가지고 있으며, 메모리 한도를 초과하는 큰 데이터를 다룰 때 데이터베이스는 이 효율적인 로직을 사용하므로 최적의 처리를 할 수 있습니다.
이 또한 데이터가 커지면 커질수록 속도차이가 극심해집니다.
그 외에도 여러가지 이유가 있겠지만 위 두가지 이유 말고도 또다른 이유도 있겟지만, 이 이유들 만으로도 충분히 쿼리문을 작성해야하는 이유를 알 수있었고, 생각해보면 조금 당연한거지만 명확하게 이유를 알게되었습니다.
상황에 따라 다르긴 하지만, 대부분 쿼리문으로 최대한 필터링 한 데이터 가져오자.
https://okky.kr/questions/1056243
https://www.inflearn.com/questions/184494/sql-where-문-vs-java-stream-filter-성능차이에-관한-질문입니다