24.12.12 TIL NoSQL

신성훈·2024년 12월 12일

TIL

목록 보기
98/162

1. NoSQL이란?

NoSQL은 관계형 데이터베이스(RDBMS)와 달리 테이블 간 관계를 정의하지 않는 데이터베이스입니다.
"Not Only SQL"이라는 뜻으로, 기존 RDBMS가 아닌 다양한 데이터 저장 방식(Key-Value, Document, Graph 등)을 포괄합니다.

NoSQL은 비정형 데이터대규모 분산 시스템에 적합하며, 유연한 스키마와 뛰어난 확장성을 제공합니다.


2. NoSQL의 주요 데이터 모델

  1. 키-값 저장소(Key-Value Stores)

    • 데이터를 Key와 Value 쌍으로 저장
    • 빠른 데이터 검색에 적합
    • 예: Redis, DynamoDB
  2. 문서 지향(Document-Oriented)

    • 데이터를 JSON, BSON 형태의 문서로 저장
    • 유연한 스키마를 지원
    • 예: MongoDB, Couchbase
  3. 열 지향(Column-Family)

    • 데이터를 열 단위로 저장
    • 대규모 데이터 분석에 적합
    • 예: Cassandra, HBase
  4. 그래프(Graph)

    • 데이터를 노드(Node)와 관계(Edge)로 저장
    • 복잡한 관계를 표현하기에 적합
    • 예: Neo4j, ArangoDB

3. NoSQL의 특징

  1. 유연한 스키마

    • 테이블 설계 없이 데이터 구조를 동적으로 변경 가능
    • JSON, Key-Value 등 다양한 데이터 구조를 지원
  2. 수평적 확장성(Scalability)

    • 서버를 추가하여 데이터와 트래픽을 분산 처리 가능
    • RDBMS의 수직적 확장과 대비됨
  3. 높은 성능

    • 단순한 데이터 모델로 빠른 읽기/쓰기 성능 제공
    • 특히 분산 환경에서 강점
  4. CAP 이론

    • NoSQL은 Consistency(일관성), Availability(가용성), Partition Tolerance(파티션 허용성) 중 2가지를 선택해야 함

4. NoSQL의 장점과 단점

장점

  • 대용량 데이터를 빠르게 처리 가능
  • 스키마 제약이 없어 애플리케이션 변화에 유연
  • 데이터 중복 저장을 통해 읽기 성능 최적화
  • 분산 시스템에 적합

단점

  • 관계형 데이터 간 복잡한 쿼리 작성이 어려움
  • ACID 특성 부족으로 데이터 일관성 유지가 어려울 수 있음
  • 특정 용도에 맞춘 데이터 모델을 선택해야 함

5. NoSQL과 RDBMS 비교

특징RDBMSNoSQL
스키마고정 스키마유연한 스키마
확장성수직적 확장수평적 확장
데이터 구조테이블Key-Value, JSON, 등
트랜잭션 지원ACID 완전 지원제한적 지원
사용 사례복잡한 관계형 데이터 처리비정형 데이터, 빅데이터

6. NoSQL 사용 사례

  1. MongoDB

    • JSON 문서 기반의 데이터 저장
    • 블로그, 소셜 네트워크 등 비정형 데이터 처리
  2. Redis

    • Key-Value 구조로 빠른 데이터 캐싱에 사용
    • 세션 관리, 랭킹 시스템 구현
  3. Cassandra

    • 분산 환경에서 대규모 데이터 저장
    • IoT, 로그 데이터 처리

7. NoSQL 사용 예시 (MongoDB 기준)

데이터 삽입

db.users.insertOne({
    name: "Alice",
    age: 25,
    hobbies: ["reading", "traveling"]
});

데이터 조회

db.users.find({ age: { $gt: 20 } });

데이터 업데이트

db.users.updateOne({ name: "Alice" }, { $set: { age: 26 } });

데이터 삭제

db.users.deleteOne({ name: "Alice" });

8. 마무리

NoSQL은 RDBMS와는 다른 방식으로 데이터를 처리하며, 특정 환경에서는 매우 유용합니다. MongoDB와 Redis를 사용하며 데이터 구조 설계와 쿼리 작성의 자유로움을 알 수 있었습니다. 그러나, 데이터 무결성과 관계형 데이터 처리가 중요한 경우 RDBMS를 사용하는 것이 적합하다는 점도 배웠습니다. NoSQL과 RDBMS를 상황에 맞게 혼합하여 사용하는 것이 중요하다는 것을 느꼈습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글