Database

Chapter 7-40-1. NoSQL기초

Chansman 2025. 3. 26. 16:42

 

📌 NoSQL 데이터베이스 소개 및 분석

(1) 여러 NoSQL을 찾아보고 리스트업한다.

📋 리스트된 NoSQL 데이터베이스

  • Cassandra
    분산형, 높은 확장성을 자랑하는 NoSQL 데이터베이스로, 고가용성대규모 데이터 처리에 적합합니다. 데이터를 여러 서버에 분산시켜 저장하고, 장애 발생 시에도 데이터가 유실되지 않도록 설계되었습니다.
  • HBase
    Apache HBase는 컬럼 기반의 NoSQL 데이터베이스로, 대규모 데이터 처리에 적합하며 HDFS(Hadoop Distributed File System) 위에서 실행됩니다. 대규모 데이터 저장 및 빠른 읽기/쓰기를 제공합니다.
  • Google BigTable
    Google의 Bigtable키-값 저장소로 대규모 데이터를 효율적으로 처리하고 확장하는 데 최적화되어 있습니다. 구글 클라우드 플랫폼에서 제공되며, 빠른 읽기/쓰기 속도를 자랑합니다.
  • Vertica
    Vertica는 컬럼 기반 저장소로, 주로 대규모 데이터 분석데이터 웨어하우징에 사용됩니다. 대규모 데이터셋에서 빠른 쿼리 성능을 제공합니다.
  • Druid
    실시간 데이터 분석을 위한 분산형 컬럼 기반 데이터베이스로, 로그 및 이벤트 데이터 처리에 적합합니다. 빠른 검색시각화가 가능합니다.
  • Accumulo
    보안성이 강한 분산형 키-값 저장소로, 고급 보안 모델을 제공합니다. 대규모 데이터를 처리하며, 중요한 보안 요건을 충족하는 시스템에 적합합니다.
  • HyperTable
    HyperTable은 Google Bigtable을 기반으로 하며, 대규모 데이터를 빠르게 처리할 수 있도록 설계된 분산형 데이터베이스입니다.

(2) 자주 사용되는 2가지의 NoSQL에 대해 정리하기

1. MongoDB - 문서 지향 데이터베이스

📄 MongoDB 개요

MongoDB는 JSON-like 형식으로 데이터를 저장하는 문서 지향 NoSQL 데이터베이스입니다. 데이터는 BSON(Binary JSON) 형식으로 저장되어, 다양한 필드와 값을 포함한 문서로 구성됩니다. 스키마 유연성 덕분에 다양한 형태의 데이터를 처리할 수 있습니다.

🔧 Architecture:

MongoDB는 문서(Document) 기반으로 데이터를 저장하고, 이를 컬렉션(Collection) 단위로 그룹화합니다.

  • Document 기반: MongoDB의 데이터는 JSON 형식의 문서로 저장되며, 필드가 동적으로 추가될 수 있어 스키마가 유연합니다.
  • Sharding: MongoDB는 **샤딩(sharding)**을 통해 데이터를 여러 서버에 분산 저장하여 수평 확장이 가능합니다.
  • Aggregation Framework: MongoDB는 데이터 집계, 필터링, 변환을 수행할 수 있는 Aggregation Framework를 제공하여 복잡한 데이터 처리에 유리합니다.

📝 문서 검색 최적화:

MongoDB는 중첩된 데이터 구조를 효율적으로 저장할 수 있어, 반정형 데이터를 처리할 때 유리합니다. 예를 들어, 다음과 같은 JSON 문서로 데이터를 저장하고 쿼리할 수 있습니다.

 
{
  "_id": ObjectId("60c72b2f9af1f1f2d3b4b6bc"),
  "name": "John Doe",
  "age": 29,
  "address": {
    "city": "New York",
    "zipcode": "10001"
  },
  "interests": ["traveling", "reading"]
}
 
  • 검색 예시: 이름이 "John Doe"인 문서 검색은 매우 간단하며, 필드 검색이 가능합니다. 또한, Aggregation을 통해 복잡한 집계 작업도 효율적으로 처리할 수 있습니다.

📊 MongoDB 활용 예시

MongoDB는 로그 관리, 콘텐츠 관리 시스템, 대화형 웹 애플리케이션 등 다양한 분야에서 사용됩니다.


2. Redis - 키-값 데이터베이스

🔑 Redis 개요

Redis는 메모리 기반키-값 저장소로, 매우 빠른 데이터 읽기/쓰기를 제공합니다. 인메모리 데이터베이스로, 고성능 캐시 시스템세션 관리에 자주 사용됩니다.

🧰 Architecture:

  • Key-Value Store: Redis는 데이터를 의 쌍으로 저장합니다. 이 구조는 매우 간단하고 빠른 데이터 조회를 가능하게 하여, 캐시 시스템에 적합합니다.
  • 데이터 구조: Redis는 다양한 자료형을 지원합니다. 예를 들어, 리스트(Lists), (Sets), 해시(Hashes), 정렬된 셋(Sorted Sets) 등 다양한 자료형을 제공하여, 더욱 복잡한 데이터를 처리할 수 있습니다.
  • Persistence: Redis는 인메모리 데이터베이스지만, 데이터를 디스크에 지속적으로 저장할 수 있는 기능을 제공합니다. 이를 통해 서버 재시작 후에도 데이터를 복구할 수 있습니다.

캐시 서버로 활용되는 이유:

Redis는 빠른 읽기/쓰기 성능 덕분에 캐시 시스템에 적합합니다. 특히, 세션 관리실시간 데이터 처리에 유용하며, **TTL(Time To Live)**을 설정하여 데이터가 자동으로 만료되도록 할 수 있습니다.

 
SET user:1234 "Alice"
GET user:1234
  • 세션 관리: 웹 애플리케이션에서 사용자의 로그인 세션 정보를 Redis에 저장하면, 서버가 재시작되더라도 세션 데이터가 유지됩니다. 이는 세션 지속성을 제공하며, 트래픽이 많은 시스템에서 성능을 향상시킵니다.

📈 Redis 활용 예시

  • 실시간 채팅 시스템
  • 쇼핑 카트 시스템
  • 세션 관리
  • 게임 상태 관리

🧠 고급 팁 & 자주 하는 실수

1. MongoDB 스키마 설계

  • MongoDB의 유연한 스키마 구조는 설계 시 주의해야 합니다. 데이터 모델을 설계할 때 과도한 중첩을 피하고, 쿼리 성능을 고려한 인덱싱 전략을 설정하는 것이 중요합니다.

2. Redis 성능 최적화

  • Redis를 사용할 때는 메모리 관리가 중요합니다. 대용량 데이터를 저장하는 데는 적합하지 않으며, 적절한 데이터 만료 정책(TTL)을 설정하여 메모리 효율성을 높여야 합니다.

마무리 요약

  • MongoDB문서 지향 NoSQL로, 다양한 데이터 모델을 지원하며 유연한 스키마와 강력한 집계 기능을 제공합니다.
  • Redis메모리 기반의 빠른 키-값 저장소로, 주로 캐시 시스템세션 관리에 사용됩니다. 빠른 읽기/쓰기 성능 덕분에 실시간 애플리케이션에서 뛰어난 성능을 발휘합니다.