이번 팀프로젝트를 진행하며, 처음으로 DB를 나누어서 서비스를 만들어보기로했다. 처음에는 프로젝트에서 DB를 나눈다는 것이 생소하게 느껴졌으나, DB를 나눠보자는 의견이 나와 이것저것 찾아보았다. DB분할은 어떨때 하는것일까?
DB 분할 장점
- 성능 향상:
- 부하 분산: 데이터베이스를 분리하면 각 데이터베이스에 대한 부하를 분산시킬 수 있어 성능 향상
- 캐싱 및 인덱싱 최적화: 각 데이터베이스를 개별적으로 최적화할 수 있어 더 나은 성능 구현
- 관리 용이성:
- 독립적인 스키마 변경: 하나의 데이터베이스에서 스키마를 변경할 때 다른 데이터베이스에 영향을 주지 않으므로 더 유연하게 스키마를 관리할 수 있다.
- 데이터베이스 크기 제한: 데이터베이스 크기가 너무 커지는 것을 방지할 수 있어 관리가 더 쉬워진다.
- 보안 강화:
- 격리된 데이터: 중요한 데이터나 민감한 데이터를 별도의 데이터베이스에 저장하여 보안을 강화할 수 있다. ex) 사용자 데이터는 높은 보안이 필요한 반면, 일반 서비스 데이터는 그렇지 않을 수 있다.
- 접근 제어: 각 데이터베이스에 대한 접근 권한을 개별적으로 설정할 수 있어 보안 관리가 용이하다.
- 장애 격리:
- 부분 장애: 하나의 데이터베이스에 문제가 발생해도 다른 데이터베이스에는 영향을 미치지 않으므로 시스템의 일부가 계속 작동할 수 있다.
DB 분할 단점
- 복잡성 증가:
- 관리 복잡성: 여러 데이터베이스를 관리하려면 관리 작업이 복잡해지고, 유지 보수 비용이 증가할 수 있다.
- 배포 및 백업: 각 데이터베이스에 대한 백업 및 복구 작업을 별도로 관리해야 하므로 복잡도가 증가한다.
- 데이터 일관성 문제:
- 트랜잭션 관리: 여러 데이터베이스 간의 트랜잭션을 관리하기 어렵다. 분산 트랜잭션 관리가 필요할 수 있다.
- 데이터 동기화: 여러 데이터베이스에 분산된 데이터를 동기화하고 일관성을 유지하는 것이 어려울 수 있다.
- 성능 저하 가능성:
- 네트워크 오버헤드: 데이터베이스 간 통신이 필요한 경우 네트워크 오버헤드가 발생할 수 있다.
- 데이터 중복: 동일한 데이터를 여러 데이터베이스에 저장할 경우 데이터 중복 문제가 발생할 수 있다.
언제 여러 개의 데이터베이스를 사용하는 것이 적절한가?
- 규모가 큰 애플리케이션:
- 대규모 애플리케이션에서 성능과 확장성이 중요한 경우, 데이터베이스를 분리하여 부하를 분산시키는 것이 유리할 수 있습니다.
- 보안 요구사항이 다른 데이터:
- 보안 요구사항이 다른 데이터(예: 사용자 데이터와 로그 데이터)를 분리하여 보안 수준을 강화할 수 있습니다.
- 마이크로서비스 아키텍처:
- 각 마이크로서비스가 독립적인 데이터베이스를 가지도록 설계하여 서비스 간 결합도를 낮추고, 서비스의 독립적 배포와 확장을 지원할 수 있습니다.
- 조직적 분리:
- 조직 내 여러 부서(예: 사용자 관리 부서, 서비스 제공 부서)에서 독립적으로 데이터를 관리해야 하는 경우, 데이터베이스를 분리하여 관리할 수 있습니다.
데이터베이스의 성능과 보안을 개선하고, 각 부서 또는 서비스의 요구에 맞게 독립적으로 관리할 수 있게 한다는 장점이 있으나, 여러 데이터베이스를 관리하는 복잡성을 고려해야하기때문에 과연 우리 서비스에서 DB를 분리하는것이 맞는지 의문이 들었다. (사실 아직도 조금 의문이 들긴한다.)
하지만 지금 최종프로젝트인만큼 실제 상황이라고 가정하고, 큰 서비스를 만든다고 생각하면 각 DB마다 사용량이 많이 다른 우리 DB는 분리는 새로운 것을 공부하는 면에서 해볼만 하다고 생각하여 시도해보기로했다. DB분할이 개발해는 내내 신경써야할 부분이 많을것 같아 쉽지는 않겠지만 그만큼 많은것을 배울수 있을 것 같으니 열심히 해봐야겠다!
'개발 기초 다지기' 카테고리의 다른 글
소켓 1:1 채팅 기능(구현했던 알림 기능과 다른점은?) (0) | 2024.07.29 |
---|---|
Linux 명령어 정리 (1) | 2024.07.24 |
distinctAlias 문제 (쿼리 빌더) (0) | 2024.07.22 |
웹소켓 웹 알림 기능 구현(할당받은 멤버에게만) (0) | 2024.07.16 |
댓글/상태변화 알림 기능 구현 (왜 http 요청이 아닌 웹소켓인가?) (0) | 2024.07.12 |
댓글