서론
회고 보드 프로젝트 백엔드 서버 개발을 하기 앞서 사용하고자 하는 스택들을 선택해야 한다.
가장 크게 언어, 프레임워크, DB, 인프라 등이 있을 것 같은데 이번 글에서는 이 중 DB를 선택함에 앞서 RDBMS와 NoSQL의 특징, 차이점, 장단점을 비교 해 보고자 한다.
RDBMS
특징
장점
- 구조화된 데이터 모델
- 데이터는 테이블(행과 열) 형태로 구조화되어 있으며, SQL(Structured Query Language)을 사용해 데이터를 쿼리, 업데이트 및 관리합니다.
- 데이터 무결성 및 일관성
- 트랜잭션 관리, 외래 키 제약 조건 등을 통해 데이터의 무결성과 일관성을 보장합니다.
- 복잡한 쿼리 처리 능력
- 조인, 서브쿼리 등 복잡한 쿼리를 지원하여 다양한 데이터 분석 요구 사항을 충족할 수 있습니다.
단점
- 유연성이 떨어져 데이터 스키마를 사전에 계획해야 하므로 추후 수정이 어렵다.
- 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있다.
- 대체로 수직적 확장만 가능하다.
NoSQL
특징
- 유연한 데이터 모델
- 스키마리스(Schema-less) 데이터 모델을 사용하여 다양한 데이터 형태(문서, 키-값, 그래프 등)를 저장할 수 있습니다.
- 확장성
- 데이터 분산 및 복제를 통해 높은 수준의 확장성과 가용성을 제공합니다.
- 고성능
- 특정 유형의 쿼리나 대량의 데이터 처리에 최적화된 구조를 가지고 있어, 대규모 데이터셋에 대한 빠른 읽기/쓰기를 지원합니다.
장점
- 스키마가 없기 때문에 유연하고 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장되기 때문에 데이터를 읽어오는 속도가 빨라진다.
- 수직 및 수평 확장이 가능해서 애플리케이션이 발생 시키는 모든 읽기와 쓰기 요청 처리가 가능하다.
단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
- 데이터 중복을 계속 업데이트해야 한다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정이 필요한 경우 모든 컬렉션에서 수행해야 한다.
차이점
구조
관계형 데이터베이스는 데이터를 테이블 형식으로 저장하며 데이터 변형 및 테이블 관계에 관한 엄격한 규칙을 따릅니다. 따라서 데이터 무결성과 일관성을 유지하면서 정형 데이터에 대한 복잡한 쿼리를 처리할 수 있다.
비관계형 데이터베이스는 더 유연하며, 요구 사항이 변화하는 데이터에 보다 유용하다. 따라서 이미지, 비디오, 문서 및 기타 반정형 및 비정형 콘텐츠를 저장하는 데 사용할 수 있다.
데이터 무결성 메커니즘
원자성, 일관성, 격리 및 내구성(ACID)은 데이터 처리에서 오류나 중단이 발생하더라도 데이터 무결성을 유지할 수 있는 데이터베이스의 기능을 말한다.
관계형 데이터베이스 모델은 엄격한 ACID 속성을 따른다. 즉, 일련의 후속 작업이 항상 함께 완료됩니다. 단일 작업이 실패하면 전체 작업 세트가 실패한다. 따라서 데이터 정확성이 항상 보장된다.
반면 비관계형 데이터베이스는 기본적으로 가용성이 보장되고 소프트 상태이며 궁극적으로 일관된(BASE) 보다 유연한 모델을 제공한다.
비관계형 데이터베이스는 가용성을 보장하지만 즉각적인 일관성은 보장하지 않는다. 데이터베이스 상태는 시간이 지남에 따라 변할 수 있으며 결국 일관된 상태가 된다. 일부 비관계형 데이터베이스는 ACID 규정 준수와 성능 또는 기타 장단점을 제공할 수 있다.
성능
관계형 데이터베이스의 성능은 디스크 하위 시스템에 따라 달라진다. SSD를 사용하고 디스크를 Redundant Array of Independent Disks(RAID)로 구성하여 디스크를 최적화하면 데이터베이스 성능을 높일 수 있다. 성능을 극대화하려면 인덱스, 테이블 구조 및 쿼리도 최적화해야 한다.
반면 NoSQL 데이터베이스의 성능은 네트워크 지연 시간, 하드웨어 클러스터 크기 및 호출 애플리케이션에 따라 달라진다. 비관계형 데이터베이스는 다음 몇 가지 방법으로 성능을 높일 수 있다.
- 클러스터 크기 증대
- 네트워크 지연 시간 최소화
- 인덱스 및 캐시
NoSQL 데이터베이스는 특정 사용 사례에서 관계형 데이터베이스보다 더 높은 성능과 확장성을 제공한다.
확장
관계형 데이터베이스 시스템의 엄격한 스키마는 대규모 환경에서 문제를 야기할 수 있다. 일반적으로 수직적으로 규모를 조정할 때는 서버에 CPU 또는 RAM 리소스를 추가한다.
또한 읽기 전용 워크로드를 처리하기 위해 서버 간에 데이터를 복제하여 수평적으로 규모를 조정할 수도 있다. 하지만 읽기-쓰기 워크로드의 수평적 규모 조정에는 파티셔닝 및 샤딩과 같은 특수한 전략이 필요하다.
차이점 요약: 관계형 데이터베이스와 비관계형 데이터베이스
관계형 데이터베이스(RDBMS)를 사용해야 할 때
- 데이터베이스의 ACID 성질을 준수해야 하는 소프트웨어를 개발하는 경우
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
- 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우
💡 ACID란? Atomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성)의 약어로, 데이터베이스에서 실행되는 하나의 트랜잭션(Transaction)에 의한 상태의 변화를 수행하는 과정에서, 안전성을 보장하기 위해 필요한 성질을 뜻합니다.
NoSQL 데이터베이스를 사용해야 할 때
- 정확한 데이터의 구조를 알 수 없거나 변경, 확장될 가능성이 있는 경우
- 읽기는 자주 해도 데이터 변경은 자주 없는 경우
- 막대한 양의 데이터를 다뤄야 해서 데이터베이스를 수평으로 확장해야 하는 경우
선택 이유
💡 RDBMS를 선택하고자 한다.
- 쿼리 복잡도
- 회고 보드 플랫폼이기에 다량의 조인이 발생한다던가 등의 복잡성이 크지 않다.
- 정확한 데이터 구조
- 초기 개발 이후 크게 스키마가 변경될 일이 없을 것으로 사료됨
- 러닝 커브
- 팀원들이 RDBMS에 익숙함
참고