티스토리 뷰
오랜 기간동안 RDBMS는 데이터를 저장하고 관리하는데 표준적인 시스템으로 많이 사용되어 왔다.
하지만 언제부턴가 NoSQL의 사용이 증가하기 시작했는데, 그 이유는 다음과 같다.
1. 2000년대 후반부터 데이터 저장 비용이 크게 감소했다.
다음은 시간 흐름에 따른 데이터 MB 비용을 나타낸다. 가격은 1985년부터 점차 하락되기 시작해서 2000년대 쯤에는 크게 하락된 것을 볼 수 있다. (최근 2022년에는 1MB 당 0.000014 달러로, 계속 하락하고 있다는 것을 알 수 있다. - 참고 자료)
데이터 저장 비용이 감소하면서, 중복 데이터를 저장하는 것이 비용 면에서 큰 부담이 되지 않을 수도 있다. 데이터 양이 많다고 가정하였을 때, RDBMS는 정규화 기법을 사용하고 데이터 중복을 최소화하여 저장하지만 수직 확장(Scale-Up)하는데 비용이 높을 것이다.
이렇게 데이터 비용이 크게 감소한 상황에서는 NoSQL 데이터베이스에서 중복 데이터를 저장하는 방법이 비용적으로 더 효율적일 수도 있다.

2. 빅데이터를 처리하기 위한 기술이 필요했다.
1990년도 이후 인터넷의 확산으로 다양한 형태의 데이터가급증했고, 대규모 데이터를 처리할 수 있는 새로운 기술이 필요해졌다. RDBMS에 빅데이터를 저장하기 위해서 수직 확장(Scale-Up) 방식으로 성능을 높여보았지만, 대규모 데이터를 처리하고 높은 트래픽을 처리하는데 한계가 있었다. 또한, 하드웨어 성능의 고도화로 인해 비용이 급증하고, 확장성에 어려움을 겪었다.
수평 확장(Scale-Out)을 지원하는 NoSQL 데이터베이스는 여러 대의 서버에 데이터를 분산 저장하여 대규모 데이터와 트래픽을 처리할 수 있었다. 이는 비용 측면에서 효율적이고 확장성이 용이하여 빅데이터를 처리하는 데 적합하여 널리 사용되기 시작했다.
3. 반정형, 비정형 데이터를 처리해야 한다.
Web 2.0 발전으로 다양한 형태의 데이터가 나오게 되었다.
Web 1.0은 단순히 일방적 형태의 서비스로 사용자에게 정보를 제공했다면, Web 2.0은 사용자가 직접 정보를 생산하여 쌍방향으로 소통하게 되었다. 소셜 미디어, 사용자 생성 콘텐츠와 같이 다양한 종류의 플랫폼이 나오면서 반정형, 비정형 데이터가 증가하게되었다. 이는 데이터의 구조가 일정하지 않기 때문에 기존 RDBMS로는 이러한 종류의 데이터를 처리하기에 테이블 구조로 관리하는데 어려움이 있었다.
스키마가 유연한 NoSQL 데이터베이스는 다양한 형태의 데이터를 저장하고 관리할 수 있도록 지원하기 때문에, 많은 어플리케이션에서 널리 사용되기 시작했다.
NoSQL 데이터베이스는 많은 기업에서 사용되고 있다. 하지만, NoSQL 데이터베이스 사용 경험이 적고 관련 정보에 대해 잘 알지 못하고 있었다. 그래서 NoSQL 데이터베이스의 개념과 종류에 대해 알아보고 어느 상황에 사용해야 하는지 알아보려고 한다.
NoSQL 정의
Not Only SQL 약자로, 데이터베이스 내에서 비정형 데이터와 반정형 데이터를 수집, 저장, 조회하는 데 사용되는 데이터베이스 관리 시스템 접근 방식이다.
여기서 말하는 비정형 데이터(Unstructured Data)는 데이터의 형식이나 구조가 정해져 있지 않은 데이터로 텍스트, 이미지, 오디오 등을 말하며, 반정형 데이터 (Semi-structured Data)는 데이터의 구조가 명확하지 않지만, 일부 태그나 구문을 통해 데이터의 구성 요소를 식별할 수 있는 데이터로 JSON, XML, YAML 등이 있다.
NoSQL을 사용하는 경우
1. 아주 낮은 응답 지연시간(latency)이 요구되는 경우
2. 다루는 데이터가 비정형(Unstructed)일 경우
3. 데이터(JSON, XML, YAML 등)를 직렬화하거나 역직렬화 해야 하는 경우
4. 아주 많은 양의 데이터를 저장해야 할 경우
5. 수평 확장 아키텍처에 대한 요구사항이 있는 경우
NoSQL의 종류와 언제 사용해야 할까?
NoSQL 의 종류는 크게 document, key-value, column-oriented, graph 데이터베이스로 나뉜다.
document store
문서(document)를 사용하여 데이터를 저장, 검색, 관리하는 DB이다.
문서에는 하나의 객체 및 관련 메타데이터를 저장하며 JSON, BSON, XML 과 같은 형식으로 저장할 수 있다. 그리고 필드-값 쌍으로 데이터를 저장하며 값은 문자열, 숫자, 날짜, 배열 또는 객체를 포함하여 다양한 데이터 구조일 수 있다.

