본문 바로가기
개발 기초 다지기

DB 분할?

by 너의고래 2024. 7. 22.

이번 팀프로젝트를 진행하며, 처음으로 DB를 나누어서 서비스를 만들어보기로했다. 처음에는 프로젝트에서 DB를 나눈다는 것이 생소하게 느껴졌으나, DB를 나눠보자는 의견이 나와 이것저것 찾아보았다. DB분할은 어떨때 하는것일까?

DB 분할 장점

- 성능 향상:

  • 부하 분산: 데이터베이스를 분리하면 각 데이터베이스에 대한 부하를 분산시킬 수 있어 성능 향상
  • 캐싱 및 인덱싱 최적화: 각 데이터베이스를 개별적으로 최적화할 수 있어 더 나은 성능 구현

- 관리 용이성:

  • 독립적인 스키마 변경: 하나의 데이터베이스에서 스키마를 변경할 때 다른 데이터베이스에 영향을 주지 않으므로 더 유연하게 스키마를 관리할 수 있다.
  • 데이터베이스 크기 제한: 데이터베이스 크기가 너무 커지는 것을 방지할 수 있어 관리가 더 쉬워진다.
  •  

- 보안 강화:

  • 격리된 데이터: 중요한 데이터나 민감한 데이터를 별도의 데이터베이스에 저장하여 보안을 강화할 수 있다. ex) 사용자 데이터는 높은 보안이 필요한 반면, 일반 서비스 데이터는 그렇지 않을 수 있다.
  • 접근 제어: 각 데이터베이스에 대한 접근 권한을 개별적으로 설정할 수 있어 보안 관리가 용이하다.

- 장애 격리:

  • 부분 장애: 하나의 데이터베이스에 문제가 발생해도 다른 데이터베이스에는 영향을 미치지 않으므로 시스템의 일부가 계속 작동할 수 있다.

 

DB 분할 단점

- 복잡성 증가:

  • 관리 복잡성: 여러 데이터베이스를 관리하려면 관리 작업이 복잡해지고, 유지 보수 비용이 증가할 수 있다.
  • 배포 및 백업: 각 데이터베이스에 대한 백업 및 복구 작업을 별도로 관리해야 하므로 복잡도가 증가한다.

- 데이터 일관성 문제:

  • 트랜잭션 관리: 여러 데이터베이스 간의 트랜잭션을 관리하기 어렵다. 분산 트랜잭션 관리가 필요할 수 있다.
  • 데이터 동기화: 여러 데이터베이스에 분산된 데이터를 동기화하고 일관성을 유지하는 것이 어려울 수 있다.

- 성능 저하 가능성:

  • 네트워크 오버헤드: 데이터베이스 간 통신이 필요한 경우 네트워크 오버헤드가 발생할 수 있다.
  • 데이터 중복: 동일한 데이터를 여러 데이터베이스에 저장할 경우 데이터 중복 문제가 발생할 수 있다.

 

언제 여러 개의 데이터베이스를 사용하는 것이 적절한가?

- 규모가 큰 애플리케이션:

  • 대규모 애플리케이션에서 성능과 확장성이 중요한 경우, 데이터베이스를 분리하여 부하를 분산시키는 것이 유리할 수 있습니다.

- 보안 요구사항이 다른 데이터:

  • 보안 요구사항이 다른 데이터(예: 사용자 데이터와 로그 데이터)를 분리하여 보안 수준을 강화할 수 있습니다.

- 마이크로서비스 아키텍처:

  • 각 마이크로서비스가 독립적인 데이터베이스를 가지도록 설계하여 서비스 간 결합도를 낮추고, 서비스의 독립적 배포와 확장을 지원할 수 있습니다.

- 조직적 분리:

  • 조직 내 여러 부서(예: 사용자 관리 부서, 서비스 제공 부서)에서 독립적으로 데이터를 관리해야 하는 경우, 데이터베이스를 분리하여 관리할 수 있습니다.

 

데이터베이스의 성능과 보안을 개선하고, 각 부서 또는 서비스의 요구에 맞게 독립적으로 관리할 수 있게 한다는 장점이 있으나, 여러 데이터베이스를 관리하는 복잡성을 고려해야하기때문에 과연 우리 서비스에서 DB를 분리하는것이 맞는지 의문이 들었다. (사실 아직도 조금 의문이 들긴한다.)

 

하지만 지금 최종프로젝트인만큼 실제 상황이라고 가정하고, 큰 서비스를 만든다고 생각하면 각 DB마다 사용량이 많이 다른 우리 DB는 분리는 새로운 것을 공부하는 면에서 해볼만 하다고 생각하여 시도해보기로했다. DB분할이 개발해는 내내 신경써야할 부분이 많을것 같아 쉽지는 않겠지만 그만큼 많은것을 배울수 있을 것 같으니 열심히 해봐야겠다!

댓글