[Spring Boot] JPA (1/4) : SQL/NoSQL 차이점
작성 목적
JPA를 적용하기에 앞서 기본적인 DBMS에 대한 이해를 돕고 어플리케이션의 특성에 맞추어 DBMS 선택의 폭을 넓히기 위해 작성한다. 이 페이지는 데이터베이스의 원리나 기본 개념보다는 비관계형 데이터베이스(NoSQL) 의 특징과 종류, 그리고 관계형 데이터베이스와의 차이점에 대해 다룬다.
SQL(관계형 데이터베이스)
관계형 데이터베이스(RDB, Relational Database)데이터간의 중복성을 최소화 하고 사전에 정의된 관계(Relation) 에 따라 데이터를 저장하는 데이터베이스이다. 이러한 관계들은 항목은 열과 행으로 이루어진 테이블 집합으로 구성된다. 테이블은 데이터베이스에 표시할 해당 객체들에 관한 정보를 저장하며, 이 때 각 열은 이 테이블의 속성을 나타낸다. 가장 일반적으로 사용되며 SQL(Structured Query Language) 을 이용한 질의를 통해 데이터를 저장, 수정, 삭제, 검색 등이 가능하다.
관계형 데이터베이스가 가지는 가장 큰 특징은 다음과 같다.
- 스키마(schema, metadata) 가 존재한다.
- 스키마는 데이터 개체, 속성 및 값에 대한 제약조건, 데이터베이스의 구조 등에 대한 정의이다.
- 스키마는 불변성을 가진다.
- 데이터는 관계에 따라 여러 테이블에 나누어 저장된다.
- 각각의 테이블이 중복되지 않는 데이터만을 저장한다.
NoSQL(비 관계형 데이터베이스)
RDB에 비해 덜 제한적이며 특정 데이터 모델에 대해 특정 목적에 맞추어 구축되는 데이터베이스를 총칭한다. NoSQL 용어는 1998년 카를로 스트로찌(Carlo Strozzi)가 표준 SQL 인터페이스를 채용하지 않은 자신의 경량 오픈소스 관계형 데이터베이스를 NoSQL 이라고 명명한데서 유래했다. NoSQL은 No SQL, Not Only SQL, No Relation 등의 의미로 풀이되지만, Not Only SQL 로 풀이하는것이 일반적이다. 즉, SQL의 완전한 배제가 아니며 기존 관계형 데이터베이스가 갖고있는 특성을 포함하여 다른 특성들을 부가적으로 지원한다는 의미로 받아들이는 것이 좋다.
NoSQL은 DBMS 종류에 따라 다양한 데이터 모델을 사용하는 것이 가장 큰 특징이다.
NoSQL 분류
NoSQL은 사용하는 데이터 모델에 따라 4가지로 분류 할 수 있다(데이터 모델에 따라 더 세분화 시킬 수 있다).
Document Database
JSON, XML 과 같은 Collection 데이터 모델 구조를 채택하고 있다. 테이블 스키마가 정적이지 않기 때문에 각 레코드 마다 다른 스키마를 가져갈 수 있다. 도큐먼트 내에 필드를 정의하고 이 때 Key-Value 형태로 정의된다.
- 특징
- 저장과 검색에 효과적이다.
- Embedded Document
: Value 는 Document 가 될 수 있다. 따라서 여러개의 테이블을 하나의 Document 내에 모아 둘 수 있게 되며, 이로인해 한번의 조회로 필요한 데이터 전체를 가져올 수 있다. RDB의 Join 기능을 대체한다. - 다른 모델에 비해 비교적 RDB의 쿼리와 유사한 측면이 있다.
- 어플리케이션 코드에서 사용하는 것과 동일한 문서(데이터 모델)를 사용 할 수 있으며, 이로인해 더욱 쉽게 데이터를 저장하고 쿼리 할 수 있다.
- 대표 DBMS
- MongoDB
- Amazone DynamoDB
- CouchBase
Wide Column Database(Big Table Database)
테이블의 레코드마다 키와 값을 가지고 있으며, 각 레코드마다 다른수의 스키마를 가질 수 있다.
- 특징
- 대량 데이터의 압축, 분산처리, 집계(SUM, COUNT, AVG 와 같은) 에서 효과적이다.
- 칼럼 패밀리
: 각각의 로우 데이터마다 칼럼 패밀리를 가진다 이 칼럼 패밀리는 로우마다 다른 값을 가질 수 있다. 따라서 RDB와는 다르게 한 테이블의 각 로우마다 다른 칼럼(Attribute) 를 가질 수 있다. - 하둡에서 주로 사용되는 DBMS들이 이 모델을 사용한다.
- 대표 DBMS
- Apache Cassandra
- Apache HBase
- Hypertable
- Google BigTable
- Apache Accumulo
- Druid
- Vertica
Key-Value Database
Key-Value 만으로 이루어진 심플한 구조의 데이터베이스. 속도가 빠르며 분산 저장환경에 용의하기 떄문에 주로 빠른 엑세스를 위해 메모리를 베이스로 사용한다.
- 특징
- 모델이 단순한 카운터, server config, session clustering 등에 사용.
- 액세스 속도 자체는 빠르나 대용량 데이터 처리에는 부적합하다.
- 대표 DBMS
- Redis
- Memcached
- EhCache
- Hazelcast
Graph Database
관계를 저장하고 탐색하도록 구축된 데이터베이스이다. 데이터를 노드로 표현하며 노드 사이의 관계를 엣지(edge) 로 표현한다. 이 엣지는 시작노드, 끝노드, 유형과 방향을 가지며 상-하위 관계, 동작, 소유자 등을 문서화 하게 된다. 하나의 노드가 가질 수 있는 엣지의 수와 종류는 제한이 없다.
- 특징
- 소셜 네트워킹, 추천 엔진, 이상 탐지 등의 시스템에서 사용된다.
- 데이터 간의 관계를 만들고 이러한 관계를 신속하게 쿼리 하고 싶을 때 주로 사용된다.
- 대표 DBMS
- Amazon Neptune
- Neo4j
SQL과 NoSQL 비교
확장성
가장 큰 특징 중 하나로 꼽힌다. NoSQL은 대부분 Scale-out 을 기본적으로 지원한다. 관계형 데이터베이스는 일반적으로 병렬노드에 대한 클러스터링을 고려하여 설계되지 않았으며, 따라서Scale-up 만을 지원한다.
- 장점 비교
- SQL
- 명확하게 정의된 스키마가 데이터의 불변성을 보장한다.
- 각 데이터의 중복이 없으므로 정합성을 보장한다.
- NoSQL
- 명확하게 스키마를 정의하지 않기 때문에 유연성을 가진다.
- 어플리케이션의 데이터에 맞추어 데이터를 저장하므로 효율성을 가진다 -> 보편적으로 조회 속도가 향상된다.
- Scale-out 을 지원한다. 즉, 수평적 확장이 가능하다. 다시말해 성능 확장에 유리하다.
- SQL
- 단점 비교
- SQL
- 한번 정의된 스키마의 수정이 어렵다. 어플리케이션의 요구사항에 맞추어 퍼포먼스를 유지하기가 어렵다.
- 데이터 관계에 따라 매우 복잡한 쿼리가 만들어 질 수 있으며, 마찬가지로 퍼포먼스 유지에 장애가 된다.
- 수평적 확장이 어렵다.
- NoSQL
- 유연성으로 인한 장애 -> 무분별한 데이터 모델링
- 데이터의 중복 문제. 즉, 수정(Update)에서 퍼포먼스가 떨어진다.
- SQL
사용처
- SQL
- 데이터가 자주 수정되는 경우. (Update 위주)
- 명확한 스키마 정의를 통한 퍼포먼스 유지
- NoSQL
- 정확한 데이터 모델을 규정하기 어려운 경우. 즉, 자주 수정될 여지가 있는 경우.
- Read 위주.
- 필요에 따라 DBMS의 성능 확장이 용이할 필요가 있는 경우. (scale-out)
참조 링크
- sql 과 nosql 의 차이 : https://github.com/saeromCho/Drfts_tz_Server/issues8
8. sql과 nosql이 차이점을 알아보자 · Issue #8 · saeromCho/Drfts_tz_Server
궁금했었지만 제대로 알아본 적이 없다. 이번 기회에 알아보고 조사해보는 걸로 NoSQL 데이터베이스는 확장 가능한 성능 및 스키마 없는 데이터 모델에 최적화된 비관게형 데이터베이스이다. 또한 NoSQL 데이터베이스는 개발 용이성, 짧은 지연 시간, 짧은 복원력으로 널리 인정받고 있다고 한다. 사용하는 이유 NoSQL 데이터베이스는 기존 관계형 데이터베...
github.com
Database & NoSql의 종류
NoSql이 생겨나면서 우리는 RDB보다 더 많은 선택을 할 수 있습니다. 각 저장소의 장단점을 알고 상황에 맞는 선택을 하면 한결 편한 개발과 견고한 어플리케이션을 개발하는데 도움이 될것입니다. 그럼 Database의 종류와 장단점을 아주아주~ 간략하게 알아보도록 하겠습니다. Relation DBMS 현재까지도 가장 많이 사용되며 가장 일반적인 relation이 강조된 데이터베이스입니다. 테이블이 스키마는 고정된 유형과 고정된 속성에 의해 관리가 됩니다
inyl.github.io
- NoSQL 이란 무엇인가 : https://inyl.github.io/programming/2017/05/09/database.html
Database & NoSql의 종류
NoSql이 생겨나면서 우리는 RDB보다 더 많은 선택을 할 수 있습니다. 각 저장소의 장단점을 알고 상황에 맞는 선택을 하면 한결 편한 개발과 견고한 어플리케이션을 개발하는데 도움이 될것입니다. 그럼 Database의 종류와 장단점을 아주아주~ 간략하게 알아보도록 하겠습니다. Relation DBMS 현재까지도 가장 많이 사용되며 가장 일반적인 relation이 강조된 데이터베이스입니다. 테이블이 스키마는 고정된 유형과 고정된 속성에 의해 관리가 됩니다
inyl.github.io
- NoSQL DB의 종류 : http://www.incodom.kr/NoSQL_DB_%EC%9D%98_%EC%A2%85%EB%A5%98
NoSQL DB 의 종류
# NoSQL DB의 종류
www.incodom.kr
NoSQL - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. NoSQL 데이터베이스는 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다. 이러한 접근에 대한 동기에는 디자인의 단순화, 수평적 확장성, 세세한 통제를 포함한다. NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, 레이턴시와 스루풋과 관련하여 상당한 성능 이익을 내는 것이 목적이다. NoSQL 데이터베이스는
ko.wikipedia.org
- NoSQL 특징 : https://seohs.tistory.com/462
NoSQL의 개념과 특징
출처 : http://selo.tistory.com/category/NoSQL NoSQL 그리고 MongoDB 이번 Side Project의 기술 스택으로 Meteor를 채택 진행하게되었고, 나는 Data Modeling을 맡았다. 그러나 RDBMS만 사용해본 나에게 모든 것..
seohs.tistory.com
NoSQL이란 무엇인가? 대량데이터 동시처리위한 DBMS 종류와 특징
[BY 삼성SDS] Cassandra 호환 고성능 NoSQL, ScyllaDB 중심으로“NoSQL”이란 용어를 들어보신 적이 있...
m.post.naver.com
- AWS - 문서 데이터베이스 정의 : https://aws.amazon.com/ko/nosql/document/
문서 데이터베이스란?
Amazon DocumentDB(MongoDB 호환 가능)는 MongoDB 워크로드를 지원하는 빠르고, 확장 가능하며, 가용성이 높고, 완벽하게 관리되는 문서 데이터베이스 서비스입니다. 개발자는 동일한 MongoDB 애플리케이션 코드, 드라이버 및 도구를 사용하여 Amazon DocumentDB에서 워크로드를 실행, 관리 및 확장하고 기본 인프라 관리에 대해 걱정할 필요없이 향상된 성능, 확장성 및 가용성을 누릴 수 있습니다. 지금 Amazon Docum
aws.amazon.com
- AWS - 그래프 데이터베이스 정의 : https://aws.amazon.com/ko/nosql/graph/
그래프 데이터베이스란?
Neo4j는 오픈 소스, 비관계형, 네이티브 그래프 데이터베이스로, 애플리케이션에 ACID(Atomicity, Consistency, Isolation, Durability: 원자 보장성, 일관성, 격리성, 지속성) 호환 트랜잭션 백엔드를 제공합니다. Neo4j는 속성 그래프 모델을 스토리지 수준까지 효율적으로 구현하는 네이티브 그래프 데이터베이스입니다. Neo4j는 완벽한 데이터베이스 속성을 제공하여 ACID 트랜잭션 컴플라이언스, 클러스터 지원, 런타
aws.amazon.com