1. 개요
종종 우리는 편리함과 함께 좋은 성능을 얻기 위해 데이터베이스(RDBMS)에서 계산을 수행해야 하는지 아니면 응용 프로그램 코드에서 계산을 수행해야 하는지 결정하기 어렵다는 것을 알게 됩니다.
이 기사에서는 데이터베이스 및 애플리케이션 코드에서 계산을 수행할 때의 장점과 단점을 살펴보겠습니다.
우리는 이 결정에 영향을 줄 수 있는 몇 가지 요소를 고려하고 어떤 계층(데이터베이스 또는 응용 프로그램)이 이를 처리하는 데 더 적합한지 논의할 것입니다.
2. 데이터베이스에서의 계산
2.1. 데이터 선택 및 집계
관계형 데이터베이스는 데이터 처리, 선택 및 집계에 고도로 최적화되어 있습니다 . SQL을 사용하여 데이터를 쉽게 그룹화, 정렬, 필터링 및 집계할 수 있습니다.
예를 들어 LEFT 및 RIGHT JOIN을 사용하여 여러 테이블에서 데이터 세트를 쉽게 선택 및 선택 취소할 수 있습니다 .
마찬가지로 MIN , MAX , SUM 및 AVG 와 같은 집계 함수 는 Java 구현보다 매우 편리하고 빠릅니다.
또한 데이터를 집계하는 동안 인덱스를 활용하여 디스크 IO의 성능을 미세 조정할 수 있습니다.
2.2. 데이터 볼륨
널리 사용되는 모든 RDBMS는 계산을 수행하기 위해 테이블에서 대량의 데이터를 처리하는 데 있어 타의 추종을 불허하는 성능을 제공합니다.
그러나 데이터베이스와 비교하여 애플리케이션에서 유사한 양의 데이터를 처리하려면 메모리 및 CPU 처리와 같은 많은 리소스가 필요합니다.
또한 대역폭을 절약하려면 데이터베이스에서 데이터 중심 계산을 수행하여 네트워크를 통해 대용량 데이터를 전송하지 않도록 하는 것이 좋습니다 .
3. 응용 프로그램에서 계산
3.1. 복잡성
데이터베이스와 달리 Java와 같은 고급 언어는 복잡한 계산을 잘 처리 합니다.
예를 들어, 복잡한 문제를 해결하기 위해 Java에서 비동기 프로그래밍 , 병렬 실행 및 다중 스레딩 을 활용할 수 있습니다 .
마찬가지로 데이터베이스는 로깅 및 디버깅에 대한 최소한의 지원을 제공합니다. 그러나 오늘날의 고급 언어는 복잡한 계산을 구현하는 데 유용한 이러한 중요한 기능을 훌륭하게 지원합니다.
예를 들어, SLF4J 를 사용 하여 Java 애플리케이션에 로깅을 쉽게 추가 하고 디버깅을 위해 Eclipse 및 IntelliJ IDEA 와 같은 널리 사용되는 IDE를 사용할 수 있습니다 . 따라서 응용 프로그램에서 계산을 수행하는 것은 데이터베이스에 비해 개발자에게 편리한 옵션입니다.
마찬가지로, 또 다른 주장은 응용 프로그램 코드에서 계산을 쉽게 단위 테스트할 수 있다는 것인데, 이는 데이터베이스에서 수행하기가 상당히 복잡합니다 .
단위 테스트는 구현 변경 사항을 확인하는 데 매우 유용합니다. 따라서 Java 애플리케이션에서 계산을 수행할 때 JUnit을 사용 하여 단위 테스트를 추가 할 수 있습니다 .
3.2. 고급 데이터 분석 및 변환
데이터베이스는 고급 데이터 분석 및 변환에 대한 제한된 지원을 제공합니다. 그러나 응용 프로그램 코드를 사용하여 복잡한 계산을 수행하는 것은 간단합니다.
예를 들어 Deeplearning4J , Weka 및 TensorFlow 와 같은 다양한 라이브러리 는 고급 통계 및 기계 학습 지원에 사용할 수 있습니다.
또 다른 일반적인 사용 사례는 Hibernate와 같은 ORM 기술을 사용하여 데이터를 쉽게 객관화하고 Java Streams 와 같은 API를 사용 하여 처리하고 XML 또는 JSON 구문 분석 라이브러리를 통해 다양한 형식의 결과를 생성할 수 있다는 것입니다 .
3.3. 확장성
RDBMS는 확장만 가능하므로 데이터베이스 확장성을 달성하는 것은 어려운 작업이 될 수 있습니다. 그러나 애플리케이션 코드는 더 확장 가능한 솔루션을 제공합니다.
앱 서버를 쉽게 확장하고 로드 밸런서를 사용하여 많은 요청을 처리할 수 있습니다.
4. 데이터베이스와 애플리케이션
이제 각 레이어에서 특정 요소를 기반으로 계산을 수행할 때의 이점을 확인했으므로 차이점을 요약해 보겠습니다.
- 데이터베이스는 데이터 선택, 집계 및 대용량 처리에 선호되는 선택입니다.
- 그러나 복잡성, 고급 데이터 변환, 타사 통합 및 확장성과 같은 요소를 고려할 때 애플리케이션 코드에서 계산을 수행하는 것이 더 나은 후보로 보입니다.
- 또한 고급 언어는 로깅, 디버깅, 오류 처리 및 단위 테스트 기능과 같은 추가 이점을 제공합니다.
복잡한 문제를 해결하기 위해 두 계층의 장점을 혼합하고 활용하는 것은 항상 좋은 생각입니다.
즉, 데이터 선택 및 집계를 위해 데이터베이스를 사용한 다음 유용한 린 데이터를 애플리케이션에 전송하고 효율적인 고급 언어를 사용하여 이에 대한 복잡한 작업을 수행합니다 .
5. 결론
이 기사에서는 응용 프로그램과 데이터베이스에서 계산을 수행할 때의 장단점을 살펴보았습니다.
먼저 데이터베이스 및 응용 프로그램 계층 모두에서 계산을 수행할 때의 이점에 대해 논의했습니다. 그런 다음 논의한 모든 요소를 기반으로 계산을 수행하는 방법에 대한 결론을 요약했습니다.