특징
1. 데이터는 문서에 저장된다.
데이터를 문서에 저장하기 때문에 데이터를 객체로 바로 매핑할 수 있으며 데이터베이스 작업을 더 쉽게 진행할 수 있다.
2. 스키마가 유연하다.
스키마를 사전에 정의할 필요가 없으며, 문서의 필드를 자유롭게 추가하거나 변경할 수 있다.
이는 데이터 모델링의 유연성을 제공하고 변화하는 비즈니스 요구사항에 쉽게 대응할 수 있다.
3. 데이터 중복 및 중첩 구조를 활용한다.
데이터의 관련 데이터들을 단일 문서에 계층적 구조로 저장하여, 필요한 데이터를 한 번에 읽어 올 수 있도록 한다. 이는 조인(Join) 연산이 필요성을 줄인다.
4. 수평적 확장이 가능하다.
여러 서버에 데이터를 분산 저장을 할 수 있으며, 이를 통해 더 높은 성능과 확장성을 제공한다.
활용 목적과 사례
많은 양의 반정형 또는 비정형 데이터 처리를 하거나, 데이터 구조가 자주 변경되고 복잡한 중첩 데이터가 많고 읽기 작업이 많은 경우에 사용한다.
예를 들어 CMS(컨텐츠 관리 시스템), 이커머스 플랫폼이 있다.
종류
MongoDB, CouchDB, Couchbase
key-value store
데이터를 key-value 쌍으로 저장하는 DB이다.
각 요소는 고유한 키를 기반으로 빠르게 검색할 수 있으며, 값은 정수와 문자열부터 JSON, Lists, BLOB 등과 같은 다양한 구조를 가질 수 있다.

특징
1. 다양한 데이터 타입을 지원한다.
정수, 문자열과 같은 간단한 타입을 포함하여 배열, JSON, date, binary data, 중첩 구조의 데이터 타입을 지원한다.
2. 단순하고, 수평적 확장이 용이하며 빠른 읽기/쓰기 성능을 지원한다.
활용 목적
어플리케이션 응답 가속화를 위한 데이터 캐싱을 하거나, 사용자 기본 정보를 저장하는 경우에 사용한다.
예를 들어 세션관리, 사용자 기본 정보 저장, 자주 검색되지만 거의 업데이트 되지 않는 데이터에 대한 캐시가 있다.
종류
Redis, Riak, DynamoDB
column-oriented store
데이터를 행(Row)이 아닌 컬럼(Column)으로 저장하는 DB이다.
특징
1. 스키마가 유연하다.
활용 목적과 사례
1. 많은 양의 데이터 및 복잡한 쿼리를 처리
2. 로그 데이터, 메트릭스 분석
종류
HBase, Apache Cassandra
graph store
그래프 구조를 사용하여 데이터를 저장하는 DB이다.

특징
1. 데이터들의 관계에 중점을 둔다.
관계를 사용하여 데이터 간의 연결을 쉽게 식별할 수 있다.
2. 노드, 엣지, 속성으로 구성된 그래프 구조로 데이터를 표현하고 저장한다.
데이터는 노드에 저장되고 데이터 간의 관계는 엣지에 저장한다. 속성은 노드와 관련된 정보이다.
3. 복잡한 쿼리를 수행하는데 빠르다.
활용 목적과 사례
상호 연결성이 높은 데이터가 존재하거나, 데이터 양이 많고 복잡한 관계가 존재하는 경우에 사용한다.
예를 들어 추천 시스템, 링크드인이나 페이스북 같은 소셜 네트워킹이 있다.
종류
Neo4j, ArangoDB
참고
https://blog.teamtreehouse.com/should-you-go-beyond-relational-databases
Should you go Beyond Relational Databases?
Relational databases, such as MySQL, PostgreSQL and various commercial products, have served us well for many years. Lately, however, there has been a lot of discussion on whether the relational model is reaching the end of its life-span, and what...
blog.teamtreehouse.com
https://redis.io/nosql/key-value-databases/
What is a Key-Value Database? - Redis
Learn what a key-value database is, when to use it, and use cases to support modern-application development.
redis.io
https://www.mongodb.com/resources/basics/databases/document-databases
Document Database - NoSQL
Learn what document databases are, their strengths and weaknesses, and when to use them.
www.mongodb.com
https://dev.to/aws-builders/intro-to-4-types-of-nosql-databases-45nh
intro to 4 types of NoSQL databases
There is no one fixed solution for choosing a database. This blog covers the 4 types of NoSQL...
dev.to
'Server > Database' 카테고리의 다른 글
데이터베이스의 다중화 (0) | 2024.12.17 |
---|---|
[MySQL] 옵티마이저 (0) | 2022.11.01 |
[MySQL] View Table (0) | 2022.07.28 |
[MySQL] LOAD DATA (0) | 2022.07.28 |
[MySQL] CHECK 제약 조건 (0) | 2022.06.15 |
- Total
- Today
- Yesterday
- object
- java
- Red-Black Tree
- Sticky Session
- 인스턴스변수
- syncronized
- @conditional
- 로드 밸런서
- 티스토리챌린지
- Load Balancer
- Security
- 추상클래스
- fail-fast
- AutoConfiguration
- fail-safe
- Hash
- Caching
- 자동구성
- nginx
- HashMap
- spring boot
- 오블완
- 다중화
- Spring
- nosql
- 정적변수
- 고정 세션
- HashSet
- 인터페이스
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |