개발자들이 처음 데이터 관리나 애플리케이션에 사용할 데이터베이스를 선택할 때 가장 먼저 떠오르는 것은 —
— 맞습니다, 테이블입니다.
그들은 사용자, 제품, 주문 등 서로 다른 데이터 유형을 위해 서로 다른 테이블을 설정합니다. 데이터가 다양한 테이블에 분산되어 있기 때문에 서로 관계를 맺고 있을 수밖에 없습니다. 따라서 테이블은 외래 키를 통해 다른 테이블의 항목을 참조하게 됩니다. 결국 그들은 문제를 해결하기 위해 매번 관계형 데이터베이스를 선택하게 될 것입니다. 특히 관계를 다룰 때 비관계형 데이터베이스의 개념은 매우 직관적이지 않게 느껴질 수 있습니다.
하지만 문제가 있습니다 — 데이터는 항상 평면적이지 않습니다. 데이터 요구 사항은 복잡할 수 있으며, 개발자들이 데이터베이스를 고려하지 않고 데이터를 시각화할 때, 이는 종종 표 형식이 아닙니다. 대신, 중첩되거나 계층적이거나 심지어 그래프와 같은 형태로 나타날 수 있습니다.
데이터 작업을 시작할 때마다 테이블을 상상할 필요는 없습니다. 현대 애플리케이션에서는 데이터가 복잡한 데이터 유형을 가진 유연한 스키마를 필요로 하는 경우가 많습니다. 따라서 이를 테이블로 평면화하는 것이 항상 최선의 방법은 아닐 수 있습니다. 게다가 관계형 데이터베이스는 자체적인 확장 제한도 있습니다. 확장할 때는 샤딩에 대해 걱정해야 할 수도 있으며, 이는 종종 상당한 애플리케이션 수준의 변경을 요구합니다.
관계형이 아닌 데이터베이스, 또는 일반적으로 알려진 NoSQL. 디자인 선택에서 이들을 무시해왔다면 NoSQL의 전체 잠재력을 추출하는 데 놓치고 있을 수 있습니다. 이 기사에서는 비관계형 데이터베이스가 무엇인지 간략히 정의한 다음 다양한 현실적인 문제에 대한 다른 NoSQL 데이터베이스 선택지를 제공합니다.
마지막으로, 비관계형 데이터베이스가 관계형 데이터베이스보다 제공하는 이점과 관계형 데이터베이스가 여전히 더 나은 선택인 시나리오도 다룰 것입니다.
비관계형 데이터베이스, 또는 NoSQL
간단히 말하면, 이러한 데이터베이스는 비표 형식으로 데이터를 저장합니다. 각각이 특정 목적을 위해 구축된 서로 다른 유형으로 이루어져 있으며 지원할 수 있는 비구조화된 데이터의 종류에 따라 다릅니다. 가장 일반적인 것들은 다음과 같습니다:
- 문서 데이터베이스: JSON과 유사한 문서에 데이터 저장
- 키-값 데이터베이스: 고유한 키에 대한 ‘키-값’ 구조로 데이터 저장
- 그래프 데이터베이스: 노드, 엣지, 속성을 사용하여 데이터 포인트 간의 관계를 나타내고 저장
기타 유형으로는 열 지향, 인메모리, 시계열 데이터베이스 등이 있습니다.
다양한 NoSQL 데이터베이스 제공 업체는 특정 필드에 인덱스 생성, 개발자 친화적 SDK, 고가용성, 트랜잭션 작업 및 데이터베이스 크기를 쉽게 확장 또는 축소할 수 있는 기능과 같은 기능을 제공합니다.
NoSQL로 실생활 문제 해결하기
실제 문제를 NoSQL 데이터베이스로 해결하는 예제를 살펴봅시다.
댓글과 태그를 지원하는 블로그 애플리케이션 구축
문서 데이터베이스는 이러한 콘텐츠 관리 시스템에 가장 적합합니다. 각 콘텐츠는 별도의 문서가 될 수 있습니다. 스키마는 유연하며 각 문서는 하위 컬렉션을 포함할 수 있습니다. 문서 데이터베이스 제공 업체의 배열 필드 인덱싱 기능을 활용하여 복잡한 쿼리를 수행할 수 있으며, 예를 들어 모든 블로그와 그들의 태그를 검색할 수 있습니다.
소셜 및 전문 네트워킹 플랫폼
그래프 데이터베이스는 사람들 사이의 복잡한 관계를 정의하는 데 도움이 됩니다. 그래프 검색을 통해 친구의 친구를 쉽게 찾을 수 있습니다.
IoT 센서 데이터
타임 시리즈 데이터를 사용하여 센서 장치에서의 타임스탬프 데이터를 처리할 수 있습니다.
쇼핑 카트
고속의 읽기 및 쓰기를 제공하는 키-값 쌍 데이터베이스를 사용합니다. 키-값 데이터베이스를 사용하여 사용자의 세션 정보를 저장하고 쇼핑 카트를 세션 내의 필드로 사용할 수 있습니다(개별 쇼핑 세션에 대해).
추천 엔진
사용자, 제품 및 선호도 사이의 관계를 매핑하기 위해 그래프 데이터베이스를 사용합니다.
NoSQL 데이터베이스가 관계형 데이터베이스를 능가하는 경우
NoSQL 데이터베이스가 관계형 데이터베이스보다 우위를 제공하는 몇 가지 포인트는 다음과 같습니다:
- 개발자 생산성: NoSQL 데이터베이스 제공업체는 현대 애플리케이션 개발에 맞춘 API 및 SDK를 제공하여 보다 빠른 프로토타이핑 및 개발이 가능하게 합니다.
- 확장성: NoSQL 데이터베이스는 수평적으로 확장할 수 있어(단순히 더 많은 서버나 노드를 추가하기만 하면 됨) 비용 효율적이며 관리하기 쉽습니다. 이는 관계형 데이터베이스에서 요구되는 수직적 확장과 비교할 때 용이합니다.
- 유연성: NoSQL은 유연한 스키마를 제공하여 민첩한 개발과 변화하는 애플리케이션 요구에 적합합니다.
- 중첩 데이터 처리: 종종 데이터는 중첩되거나 계층적입니다. 예를 들어 JSON 또는 XML 형식입니다. NoSQL 데이터베이스는 이러한 형식을 지원할 수 있으며, 관계형 데이터베이스를 사용할 때 복잡한 변환이 필요할 수 있습니다.
관계형 데이터베이스가 아직 우위를 유지하는 경우
관계형 데이터베이스가 여전히 적합하고 좋은 선택인 몇 가지 사용 사례는 다음과 같습니다.
- 분석 및 보고: 관계형 데이터베이스는 ad-hoc 쿼리, 집계 및 보고를 위해 최적화되어 있습니다. 분석 및 보고용으로는 관계형 데이터베이스가 여전히 주요 선택지입니다.
- 관계 및 조인의 빈번한 사용: NoSQL 데이터베이스로도 여전히 관계를 관리하고 작업할 수 있지만, 애플리케이션이 서로 다른 데이터셋을 걸쳐 빈번하게 조인에 의존하는 경우, 관계형 데이터베이스는 여전히 좋은 선택일 수 있습니다.
- 가용성보다 일관성: 데이터 일관성이 가용성보다 중요한 시나리오에서(예: 금융 거래), 관계형 데이터베이스는 더 많은 보장을 제공할 수 있습니다.
그리고 이것으로 우리의 기사를 마칩니다. 우리는 NoSQL 데이터베이스가 무엇이며 실제 데이터 관리의 도전을 어떻게 해결하는지 탐색했습니다. NoSQL 데이터베이스는 복잡한 데이터 구조를 처리하는 유연성부터 제공업체가 제공하는 강력한 기능까지 현대 애플리케이션에 가능성의 세계를 엽니다. 아직 NoSQL을 시도해보지 않은 분들에게, 다음 프로젝트에서 한 번 시도해보라는 영감이 되었으면 좋겠습니다 — 여러분의 요구에 완벽히 맞는 것을 발견할 수도 있습니다.
Source:
https://dzone.com/articles/nosql-for-relational-minds