프로젝트/기타

DB에 기본값을 줄지 Server단에서 기본값을 줄지?

TheWing 2021. 4. 30. 01:11

보시기 전에

  • 프로젝트 설계할 때 고민했던 것을 한번 올려본다

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