개발자로 일을 하다보면 거의 대부분의 경우에 MariaDB, PostgreSQL 같은 RDB 를 사용하게 됩니다.
그러나 일을 하다보면 빅데이터 분야와 관련된 일을 할 때 가끔씩 접하게 되는것이 NoSQL 입니다.
엑셀처럼 직관적으로 눈에 보이고 머리속에 그려지는 RDB 와 달리 NoSQL 은 개념을 들어도 머릿속에 어떻게 사용하는지 개념이 한번에 떠오르지 않는데요
그래서 스스로도 공부를 해 보고자 NoSQL 에 대해서 이번 포스팅을 작성하게 되었습니다.
NoSQL의 정의
NoSQL은 전통적인 **관계형 데이터베이스 관리 시스템(RDBMS)** 과는 다른 방식으로 데이터를 저장하고 관리하는 비관계형(non-relational) 데이터베이스를 의미합니다. NoSQL은 "Not Only SQL"의 약자로, 단순히 SQL을 사용하지 않는다는 의미뿐만 아니라, 관계형 데이터베이스 이외의 다양한 데이터 모델을 지원한다는 뜻을 내포하고 있습니다.
NoSQL의 특징
- 스키마 유연성:
- RDBMS와 달리, NoSQL은 정해진 스키마가 없기 때문에 데이터 구조가 변화할 때도 유연하게 처리할 수 있습니다. 데이터를 저장할 때 고정된 테이블 스키마에 맞출 필요 없이 자유롭게 데이터를 추가할 수 있습니다.
- 수평적 확장성:
- NoSQL은 대용량 데이터를 처리할 때 서버를 여러 대 추가하는 **수평적 확장(horizontal scaling)**이 용이합니다. 즉, 하나의 서버에 의존하지 않고 여러 서버에 데이터를 분산 저장하여 성능을 유지합니다.
- 비정형 데이터 처리:
- NoSQL은 비정형 데이터(문서, 이미지, 로그 등)나 반정형 데이터를 다루는 데 매우 적합합니다. JSON, XML, BSON과 같은 다양한 형태로 데이터를 저장할 수 있습니다.
- 고성능 및 대용량 처리:
- 데이터 조회 속도가 빠르고, 대규모 데이터를 처리하는 데 최적화되어 있습니다. 특히 읽기와 쓰기 작업이 빈번한 애플리케이션에 적합합니다.
NoSQL 데이터베이스의 종류 및 구조
- 키-값 저장소(Key-Value Stores): 데이터가 키-값 쌍으로 저장됩니다.
- 예시: Redis, DynamoDB
- 사용 예시: 세션 관리, 캐싱 시스템
- 문서형(Document Stores): 데이터를 JSON, BSON 등의 문서 형식으로 저장합니다.
- 예시: MongoDB, CouchDB
- 사용 예시: 블로그 게시물, 사용자 프로필 저장
- 열 기반(Column-Family Stores): 데이터를 열 단위로 저장하여 빠른 조회가 가능합니다.
- 예시: Cassandra, HBase
- 사용 예시: 로그 데이터 저장, IoT 데이터 분석
- 그래프 데이터베이스(Graph Databases): 노드와 엣지로 데이터를 저장하여 관계 중심의 데이터를 처리합니다.
- 예시: Neo4j
- 사용 예시: 소셜 네트워크 분석, 추천 시스템
다음은 이런 NoSQL 들이 실제 개발환경에서 어떻게 쓰이는지 예시를 보도록 하겠습니다.
NoSQL이 쓰이는 대표적인 사례
- 소셜 미디어: 사용자의 프로필 정보, 게시물, 친구 관계 등을 저장하고 처리하는 데 MongoDB와 같은 문서형 데이터베이스가 자주 사용됩니다.
- IoT(사물인터넷): Cassandra 같은 열 기반 데이터베이스는 실시간으로 수집되는 센서 데이터나 로그 데이터를 저장하고 분석하는 데 활용됩니다.
- 캐싱 및 세션 관리: Redis와 같은 키-값 저장소는 빠른 조회가 필요한 세션 관리나 데이터 캐싱에 적합합니다.
- 추천 시스템: Neo4j는 그래프 구조를 활용해 사용자 간의 관계를 기반으로 추천 알고리즘을 구현하는 데 사용됩니다.
1. MongoDB (문서 기반 데이터베이스)
예시: 소셜 미디어 애플리케이션
- 저장 방식: MongoDB는 JSON(BSON) 형태로 데이터를 저장합니다. 예를 들어, 사용자의 프로필 정보를 문서 형태로 저장할 수 있습니다.
- 데이터 구조:
활용 방식: 소셜 미디어는 사용자의 프로필, 게시물, 댓글, 좋아요 등을 저장해야 하는데, MongoDB의 비정형 구조는 이러한 데이터를 유연하게 저장하고 조회할 수 있습니다. 특히, 사용자의 프로필이 매우 다양하고 자주 업데이트되는 경우, MongoDB는 스키마를 변경하지 않고도 이를 반영할 수 있어 개발에 유리합니다.
2. Redis (키-값 저장소)
예시: 세션 관리 및 캐싱 시스템
- 저장 방식: Redis는 메모리 내에서 데이터를 빠르게 저장하고 조회하는데 최적화된 키-값 저장소입니다.
- 데이터 구조: 세션 데이터를 Redis에 저장하여 빠른 사용자 인증을 구현할 수 있습니다.
- 예를 들어, 사용자 로그인 정보를 저장할 때:
활용 방식: 사용자가 웹사이트에 로그인하면, 세션 정보가 Redis에 저장되고, 이를 통해 웹 애플리케이션이 빠르게 인증 정보를 확인하고 세션을 유지할 수 있습니다. Redis는 특히 짧은 시간 동안만 필요한 데이터를 관리할 때 유용합니다. 또한, Redis는 웹 페이지 캐싱이나 자주 조회되는 데이터를 메모리에 저장해 성능을 높이는 데도 사용됩니다.
3. Cassandra (열 기반 데이터베이스)
예시: IoT(사물인터넷) 데이터 처리
- 저장 방식: Cassandra는 대규모 분산 시스템에서 사용되는 열 기반 데이터베이스로, 트래픽이 매우 높은 환경에서도 빠르고 안정적으로 데이터를 처리합니다.
- 데이터 구조:
활용 방식: IoT 장치가 실시간으로 온도, 습도, 위치 등의 데이터를 Cassandra에 저장합니다. Cassandra는 대규모 데이터 분산 처리가 가능하므로, 수백만 대의 IoT 장치에서 수집되는 방대한 양의 데이터를 손쉽게 저장하고 분석할 수 있습니다. 예를 들어, 스마트 홈 시스템에서 여러 센서들이 실시간 데이터를 지속적으로 Cassandra에 저장하고, 이를 분석해 자동화된 홈 환경을 구축할 수 있습니다.
4. Neo4j (그래프 기반 데이터베이스)
예시: 추천 시스템 및 소셜 네트워크 분석
- 저장 방식: Neo4j는 노드와 엣지(관계)로 데이터를 저장합니다. 사용자는 노드로 저장되고, 이들 간의 관계(친구 관계, 팔로우 등)가 엣지로 표현됩니다.
- 데이터 구조:
- 예를 들어, 친구 관계를 저장하는 방식:
활용 방식: 소셜 네트워크에서 사용자 간의 친구 관계, 팔로우 관계, 좋아요 등의 데이터를 기반으로 추천 시스템을 구축할 수 있습니다. 예를 들어, Alice가 Bob과 친구라면, Neo4j의 그래프 데이터베이스를 통해 Bob이 친구인 다른 사람들도 Alice에게 추천할 수 있습니다. 그래프 구조는 관계형 데이터베이스로 구현하기 어려운 복잡한 관계 데이터를 쉽게 처리할 수 있습니다.
요약
- MongoDB: 문서 기반으로 유연한 데이터를 저장하고, 소셜 미디어, 전자상거래 등의 다양한 정보를 효율적으로 관리합니다.
- Redis: 빠른 데이터 접근을 위한 캐싱 시스템, 세션 관리 등에서 주로 사용됩니다.
- Cassandra: IoT, 빅데이터 분석 등 대규모 실시간 데이터 처리에 사용됩니다.
- Neo4j: 복잡한 관계를 처리해야 하는 소셜 네트워크나 추천 시스템에서 사용됩니다.
NoSQL 데이터베이스는 데이터의 구조적 유연성, 대규모 확장성, 빠른 성능 등을 제공해 다양한 용도에 맞게 활용됩니다.
'개발 > SQL' 카테고리의 다른 글
자신의 자바 버전에 맞는 mariadb jdbc 확인하는 법 (0) | 2023.07.24 |
---|---|
오라클DB Oracle 문자열에 구분자를 여러 행으로 분리하기 (0) | 2023.05.12 |
MariaDB 통계구할 때 Group By 안쓰고 여러개의 조건별 통계 구하기 (0) | 2022.05.20 |
오라클 시퀀스를 사용하지 않고 자동 증가하는 id 값 만들기 (0) | 2021.06.23 |
오라클 시작일 종료일 사이의 연, 월, 주, 일 추출 쿼리 (1) | 2021.06.11 |