"not only SQL"의 줄임말인 NoSQL이라는 용어는 관계형 데이터베이스처럼 규칙 기반의 관계형 테이블이 아닌 테이블 형식이 아닌 형식으로 데이터를 저장하는 비관계형 데이터베이스를 의미합니다. NoSQL 데이터베이스는 문서, 키-값, 와이드 칼럼, 그래프와 같은 다양한 구조화되지 않은 데이터를 지원하는 유연한 스키마 모델을 사용합니다.
조직에서는 유연성, 고성능, 수평적 확장성, 개발 용이성 때문에 NoSQL 데이터베이스를 선택합니다.
Google Cloud의 NoSQL 데이터베이스 Bigtable, Memorystore, Firestore가 확장성, 안정성 또는 잦은 데이터 변경에 대한 걱정 없이 애플리케이션을 개선하고 우수한 고객 경험을 제공하는 데 어떻게 도움이 되는지 알아보세요.
NoSQL 데이터베이스에는 크게 5가지 유형이 있습니다.
문서 데이터베이스는 문서 지향 데이터베이스 또는 문서 저장소라고도 하며 반정형 데이터를 저장하고 쿼리하는 데 사용됩니다. 데이터는 개발자가 애플리케이션 코드에서 사용하는 데이터 객체와 비슷한 JSON과 유사한 문서에 저장되므로 기본 스키마를 참조하지 않고도 애플리케이션을 쉽게 만들고 업데이트할 수 있습니다. 문서 데이터베이스는 블로그 플랫폼, 전자상거래, 실시간 분석, 콘텐츠 관리 시스템에 가장 많이 사용됩니다.
키-값 저장소라고도 하는 키-값 데이터베이스는 가장 간단한 유형의 NoSQL 데이터베이스입니다. 데이터는 '키-값' 구조로 저장되며, 여기서 고유 키는 문자열, 숫자, 불리언, 복합 객체와 같은 값과 쌍을 이룹니다. 키를 사용하여 연결된 값을 저장하거나 가져올 수 있습니다. 키-값 저장소는 가장 일반적으로 웹 애플리케이션의 사용자 환경설정, 장바구니, 사용자 프로필에 사용됩니다.
열 지향 데이터베이스 또는 와이드 칼럼 저장소는 데이터를 행으로 저장하고 읽으며, 열 집합으로 구성됩니다. 관계형 데이터베이스의 테이블 형식 형식과 비슷하지만 와이드 칼럼 저장소의 열 이름과 형식 지정은 단일 테이블의 행마다 다를 수 있습니다. 데이터베이스의 특정 열을 쿼리하고 지정된 열의 값을 빠르게 집계해야 하는 분석 사용 사례에 적합합니다. 와이드 칼럼 스토어는 카탈로그, 사기 감지, 추천 엔진에 가장 일반적으로 사용됩니다.
그래프 데이터베이스는 데이터 요소 간의 관계에 초점을 맞춰 데이터를 그래프의 노드로 구성합니다. 노드(에지) 간의 연결은 최고 수준의 요소로 저장되어 데이터 관계를 더 풍부하게 표현하는 동시에 저장과 탐색을 단순화합니다. 그래프 데이터베이스는 소셜 미디어 플랫폼, 예약 시스템, 사기 감지 시스템, 물류 애플리케이션 등 관계를 매핑하는 시스템에서 가장 많이 사용됩니다.
인메모리 데이터베이스는 실시간 애플리케이션에 매우 짧은 지연 시간을 제공하기 위해 메모리에 데이터를 저장합니다. 인메모리 NoSQL 데이터베이스의 예로는 Redis 및 Valkey가 있습니다. 인메모리 데이터베이스는 캐싱, 메시징, 스트리밍, 실시간 분석에 가장 일반적으로 사용됩니다.
NoSQL은 선택한 데이터베이스에 따라 고유한 특징을 가집니다. 그러나 일반적으로 대략적인 수준에서 몇 가지 유사한 특징을 공유합니다.
이러한 기능으로 인해 비관계형 데이터베이스는 대규모, 안정성, 고가용성, 빈번한 데이터 변경이 필요한 애플리케이션에 이상적입니다.
유연한 데이터 모델 및 스키마
NoSQL 데이터베이스는 다양한 유형의 데이터를 저장하고 반정형 데이터와 비정형 데이터에 적합한 유연한 스키마를 제공합니다. 새로운 유형의 데이터에 쉽게 적용하고 변화하는 데이터 요구사항을 충족하도록 스키마를 발전시킬 수 있습니다.
민첩한 개발
NoSQL은 뛰어난 유연성으로 민첩한 앱 개발을 지원합니다. NoSQL 데이터베이스는 다양한 유형의 데이터를 기본 형식으로 저장할 수 있으며, 작업을 진행하면서 데이터 모델을 정의하고 조정할 수 있으므로 개발자는 데이터 변환에 드는 시간을 줄이고 빠르게 반복할 수 있습니다.
확장성
NoSQL 데이터베이스는 관계형 데이터베이스와 달리 대부분의 경우 다운타임 없이 데이터와 트래픽이 증가할 때 용량을 쉽게 늘릴 수 있습니다. 클라우드 기반 데이터베이스는 주문형으로 더욱 쉽게 확장 가능하며 자동 확장 기능과 유연한 가격 책정 모델을 제공합니다.
대규모 데이터 스토리지
NoSQL은 복잡한 대규모 데이터 세트를 처리하도록 설계되었으므로 조직은 빅데이터, 실시간 분석, IoT 사용 사례에 이를 도입할 수 있습니다.
고가용성
NoSQL 데이터 아키텍처는 설계에 따라 분산되며 단일 장애점이 없습니다. 또한 간편한 복제 기능을 제공하므로 예기치 않은 중단 및 장애에 대한 저항력이 더 뛰어납니다.
더 빠른 쿼리
데이터 중복을 줄이기 위해 정규화되는 관계형 데이터베이스와 달리 NoSQL은 빠른 쿼리에 최적화되어 있습니다. 일반적으로 복잡한 조인이 필요하지 않습니다. 즉, 데이터베이스 쿼리가 결과를 더 빠르게 반환합니다.
NoSQL 데이터베이스가 최근 몇 년 동안 큰 인기를 얻었지만 관계형 데이터베이스와 비교하면 몇 가지 단점이 있습니다. 아직 비교적 새로운 기능이며 관계형 데이터베이스에 비해 성숙도가 낮을 수 있습니다. 전반적으로 NoSQL의 경우 개발자 전문성이 낮고 사용 가능한 도구와 제품이 더 적으며 문서화되지 않은 문제가 발생할 경우 지원이 적습니다.
또한 NoSQL에는 SQL과 같은 공통어가 없습니다. 데이터베이스마다 데이터 쿼리 및 관리를 위한 자체 언어가 있을 수 있습니다. 이들 언어는 유사하지만 SQL 표준과 완전히 호환되지 않는 경우가 많습니다.
NoSQL 데이터베이스에는 SQL 데이터베이스의 표준인 데이터 무결성 보호 장치와 높은 수준의 데이터 일관성이 없는 경우가 많습니다. 하지만 Firestore 및 MongoDB Atlas와 같이 ACID 트랜잭션을 지원하는 제품도 있습니다.
NoSQL 데이터베이스는 일반적으로 복잡한 쿼리와 조인을 실행하는 애플리케이션에 적합하지 않습니다. 여러 노드에서 색인과 쿼리를 관리하면 속도가 느려지고 일관된 결과가 반환되지 않을 수 있습니다.
하지만 약간의 밀리초 지연 시간이 발생해도 상관없는 대부분의 NoSQL 사용 사례에는 eventual consistency 모델이 충분합니다. 많은 애플리케이션에서 고가용성과 속도는 전역적 strong consistency의 필요성을 훨씬 능가합니다.
그렇다면 조직에서 일부 애플리케이션에는 비관계형 NoSQL 데이터베이스를 사용하면서 다른 애플리케이션에는 관계형 SQL 데이터베이스를 고수하는 이유는 무엇일까요? 올바른 데이터베이스 선택은 사용 사례에 따라 결정되는 경우가 많습니다. SQL 또는 NoSQL을 사용해야 하는 경우는 다음과 같습니다.
SQL 데이터베이스는 구조화된 관계형 데이터 및 복잡한 쿼리를 관리하는 데 탁월합니다. SQL 데이터베이스는 ACID를 준수하므로 트랜잭션 정보에 적합합니다.
SQL 사용 사례:
NoSQL 데이터베이스는 전 세계에 분산된 수많은 사용자에게 고도로 맞춤화된 환경을 제공해야 하는 사용 사례에서 탁월한 성능을 발휘합니다. 이러한 대화형 애플리케이션에는 NoSQL 데이터베이스의 민첩성이 적합합니다.
NoSQL 데이터베이스는 고가용성을 우선시하고, 일관된 성능을 제공하고, 다운타임 없이 빠르게 확장하며, 다양한 유형의 대규모 데이터를 처리할 수 있습니다.
이러한 NoSQL 데이터베이스의 기능으로 인해 비관계형 데이터베이스가 대규모, 안정성, 고가용성이 필요한 애플리케이션에 이상적입니다.
가장 일반적인 NoSQL 사용은 다음과 같습니다.