-
[Spring Boot] JPA (1/4) : SQL/NoSQL 차이점서버개발/spring-boot 2020. 1. 29. 18:20
작성 목적
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
- NoSQL 이란 무엇인가 : https://inyl.github.io/programming/2017/05/09/database.html
- NoSQL DB의 종류 : http://www.incodom.kr/NoSQL_DB_%EC%9D%98_%EC%A2%85%EB%A5%98
- NoSQL 특징 : https://seohs.tistory.com/462
- AWS - 문서 데이터베이스 정의 : https://aws.amazon.com/ko/nosql/document/
- AWS - 그래프 데이터베이스 정의 : https://aws.amazon.com/ko/nosql/graph/
'서버개발 > spring-boot' 카테고리의 다른 글
[Spring Boot] JPA (2/4) : JPA 기본 개념 (0) 2020.01.30 [Spring Boot] HTTP/HTTPS (1/2) : 개념 이해 (1) 2020.01.21 [Spring Boot] OAuth2 (1/2) : 개념 이해 (0) 2020.01.21 - 스키마(schema, metadata) 가 존재한다.