NoSQL
in Database
본 글은 기존 Notion에서 이전 후 수정한 게시글입니다.
1. NoSQL 데이터베이스
1.1. 정의
- 특정 데이터 모델에 대해 특정 목적에 맞추어 구축되는 데이터베이스
- 개발의 용이성, 기능성 및 확장성을 널리 인정받고 있음
- “non SQL(비 SQL)” 혹은 “not only SQL(SQL만을 사용하지 않는)”로 지칭함
- 어떤 경우든 관계형 데이터베이스 이외의 형식으로 저장하는 데이터베이스라는 뜻
1.2. 등장 배경
- 2000년대 말에 스토리지 비용이 크게 하락하면서 등장
- 단순히 데이터 중복 감소를 목적으로 복잡하고 관리가 어려운 데이터 모델을 생성해야 하던 시절은 지났음
- 스토리지가 아닌, 개발자들이 소프트웨어의 개발의 1차 비용이 되었기 때문에 NoSQL 데이터베이스는 개발자 생산성에 맞게 최적화 되었음
1.3. 작동 방식
- 표 형식이 아닌, 관계형 데이터베이스와는 다른 방식으로 데이터를 저장
- 데이터 모델에 따라 유형이 다양함 ⇒ 각각의 장단점이 명확함
- 현대적인 애플리케이션 구축을 위한 유연한 스키마를 갖추고 있음
- 대량의 데이터와 높은 사용자 부하에서도 손쉬운 확장이 가능
1.4. 주요 유형
- 문서
- 키 값
- 와이드 컬럼
- 그래프
1.5. 특징
- NoSQL 데이터베이스는 관계형 데이터베이스와 방식은 다르지만 관계 데이터를 저장할 수 있음
- NoSQL 데이터베이스에 있는 관련 데이터를 모델링하는 것이 SQL 데이터베이스보다 쉬움
- 관련 데이터를 테이블 간에 분할할 필요가 없기 때문
- 관련 데이터를 단일 데이터 구조 내에 중첩시킬 수 있음
2. SQL vs NoSQL
2.1. SQL의 장단점
2.1.1. SQL의 장점
- 명확하게 정의된 스키마, 데이터 무결성 보장
- 관계는 각 데이터를 중복없이 한번만 저장됨
2.1.2. SQL의 단점
- 상대적으로 덜 유연함, 데이터 스키마는 사전에 계획되고 알려져야 함
- 나중에 수정하기가 번거롭고, 불가능할 수도 있음
- 관계를 맺고 있기 때문에, JOIN문이 많은 매우 복잡한 쿼리가 만들어질 수 있음
- 수평적 확장(컬럼의 확장으로 추정)이 어렵고, 대체로 수직적 확장(로우의 확장으로 추정)만 가능
- 어떤 시점(처리할 수 있는 처리량과 관련하여)에서 성장 한계에 직면하게 됨
2.2. 단점
2.2.1. NoSQL의 장점
- 스키마가 없기 때문에, 훨씬 유연함
- 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있음
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장됨
- 데이터를 읽어오는 속도가 빨라짐
- 수직 및 수평 확장이 가능
- 데이터가 애플리케이션에서 발생시키는 모든 읽기/쓰기 요청을 처리할 수 있음
2.2.2. NoSQL의 단점
- 유연성 때문에, 구조 결정을 하지 못하고 미루게 될 수 있음
- 데이터 중복은 여러 여러 컬렉션과 문서가 여러 개의 레코드가 변경된 경우 업데이트를 해야 함
- SQL 세계에서처럼 하나의 테이블에 하나의 레코드가 아님
- 데이터가 여러 컬레션에 중복되어 있기 때문에, 수정(update)를 해야하는 경우 모든 컬렉션에서 수정해야 함을 의미함
- SQL 세계에서는 중복된 데이터가 없기 때문에 한번만 수행하면 됨
2.3. 사용 용도
2.3.1. SQL
- 관계를 맵고 있는 데이터가 자주 변경(수정)되는 애플리케이션일 경우
- NoSQL에서는 여러 컬렉션을 모두 수정해줘야 하기 때문
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우
2.3.2. NoSQL
- 정확한 데이터 구조를 알 수 없거나 변경/확장될 수 있는 경우
- 읽기(read)처리를 자주 하지만, 데이터를 자주 변경(update)하지 않는 경우
- 즉, 한번의 변경으로 수십개의 문서를 업데이트 할 필요가 없는 경우
- 데이터베이스를 수평으로 확장해야 하는 경우
- 즉, 막대한 양의 데이터를 다뤄야 하는 경우
3. NoSQL의 종류
3.1. key-value
- 키와 값으로 이루어진, 저장과 조회라는 가장 간단한 원칙에 충실한 데이터베이스
- 특징
- 기본적인 패턴으로 key, value가 하나의 묶음으로 저장되는 구조로 단순한 구조이기에 속도가 빠르며 분산 저장이 용이
- key 안에 (Column, Value) 형태로 여러개의 필드를 가짐
- key는 unique한 고유값으로 유지
- 값에 모든 데이터 타입을 허용
- 개발자들이 데이터 입력 단계에서 검증 로직을 제대로 구현하는 것이 중요
- 테이블간 조인을 고려하지 않음
- RDB에서 관리하는 외부키나 컬럼별 constraints 등이 필요 없음
- 사용할 때
- 성능 향상을 위해 관계형 데이터베이스에서 데이터 캐싱
- 장바구니 같은 웹 애플리케이션에서 일시적인 속성 추적
- 모바일 애플리케이션용 사용자 데이터 정보와 구성 정보 저장
- 종류
- Redis
- Riak
- Oracle Berkely
- AWWS Dynamo DB
3.2. Document
- 특징
- XML, JSON, BSON - 계층적 트리 데이터 방식으로 저장
- _id : PK, RowID를 가짐
- 집합적 데이터 모델 : 관계형 DB에서의 여러개 테이블 데이터를 하나의 Document에 모아둘 수 있음
- 조회 시 한번의 조회로 필요한 데이터 획득
- join 기능을 대체
- 조회 시 한번의 조회로 필요한 데이터 획득
- 컬럼 없음 → Schema 없음
- Document 내에 필드를 정의함 (Key: Value)
- Key에 대한 값은 Document가 될 수 있음 (Embedded Document)
- key-value Type과의 차이는 Database에 값을 문서로 저장한다는 점
- 트랜지션이 원자적으로 이루어짐
- 데이터를 여러 서버로 분산 저장이 가능하고 복제와 회복이 가능한 형태
- 장애가 발생하더라도 대응에 유리
- 사용할 때
- 대용량 데이터를 읽고 쓰는 웹 사이트용 백엔드 지원
- 제품처럼 다양한 속성이 있는 데이터 관리
- 다양한 유형의 메타데이터 추적
- JSON 데이터 구조를 사용하는 애플리케이션
- 비정규화된 중첩 구조의 데이터를 사용하는 애플리케이션
- 종류
- MongoDB
- Azure Cosmos DB
- CouchDB
- MarkLogic
- OrientDB
3.3. Wide Column
- 특징
- 행마다 키와 해당값을 저장할 때마다 각각 다른값의 다른 수의 스키마를 가질 수 있음
- 사용자 이름(Key)에 해당하는 값에 스키마들이 각각 다름
- 행마다 키와 해당값을 저장할 때마다 각각 다른값의 다른 수의 스키마를 가질 수 있음
- 장점
- 대량의 데이터의 압축, 분산처리, 집계 처리(sum, count, avg 등) 및 쿼리 동작 속도 그리고 확장성이 뛰어남
종류
- Cassandra
- HBase
- Google BigTable
- Vertica
- Druid
- Accumulo
- HyperTable
3.4. graph
- 특징
- 데이터를 노드로 표현하며, 노드 사이의 관계를 엣지로 표현
- RDBMS 보다 Performance가 좋고 유연하며 유지보수에 용이한것이 특징
- Social networks, Network diagrams 등에 사용
- 종류
- Neo4j
- Blazegraph
- OrientDB
- AgensGraph(국내솔루션)
4. NoSQL 도입 사례
Reference
[NoSQL이란? | 비관계형 데이터베이스, 유연한 스키마 데이터 모델 | AWS](https://aws.amazon.com/ko/nosql/) |