보시기 전에
- 프로젝트 설계할 때 고민했던 것을 한번 올려본다
DB에 기본값을 줄지 entity에 기본값을 줄지?
- DB에서 테이블을 생성할 때 DEFAULT 값을 지정해서 하는 방법과 entity에서 기본값을 지정하여 QUERY에 입력하는 방법 두가지가 있었는데 이 둘 중 무엇이 더 나은지에 대해 고민을 하다가 찾아보았다
찾아보기 전에 생각해본것
- 애플리케이션에서 LocalDateTime.now() 와 쿼리 입력될때 now() 의 시간이 다르다
- default를 entity에서 지정해놨는데 코드를 누군가가 수정을해서 default값이 수정되거나 없어진다
default 값이 바뀌었을때 스키마에서는 안바꿔주고 코드에서만 바뀌게 되면 어떻게 될지? - 기본값을 계산해서 입력하는 방식과 계산하지 않고 입력하였을때 애플리케이션에서 처리와 디비에서 처리가 어떤게 나을지?
DB에서 계산
데이터 선택 및 집계
- RDBMS는 데이터 처리, 조회 및 집계를 위해 고도로 최적화 되어있다
- SQL을 사용하여 데이터를 쉽게 그룹화 정렬 필터링 및 집계 할 수 있다.
- MIN, MAX, SUM 및 AVG와 같은 집계 함수는 Java 구현보다 매우 편리하고 빠르다
- 데이터를 집계하는 동안 인덱스를 활용하여 디스크 IO의 성능을 미세 조정할 수 있다.
데이터 양
- 대량의 데이터를 처리할 때 탁월한 성능을 제공한다
- 애플리케이션에서 유사한 양의 데이터를 처리하려면 메모리 및 CPU처리와 같은 많은 리소스가 필요하다
- 대역폭을 절약하려면 데이터베이스에서 데이터 중심 계산을 수행하여 네트워크를 통해 많은 양의 데이터를 전송하지 않도록 하는 것이 좋다
Application에서 계산
복잡성
- DB와 달리 Java와 같은 고급언어는 복잡한 계산을 처리하는데 잘 갖추어져있다.
고급 데이터 분석 및 변환
- DB는 고급 데이터 분석 및 변환에 대한 제한된 지원을 제공한다. 애플리케이션 코드를 사용하여 복잡한 계산을 수행하는 것은 간단하다
확장성
- RDBMS는 확장만 가능하므로 데이터베이스 확장성을 달성하는 것은 어려운 작업이 될 수 있다. 그러나 응용 프로그램 코드는 보다 확장 가능한 솔루션을 제공한다
- 로드 밸런서를 사용하여 앱 서버를 쉽게 확장하고 많은 요청 처리를 할 수 있다
Database vs Application
Database
- 데이터 선택, 집계 및 대용량 처리에 선호되는 선택이다
Application
- 복잡성, 고급 데이터 변환, 타사 통합 및 확장성과 같은 요소를 고려할 때 애플리케이션 코드에서 계산을 수행하는 것이 더 나은 후보로 보인다
- 고급 언어는 로깅 , 디버깅, 오류 처리 및 단위 테스트 기능과 같은 추가 이점을 제공한다
복잡한 문제를 해결하기 위해 상황에 맞게 혼합하여 활용하는 것이 좋다
즉, 데이터 선택 및 집계에 데이터베이스를 사용한 다음 유용한 데이터를 애플리케이션에 전송하고 효율적인 상위 수준 언어를 사용하여 복잡한 작업을 수행한다.
Reference
'프로젝트 > 기타' 카테고리의 다른 글
Gradle Build, Coverage 오류 (2) | 2021.04.06 |
---|---|
REST API 정리 (0) | 2021.01.31 |