-
DB단에서 어느 수준의 쿼리까지 작성해야할까생각해보기 2024. 1. 22. 12:01
최근 DB 동시성과 효율성에 대해 공부하다보니
DB에서 생각보다 처리할수 있는 쿼리가 많음을 깨닫고 있다.
queryDsl의 기능은 그 상상 이상이고...
근본적인 질문이 하나 생겼다.
그럼 DB에 날릴 쿼리는 어느 수준까지 작성해야하지?
물론 어플리케이션 코드를 깔끔하게 하기 위해
쿼리를 많이 가공할 수 있는 상황이어도
과연 그게 맞을까??
DB가 있는 이유가 뭐지? DB를 통해 쿼리를 많이 가공해서 쓰면 좋은 점은? 그 때 Trade off는?
쿼리 최적화랑 관련된 내용이긴한데... 이 글에선 해당 주제에 대해서만 간단하게 생각해보자
1. DB 단에서 쿼리로 작성하게 될 때 이점
우선 DB와 애플리케이션 사이에서 데이터가 왔다갔다 할 때 비용이 크다.
그렇기 때문에 쿼리 최적화를 하면서 상황에 필요한 최적화된 데이터만 가져오려한다.
쿼리로 뺄거 다 빼고 가져올 데이터만 빼온다면 그 비용을 줄일 수 있을 것이다.
다만 쿼리에서 극한으로 작업한 후에 애플리케이션 코드로 가져오면
객체지향적인 코드 개념이 없기 때문에 유지보수, 확장엔 매우 불리할 수 있겠다.
2. 애플리케이션 단에서 코드로 작성하게 될 때 이점
애플리케이션에서 코드 작성시엔 유지보수 가능하고 확장가능한 코드를 작성 할 수 있을 것이다.
다만 1번의 경우보다는 더 많은 데이터를 가져와서 처리해야 할 것다.
결론 : 정답은 없다 .
다만 장기적으로 보면 확장과 유지보수는 필연적인데 쿼리 상에서 많이 작성하게 되면 나중에 골치아플 수 있다.
그럼에도 확장 가능성이 없다면 쿼리에서 작업해도 괜찮다. 관점의 차이다 라는 의견이 대부분이다. 가장 중요한것은 개발 환경:)
김영한님 말씀은
1. 필터링 (where), group by 은 DB에서 적극 이용하자
2. 집계성(avg,sum)은 DB가 충분히 잘해준다.
3. 비즈니스로직이 포함될 경우 작은 if문 하나라도 애플리케이션에서 작성하자
4. 프레젠테이션 로직 Dto와 같은 프레젠테이션 계층에서 요구하는 사항의 경우 애플리케이션 단에서 처리하는 것이 좋다
Reference
https://www.itworld.co.kr/news/208352
'생각해보기' 카테고리의 다른 글
Auto Increment 에 대한 생각해보기 (0) 2023.10.06 Getter 와 Setter 말고 다른방식으로? (0) 2023.07.18