DB냐 Application이냐?


들어가며

Back-end 개발을 하면서 어떤 데이터 처리를 위해서 SQL을 활용할 것이냐 아니면 DB는 단순히 데이터 소스 역할만 하고 Application에서 처리할 것이냐로 고민을 하는 경우가 있다.

이에 대해서 정답은 없지만 Good Practice는 존재한다.

어떤 경우에 SQL을 활용할 것인지, 어떤 경우에 Application Code를 구현할 것인지 살펴본다.


DB

Join or Aggregation

당연한 얘기지만 JOIN(LEFT, RIGHT 포함)을 한다면 SQL을 이용해서 DB로부터 Join 결과를 가져오는 것이 훨씬 간편하고 속도 측면에서도 손해가 아니다.

비슷한 이유로 집계 함수(MIN, AMX, SUM, AVG)를 사용하는 경우도 Application code를 구현하는 것 보다 SQL을 활용하는 것이 더 경제적이다.


데이터 볼륨

연산을 위한 데이터 볼륨이 큰 경우 SQL로 연산을 하는 것이 보다 효과적이겠다.

Application에 할당된 메모리와 프로세스 수행을 위한 CPU 자원은 한정적이기 때문에 Application에서 다량의 데이터를 직접 핸들링 한다면 많은 리소스 낭비가 발생할 것이다.

또한 다량의 데이터를 DB로 부터 가져오기 위한 네트워크 이슈도 발생할 여지가 있다.


Application

Complexity(복잡도)

데이터 처리를 위한 연산이 복잡하다면 Application에서 수행하는 것이 더 효율적일 수 있다.

이를테면 비동기, 병렬 처리, 멀티 스레드와 같은 방식이 필요한 연산의 경우 DB보다 Application을 활용하는 것이 더 효과적이다.(병렬 처리를 기본적으로 제공하는 경우)

또한 연산에 대한 단위 테스트를 진행해야 한다면 DB를 이용하는 것은 악수가 될것.


Scalability(확장성)

기본적으로 DBScale up은 별 문제 없지만 Scale Out에 대한 작업이 쉽지 않다. DB마다 지원 여부도 따져봐야 하고 만일 가능하다고 하더라도 고려해야 할 사항이 상당히 많다.(클러스터링 또는 데이터 복제를 통한 확장 시 정합성 문제 해결 등)

반면 Application의 경우 로드 밸런서를 이용하는 등 상대적으로 Scale Out이 훨씬 쉽기 때문에 확장에 대한 고려가 필요하다면 Application을 권고한다.


참고