NoSQL이란 무엇인가?
NoSQL의 정의
NoSQL 이라는 용어는 비관계형 데이터베이스 유형을 가리키며 이 데이터베이스는 관계형 테이블과는 다른 형식으로 데이터를 저장한다. 그러나 NoSQL 데이터베이스는 언어마다 관습화된 API, 선언적 구조의 쿼리 언어, 쿼리별 언어를 사용하여 질의할 수 있다(Not only SQL 데이터베이스).
NoSQL 데이터베이스 사용처
높은 확장성과 가용성이 주요 장점인 NoSQL 데이터베이스는 실시간 웹 애플리케이션 및 빅 데이터에 널리 사용된다.
변화하는 요구 사항에 빠르게 적응함으로써 민첩한 개발 패러다임에 자연스럽게 활용되는 이점 때문에 개발자들 역시 NoSQL을 선호한다.
NoSQL 데이터베이스를 사용하면 데이터는 보다 직관적이고 이해하기 쉬운 방식 또는 애플리케이션이 사용하는 것에 가까운 방식으로 저장된다.
NoSQL 스타일의 API를 사용하면 저장 또는 검색 시 데이터 변환의 필요성이 줄어든다, 또한 NoSQL 데이터베이스는 다운타임이 없는 클라우드의 이점을 완전히 누릴 수 있다.
SQL vs NoSQL
SQL 데이터베이스는 관게형인 반면 NoSQL 데이터베이스는 비 관계형이다.
관계형 데이터베이스 관리 시스템(RDBMS)은 구조화된 쿼리 언어(SQL)의 기반이다.
이를 통해 사용자는 고도로 구조화된 테이블에서 데이터에 액세스하고 데이터를 조작할 수 있다.
이 시스템은 MS SQL Server, IBM DB2, Oracle, MySQL 등 데이터베이스 시스템의 근간이 되는 모델이다.
하지만 NoSQL 데이터베이스에서는 데이터 액세스 구문이 데이터베이스마다 다를 수 있다.
관계형 데이터베이스 vs NoSQL 데이터베이스
NoSQL 데이터베이스를 이해하려면 먼저 RDBMS와 비관계형 데이터베이스의 차이를 이해해햐 한다.
RDBMS의 데이터는 테이블이라고 불리는 데이터베이스 객체에 저장되어 있다. 테이블은 관계형 데이터 항목 모음이며 열과 행으로 구성된다.
이 데이터베이스에서는 스키마를 사전에 정의해야 한다, 다시 말해 모든 열과 그와 관련된 데이터 유형이 사전에 파악되어야 애플리케이션이 데이터를 데이터베이스에 작성할 수 있다.
이 데이터베이스는 키를 사용해 여러 테이블을 연결하는 방식으로 정보를 저장하고, 그 과정에서 여러 테이블 간의 관계가 형성된다(키는 특정 행을 검색하는 데 사용되며, 검사 또는 수정될 수 있다).
반대로 NoSQL 데이터베이스에서 데이터는 사전에 스키마를 정의하지 않아도 저장될 수 있다. 작업을 진행하는 동시에 데이터를 정의하는 방식으로 빠르게 데이터를 작성하고 반복할 수 있는 능력을 얻게 된다는 것이다.
이 데이터 베이스는 그래프 기반, 열 지향, 문서 지향 도는 키-값 저장소 등 특정 비즈니스 요구 사항 수행에 적합하다.
오늘날 사용되는 데이터의 다양성, 속도, 양을 감당하기 위해서는 관계형 데이터베이스를 보완할 전혀 다른 데이터베이스가 필요하다.
이와 같은 상황 때문에 일부 영역에서 NoSQL 데이터베이스를 도입하기 시작했는데, 이 데이터베이스는 '비관계형 데이터베이스'라고도 불린다.
신속한 수평적 확장 능력 덕분에 비관계형 데이터베이스는 높은 트래픽을 처리할 수 있고, 같은 이유로 이 데이터 베이스는 고도의 적응력을 자랑한다.
NoSQL 데이터베이스를 선택해야 하는 이유
빠른 혁신이 필요한 기업 및 조직에게 있어, 민첩성을 유지하면서 동시에 모든 규모의 운영을 지속할 수 있는 능력이 게임의 승패를 좌우한다.
NoSQL 데이터베이스는 유연한 스키마를 제공하고, 대량의 데이터 및 낮은 대기시간 또는 응답시간을 요구하는 애플리케이션 구축에 이상적인 다양한 데이터 모델을 지원한다.
온라인 게이밍 및 전자상거래 웹 애플리케이션이 여기에 해당된다.
NoSQL 데이터베이스를 선택해서는 안 되는 경우
NoSQL 데이터베이스는 일반적으로 비정규화된 데이터에 의존하며, 상대적으로 적은 수의 데이터(또는 컨테이너)를 사용하는 애플리케이션 유형을 지원한다.
또한 참조를 사용해 데이터 관계를 모델링하지 않고, 포함된 기록(또는 문서)으로 모델링하는 애플리케이션을 지원한다.
대다수의 금융, 회계, 기업 리소스 계획을 위한 고전적인 백오피스 비즈니스 애플리케이션은 데이터 변형 및 데이터 중복을 방지하기 위해 고도로 정규화된 데이터에 의존한다. 이와 같은 애플리케이션은 NoSQL 데이터베이스에 어울리지 않는 유형이라고 할 수 있다.
NoSQL 데이터베이스의 또 다른 특징은 쿼리 복잡성이다. NoSQL 데이터 베이스는 단일 테이블에 대한 쿼리 작업에 아주 잘 작동하지만 쿼리의 복잡성이 높아지는 경우, 관계형 데이터베이스가 더 나은 선택이 된다.
NoSQL 데이터베이스는 보통 복잡한 조인, 하위 쿼리 및 WHERE 절에서의 중첩 질의를 제공하지 않는다.
꼭 관계형 및 비관계형 데이터베이스 중 선택해야 하는 건 아니다, 많은 경우 기업들은 관계형 및 비관계형 데이터 모델을 결합해 적용할 수 있는 컨버지드 모델을 제공하는 데이터베스를 선택한다.
이 하이브리드 접근 방식은 다양한 데이터 유형을 처리할 수 있는 유연성을 제공하는 동시에 성능 저하 없이 일관적인 읽기 및 쓰기를 보장한다.
다른 데이터베이스에는 없는 NoSQL만의 특징
NoSQL 데이터베이스와 다른 유형의 데이터베이스 간의 주요 차이는 NoSQL 데이터베이스의 경우 보통 구조화되지 스토리지를 사용한다는 점이다.
NoSQL 데이터베이스는 빠르고 단순한 쿼리, 방대한 데이터, 잦은 애플리케이션 변화를 지원하기 위해 설계되었으며, 이 데이터베이스는 개발자들의 프로그래밍을 크게 단순화해 주었다.
또 다른 중요한 차이점은 NoSQL 데이터베이스가 '샤딩'이라는 프로세스를 거쳐 수평 확장을 한다는 점이다.
여러 서버에 걸친 데이터 처리를 위해 더 많은 머신을 추가할 수 있다는 뜻으로 다른 SQL 데이터베이스에서 찾을 수 있는 수직 확장성을 지원하기 위해서는 기존 머신에 더 많은 파워와 메모리를 추가해야 한다(계속해서 더 많은 스토리지가 필요하기 때문에 지속불가능하다는 특징이 있다).
수평 확장성 덕분에 NoSQL 데이터베이스는 엄청나게 많은 양의 데이터를, 심지어 데이터가 계속해서 증가하는 동안에도 더욱 효율적으로 처리할 수 있다.
수직 확장은 집 안에 새로운 계단을 추가하는 것으로, 수평 확장은 기존 건물 옆에 새로운 건물을 추가해 세우는 것으로 생각하면 이 개념을 쉽게 이해할 수 있다.
NoSQL 데이터베이스의 이점
- 유연성
- SQL 데이터베이스를 사용하면 데이터는 훨씬 더 엄격한 사전 정의된 구조 안에 저장되지만 NoSQL를 사용하면 데이터는 엄격한 스키마 없이도 훨씬 더 자유로운 형식으로 저장될 수 있다. 이와 같은 서례 덕분에 혁신과 빠른 애플리케이션 개발이 가능해진다.
- NoSQL 데이터베이스는 하나의 데이터 저장소에서 구조적, 반구조적, 비구조적 데이터 등 모든 형식의 데이터를 손쉽게 처리할 수 있다.
- 확장성
- NoSQL 데이터베이스는 서버를 증설해 확장하는 대신 상업용 하드웨어를 사용해 확장할 수 있으며, 덕분에 증가한 트래픽을 지원하고 다운타임 없이 수요를 충족할 수 있다.
- NoSQL 데이터베이스는 확장을 통해 더 큰 용량과 성능을 갖출 수 있다, 이와 같은 이유로 데이터 세트 확장을 위한 옵션으로서 NoSQL 데이터베이스에 대한 선호도가 높다.
- 고성능
- NoSQL 데이터베이스의 확장 아키텍처는 데이터 양이나 트래픽이 증가할 때 그 진가를 발휘한다. 아래 그래픽에서 볼 수 있듯이 이 아키텍처는 빠르고 예측 가능한 10밀리초 미만의 응답 시간을 보장한다.
- NoSQL 데이터베이스는 데이터를 수집하여 이를 빠르고 안정적으로 제공한다. NoSQL 데이터베이스가 매일 테라바이트 규모의 데이터를 수집하는 동시에 고도의 대화식 사용자 경험을 제공하는 이유가 바로 이것이다.
- 아래 그래픽은 3-4ms 범위 내 95번째 대기시간을 제공하는 초당 300회의 읽기 송신율(파란색 선)과 4-5ms 범위 내 95번째 대기시간을 제공하는 초당 140회의 쓰기 송신률(초록색 선)을 보여준다.
- 가용성
- NoSQL 데이터베이스는 여러 서버, 데이터 센터, 클라우드 리소스 전반의 데이터를 자동으로 복제한다. 그 결과 사용자의 위치와 상관없이 사용자 대기시간이 최소화 된다.
- 이 기능은 데이터베이스 관리 부담을 줄이는 데에도 효과적이다. 덕분에 더 많은 시간을 우선 순위에 할애할 수 있다.
- 고도의 기능성
- NoSQL 데이터베이스는 데이터 저장 수요가 엄청나게 큰 분산형 데이터 저장소를 위해 설계되었다.
- 이와 같은 특성 덕분에 NoSQL은 빅데이터, 실시간 웹 앱, 360도 고객 정보, 온라인 쇼핑, 사물인터넷, 소셜 네트워크, 온라인 광고 애플리케이션 등을 처리하기에 이상적인 데이터베이스 옵션이다.
NoSQL 데이터베이스 유형
- 키-값 저장소
- 일반적으로 NoSQL 데이터베이스 중 가장 단순한 형태로 간주된다.
- 스키마가 없는 이 데이터 모델은 키-값 쌍으로 구성된 사전으로 조직화되며, 각 항목은 키와 값을 가지고 있다.
- 키는 쇼핑 카트 ID처럼 SQL 데이터베이스에서 사용되는 유사한 어떤 것일 수 있으며, 값은 사용자의 쇼핑 카트에 있는 개별 항목과 같은 일련의 데이터이다.
- 이 모델은 쇼핑 카트와 같은 사용자 세션 정보를 캐시하고 저장하는 데 흔히 사용되지만, 이 모델은 한 번에 여러 레코드를 가져와야 할 경우 적합하지 않다.
- Redis와 Memcached는 오픈소스 키-값 데이터베이스의 예다.
- 문서 저장소
- 문서 데이터베이스는 데이터를 문서로 저장한다. 이 저장소는 준정형 데이터를 관리하는 데 유용하며, 데이터는 일반적으로 JSON, XML 또는 BSON 형식으로 저장된다.
- 이 저장소는 데이터가 애플리케이션에서 사용될 때 데이터를 함께 모아두어 데이터를 사용할 때 변환 작업을 줄여준다.
- 문서 간 데이터 스키마(예: name과 first_name)가 일치하지 않아도 되므로 개발자는 더 큰 유연성을 누릴 수 있지만, 복잡한 트랜잭션의 경우 문제가 될 수 있으며 데이터 손상을 유발할 수 있다.
- 문서 데이터베이스의 흔한 사용 사례로는 컨텐츠 관리 시스템 및 사용자 프로필이 있다.
- MongDB는 문사 지향적 데이터베이스의 예다(MongDB는 MEAN 스택의 데이터베이스 구성 요소이다).
- 와이드-컬럼 저장소
- 정보를 컬럼에 저장하므로 사용자는 관련 없는 데이터에 추가 메모리를 할당하지 않고 특정 컬럼에만 액세스할 수 있다.
- 이 데이터베이스는 키-값 저장소와 문서 저장소의 단점을 해결하려고 하지만, 관리하기가 더 어려운 시스템일 수 있으므로 새로운 팀과 프로젝트에는 권장되지 않는다.
- Apache HBase와 Apache Cassandra는 오픈소스 와이드-컬럼 데이터베이스의 예다
- Apache HBase는 희소 데이터 세트를 저장한느 한 방법을 제공하는 Hadoop Distributed Files System(많은 빅데이터 애플리케이션에서 흔히 사용됨)을 기반으로 구축된다.
- Apache Cassandra는 여러 서버, 그리고 여러 데이터 센터를 포괄하는 클러스터링에 걸쳐 대량의 데이터를 관리하도록 설계되었다. 이 데이터베이스는 소셜 네트워킹 웹사이트 및 실시간 데이터 분석 등 다양한 사용 사례에 사용되어 왔다.
- 그래프 저장소
- 일반적으로 지식 그래프의 데이터를 보관한다. 데이터 요소는 노드, 엣지, 속성으로 저장된다.
- 어느 객체, 장소 또는 사람이든 노드가 될 수 있다.
- 엣지는 노드 간의 관계를 정의한다. 예를 들면, 노드는 IBM과 같은 클라이언트, 그리고 Ogilvy와 같은 에이전시가 될 수 있다. 엣지는 관계를 IBM과 Ogilvy 간의 고객 관계로 분류할 것이다.
- 그래프 데이터베이스는 그래프 내 요소들 간의 연결 네트워크를 저장하고 관리하는 데 사용된다.
- Neo4j는 오픈소스 커뮤니티 에디션을 사용하는 Java 기반의 그래프 기반 데이터베이스 서비스이다.
- 인메모리 저장소
- 데이터가 디스크가 아니라 메인 메모리에 보관되므로 통상적인 디스크 기반 데이터베이스보다 더 빠르게 데이터에 액세스할 수 있다.
관계형 데이터베이스(RDBMS)
관계형 데이터베이스는 서로 관련된 데이터 지점에 대한 접근을 저장 및 제공하는 데이터베이스 유형이다.
관계형 데이터베이스는 데이터를 테이블에 직관적으로 간단하게 나타내는 관계형 모델을 기반으로 한다.
관계형 데이터베이스에서 테이블의 각 행은 키라는 고유 ID가 포함된 레코드이다. 테이블의 열에는 데이터의 속성이 들어 있으며, 각 레코드에는 일반적으로 각 속성에 대한 값이 있으므로 데이터 포인트 간의 관계를 손쉽게 설정할 수 있다.
관계형 데이터베이스 예시
소규모 기업에서 제품 주문 처리에 사용하는 두 개의 테이블을 예로 들어보면 첫 번째 테이블은 고객 정보 테이블로, 각 레코드에는 고객의 이름, 주소, 배송 및 청구서 정보, 전화번호, 기타 연락처 정보가 담겨있다.
정보의 각 비트(각 속성)는 자체 열에 있으며, 데이터베이스는 각 행에 고유 ID(키)를 할당한다.
두 번째 테이블은 고객 주문 테이블로, 각 레코드에는 주문 고객의 ID와 주문된 제품, 수량, 선택한 사이즈 및 색상 등이 포함되지만 고객의 이름이나 연락처 정보는 포함되지 않는다.
이러한 두 테이블의 공통점은 ID 열(키)아다. 그러나 이러한 공통 열 때문에 관계형 데이터베이스는 두 테이블 간에 관계를 생성할 수 있다.
회사의 주문 처리 애플리케이션이 데이터베이스에 주문을 제출하면 데이터베이스는 고객 주문 테이블로 이동하여 제품 주문에 대한 올바른 정보를 가져온 다음, 해당 테이블의 고객 ID를 사용하여 고객 정보 테이블에서 고객의 청구 및 배송 정보를 조회할 수 있다.
따라서 웨어하우스는 올바른 제품을 가져올 수 있고, 고객은 적시에 주문 상품을 배송 받을 수 있으며, 회사는 대금을 받을 수 있다.
관계형 데이터베이스의 구조
관계형 모델에서는 데이터 테이블, 뷰 및 인덱스와 같은 논리 데이터 구조가 물리적인 스토리지 구조와 분리되어 있다.
이러한 분리 덕분에 데이터베이스 관리자는 논리적 구조로서 해당 데이터에 대한 액세스에 영향을 주지 않고 물리적 데이터 저장소를 관리할 수 있다.
예를 들어, 데이터베이스 파일의 이름을 변경해도 그 안에 저장된 테이블의 이름은 변경되지 않는다.
논리적 구조와 물리적 구조의 차이는 데이터베이스 작업에도 적용되는데, 데이터베이스 작업은 애플리케이션에서 데이터베이스의 데이터 및 구조를 조작할 수 있도록 명확하게 정의된 작업이다.
논리적 작업에서는 애플리케이션이 필요한 콘텐츠를 지정할 수 있으며, 물리적 작업에서는 데이터의 액세스 방법을 결정한 다음 작업을 수행한다.
데이터의 정확성과 액세스 가능성을 항상 보장하기 위해 관계형 데이터베이스는 특정한 무결성 규칙을 따른다.
예를 들어 무결성 규칙은 데이터베이스에 잘못된 정보가 입력될 가능성을 제거하기 위해 테이블에서 중복 행을 허용하지 않도록 지정할 수 있다.
관계형 모델
관계형 데이터베이스 모델은 다중 임의 데이터 구조의 문제를 해결하도록 설계되었다.
관계형 데이터 모델은 모든 애플리케이션에서 사용 가능한 표준적인 데이터 표시 및 쿼리 방식을 제공했다. 처음부터 개발자들은 관계형 데이터 베이스 모델의 가장 큰 장점이 정형 정보를 저장 및 액세스하는 직관적이고 효율적이며 유연한 방법인 테이블 사용에 있음을 알았다.
시간이 지남에 따라 개발자가 SQL(Structured Query Language)을 사용하여 데이터베이스에 데이터를 기록 및 쿼리하기 시작하면서 관계형 모델의 또 다른 강점이 부각되었다.
오랜 세월 SQL은 데이터베이스 쿼리용 언어로 널리 사용되었고, 관계형 대수를 기반으로 하는 SQL은 내부적으로 일관된 수학적 언어를 제공하여 모든 데이터베이스 쿼리의 성능을 보다 손쉽게 향상시킬 수 있게 해준다(이에 비해 다른 접근 방식들은 개별 쿼리를 정의해야 한다).
관계형 데이터베이스 관리 시스템의 이점
단순하지만 강력한 관계형 모델은 광범위한 정보 요구를 해결하기 위해 유형과 규모에 관계 없이 모든 조직에서 사용된다.
관계형 데이터베이스는 재고를 추적하고, 전자 상거래 트랜잭션을 처리하고, 엄청난 양의 미션 크리티컬한 고객 정보를 관리하는 데 사용된다.
데이터 포인트를 서로 연결하고 규칙을 기반으로 안전하고 일관된 방식으로 관리하기 위해 필요한 모든 정보에서 관계형 데이터베이스를 고려할 수 있다.
관계형 모델 및 데이터 일관성
관계형 모델은 애플리케이션과 데이터베이스 복사본(인스턴스) 간에 데이터 일관성을 유지하는 데 가장 적합하다.
예를 들어 ATM에 돈을 입금한 다음, 휴대폰에서 계정 잔액을 확인할 대 고객은 해당 입금이 업데이트된 계정 잔액에 즉시 반영되기를 기대한다.
관계형 데이터 베이스는 데이터베이스의 여러 인스턴스가 항상 동일한 데이터를 갖도록 한다는 점에서 이러한 종류의 데이터 일관성에 있어 탁월하다.
다른 유형의 데이터베이스는 대량의 데이터에서 이 정도 수준의 시의적절한 일관성을 유지하기 어렵다.
NoSQL과 같은 일부 최신 데이터베이스 조차도 "최종적인 일관성"만 제공하는 실정으로 이 원칙에서는 데이터베이스를 확장하거나 여러 사용자가 같은 데이터를 동시에 액세스할 때 데이터가 이러한 상황을 "이해"하려면 약간의 시간이 걸린다.
제품 카탈로그에 목록을 유지하는 것과 같은 일부 사례에서는 결과적 일관성이 허용되지만, 쇼핑 카트 트랜잭션과 같이 중요한 비즈니스 시스템에서는 관계형 데이터베이스가 여전히 최적 표준이다.
커밋 및 원자성
관계형 데이터베이스는 커밋(즉, 데이터베이스를 영구적으로 변경)에 대한 엄격한 정책을 사용하여 매우 세분화된 수준에서 비즈니스 규칙 및 정책을 처리한다.
항상 함께 사용되는 세 부품을 추적하는 재고 데이터베이스를 예로 들면, 한 부품을 재고에서 가져오면 다른 두 부품도 가져와야 한다.
세 부품 중 하나라도 가용 상태가 아니라면 어떤 부분도 풀링하지 않는다, 즉 데이터베이스가 커밋을 수행하기 전에 세 부분 모두 가용 상태여야 한다.
관계형 데이터베이스는 세 부분을 모두 커밋할 수 있는지 확인할 때까지 한 부분에 대한 커밋을 수행하지 않는다. 이 다각적 커밋 기능을 원자성이라고 한다.
원자성은 데이터베이스에서 데이터를 정확하게 유지하고, 비즈니스 규칙, 규정 및 정책을 준수하도록 보장하기 위한 핵심 개념이다.
ACID 속성 및 RDBMS
네 가지 중요한 속성은 관계형 데이터베이스 트랜잭션(원자, 일관성, 격리 및 내구성)을 정의한다.
일반적으로 ACID라고 한다.
- 원자성은 완전한 데이터베이스 트랜잭션을 구성하는 모든 요소를 정의한다.
- 일관성은 트랜잭션 후 데이터 포인트를 올바른 상태로 유지하기 위한 규칙을 정의한다.
- 고립성은 혼란을 피하기 위해 트랜잭션이 커밋될 때까지 트랜잭션의 효과가 다른 사람에게 보이지 않게 해준다.
- 내구성은 트랜잭션이 커밋되면 데이터 변경 사항이 영구적이 되도록 한다.
내장 프로시저 및 관계형 데이터베이스
데이터 액세스를 위해서는 많은 반복 작업이 필요하다.
예를 들어, 데이터 테이블에서 정보를 가져오는 간단한 쿼리에서 원하는 결과를 생성하려면 수 백 도는 수 천 번 작업을 반복해야 할 수 있다.
이러한 데이터 액세스 기능에서는 데이터베이스 액세스를 위한 일종의 코드가 필요하다.
애플리케이션 개발자는 이러한 기능을 사용하기 위해 새로운 애플리케이션마다 새로운 코드를 작성하기를 원치 않는다.
다행히 관계형 데이터베이스에서는 간단한 애플리케이션 호출로 액세스할 수 있는 코드 블록인 저장 절차를 사용할 수 있다.
예를 들어, 단일 저장 절차는 여러 애플리케이션 사용자에게 일관된 레코드 태그 지정 기능을 제공할 수 있다. 또한 저장 절차는 개발자가 애플리케이션의 특정 데이터 기능이 특정 방식으로 구현되도록 하는 데 도움이 될 수 있다.
데이터베이스 잠금 및 동시성
여러 사용자 또는 애플리케이션이 동시에 같은 데이터를 변경하려고 하면 데이터베이스에서 충돌이 발생할 수 있다.
잠금 및 동시성 기법을 사용하면 데이터의 무결성을 유지하면서도 충돌 가능성을 줄일 수 있다.
잠금은 데이터가 업데이트 되는 동안 다른 사용자 및 애플리케이션이 데이터에 액세스하지 못하도록 한다. 일부 데이터베이스에서는 잠금이 전체 테이블에 적용되어 애플리케이션 성능에 부정적인 영향을 미친다.
Oracle 관계형 데이터베이스 같은 다른 데이터베이스는 레코드 수준에서 잠금을 적용하여 테이블 내의 다른 레코드를 사용 가능한 상태로 유지하여 향상된 애플리케이션 성능을 보장한다.
동시성은 여러 사용자 도는 애플리케이션이 동일한 데이터베이스에서 동시에 쿼리를 호출할 때 활동을 관리한다. 이 기능은 데이터 제어를 위해 정의된 정책에 다라 사용자 및 애플리케이션에 대한 올바른 액세스를 제공한다.
관계형 데이터베이스 선택 시 고려사항
관계형 데이터베이스에 저장된 데이터의 저장, 관리, 쿼리 및 조회에 사용되는 소프트웨어를 관계형 데이터베이스 관리 시스템(RDBMS)이라고 한다.
RDBMS는 데이터 저장, 액세스 및 성능을 관리하기 위한 기능 뿐만 아니라, 사용자와 애플리케이션 및 데이터베이스 간에 인터페이스를 제공한다.
데이터베이스 유형 및 관계형 데이터베이스 제품 중에서 선택을 할 때 결정에 영향을 미칠 수 있는 요소가 몇 가지 있다. 선택하는 RDBMS는 비즈니스 요구에 따라 다르다.
- 데이터 정확성 요구사항은 무엇인가? 데이터 저장 및 정확성이 비즈니스 로직에 따라 결정되는가? 데이터 정확성에 대한 엄격한 요구 사항(예: 재무 데이터 및 정부 보고서)이 있는가?
- 확장성이 필요한가? 관리할 데이터의 규모는 얼마이며 어느 정도 성장이 예상되는가? 데이터베이스 모델이 확장성을 위해 미러링된 데이터베이스 복사본(개별 인스턴스)을 지원해야 하는가? 그렇다면 인스턴스에서 데이터 일관성을 유지할 수 있는가?
- 동시성은 얼마나 중요한가? 여러 사용자와 애플리케이션에서 동시에 데이터 액세스가 필요한가? 데이터베이스 소프트웨어는 데이터를 보호하면서도 동시성을 지원하는가?
- 성능 및 안정성 요구사항은 무엇인가? 신뢰성이 높고 고성능 제품이 필요한가? 쿼리 응답 성능에 대한 요구사항은 무엇인가? 서비스 수준 계약(SLA) 또는 예기치 않은 다운타임에 대해 공급업체는 어떤 약속을 하는가?
NoSQL 과 RDBMS의 차이
RDBMS의 장단점
- 장점
- 스키마가 명확하게 정의되어 있다.
- 데이터 무결성을 보장한다.
- 각 데이터를 중복 없이 한 번만 저장한다.
- 단점
- 유연성이 떨어져 데이터 스키마를 사전에 계획해야 하므로 추후 수정이 어렵다.
- 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있다.
- 대체로 수직적 확장만 가능하다.
NoSQL의 장단점
- 장점
- 스키마가 없기 때문에 유연하고 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장되기 때문에 데이터를 읽어오는 속도가 빨라진다.
- 수직 및 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기와 쓰기 요청 처리가 가능하다.
- 단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
- 데이터 중복을 계속 업데이트해야 한다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정이 필요한 경우 모든 컬렉션에서 수행해야 한다.
차이점
- 데이터 저장(Storage)
- RDBMS의 경우 데이터를 SQL 언어를 통해 테이블에 저장한다, 미리 작성된 스키마를 기반으로 정해진 형시겡 맞게 데이터를 저장해야만 한다.
- NoSQL의 경우 key-value, document, wide-column, graph 등의 방식으로 데이터를 저장한다.
- 스키마(Schema)
- 스키마는 데이터베이스 전체 또는 일부의 논리적인 구조를 표현하는 것으로 데이터베이스 내에서 데이터가 어떤 구조로 저장되는지를 나타낸다.
- RDBMS를 사용하려면 고정된 스키마가 필요하다, 처리하려는 데이터 속성별로 열(column)에 대한 정보를 미리 정해야만 데이터 처리가 가능하다. 스키마는 나중에 변경할 수 있지만, 데이터베이스 전체를 수정하거나 오프라인으로 전환해야 할 수도 있기 때문에 처음에 신중하게 스키마를 정의해야 한다.
- NoSQL에서는 관계형 데이터베이스에 비해 유연하게 스키마의 형태를 관리할 수 있다, 행응 추가할 때 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다.
- 쿼리(Query)
- 쿼리는 데이터베이스에 대해서 요청하는 행위로 SQL 기반의 관계형 데이터베이스는 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청해야 한다. 요청하는 방식이 정해져 있기 때문에 SQL 언어와 같이 구조화된 쿼리 언어를 사용하는 것이다.
- NoSQL의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있기 때문에 구조화되지 않은 쿼리 언어로도 데이터를 요청할 수 있다. 이를 UnQL이라고도 부른다.
- 확장성(Scalability)
- SQL 기반의 관계형 데이터베이스는 수직적으로 확장하며 높은 메모리와 CPU를 사용한다. 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하므로 비용이 비싼 편이며, 여러 개의 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 오래 걸리는 것이 단점이다.
- NoSQL로 구성된 데이터베이스는 반대로 수평적으로 확장한다, NoSQL 데이터베이스를 위한 서버를 추가로 구축하게 되면 많은 트래픽을 편리하게 처리할 수 있다는 장점이 있다. SQL보다 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅할 수 있어 상대적으로 비용이 저렴한 것이 장점이다.
RDBMS를 사용해야 할 때
- 데이터베이스의 ACID 성질을 준수해야 하는 소프트웨어를 개발하는 경우
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
- 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우
NoSQL를 사용해야 할 때
- 정확한 데이터의 구조를 알 수 없거나 변경, 확장될 가능성이 있는 경우
- 읽기는 자주 해도 데이터 변경은 자주 없는 경우
- 막대한 양의 데이터를 다뤄야 해서 데이터베이스를 수평으로 확장해야 하는 경우
'항해 99' 카테고리의 다른 글
WIL-11 (1) | 2024.04.21 |
---|---|
기술면접 준비 3주차 정리 (1) | 2024.04.18 |
쿠키(Cookie)와 세션(Session) (0) | 2024.04.16 |
HTTP, HTTPS / HTTP 메서드 (0) | 2024.04.15 |
WIL-10 (1) | 2024.04.14 |