Good Morning

DBMS와 NoSQL: 기초부터 활용까지 알아보기 본문

Database

DBMS와 NoSQL: 기초부터 활용까지 알아보기

욘쥰 2025. 1. 4. 12:11

현대 애플리케이션에서 데이터베이스는 필수 요소입니다. 데이터베이스를 효과적으로 관리하기 위해 사용하는 **DBMS(Database Management System)**와 최근 각광받는 NoSQL에 대해 알아보겠습니다.

 

1. DBMS란?

DBMS(Database Management System)는 데이터를 저장, 관리, 검색, 수정할 수 있도록 돕는 소프트웨어입니다.
관계형 데이터베이스와 비관계형 데이터베이스로 나뉘며, 각각의 특징과 사례가 다릅니다.

RDBMS에서 SQL 사용 예제

-- 사용자 테이블 생성
CREATE TABLE Users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100) UNIQUE
);

-- 데이터 삽입
INSERT INTO Users (name, email) VALUES ('Alice', 'alice@example.com');

-- 데이터 조회
SELECT * FROM Users WHERE name = 'Alice';

 

2. NoSQL이란?

NoSQL은 전통적인 관계형 데이터베이스가 아닌, 유연한 데이터 모델과 수평적 확장성을 가진 데이터베이스입니다.

MongoDB에서 데이터 저장 예제

// 사용자 데이터 삽입 (MongoDB)
db.users.insertOne({
    name: "Alice",
    email: "alice@example.com",
    age: 25,
    hobbies: ["reading", "traveling"]
});

// 데이터 조회
db.users.find({ name: "Alice" });

 

3. NoSQL 데이터 모델의 유형

키-값(Key-Value) 스토어

  • 데이터를 Key와 Value 형태로 저장합니다.
  • 예: Redis
# Redis 사용 예제 (Python)
import redis

# Redis 연결
r = redis.StrictRedis(host='localhost', port=6379, decode_responses=True)

# 데이터 저장
r.set('name', 'Alice')

# 데이터 조회
print(r.get('name'))  # 출력: Alice

 

문서(Document) 데이터베이스

  • 데이터를 JSON 형태로 저장합니다.
  • 예: MongoDB
// MongoDB 사용 예제
db.products.insertOne({
    name: "Laptop",
    price: 1200,
    tags: ["electronics", "computing"],
    stock: 50
});

db.products.find({ price: { $gt: 1000 } }); // 가격이 1000 이상인 상품 조회

 

열(Column) 기반 데이터베이스

  • 데이터를 열 단위로 저장하여 대규모 분석에 적합합니다.
  • 예: Cassandra
-- Cassandra에서 테이블 생성
CREATE TABLE users (
    id UUID PRIMARY KEY,
    name TEXT,
    email TEXT,
    age INT
);

-- 데이터 삽입
INSERT INTO users (id, name, email, age) VALUES (uuid(), 'Alice', 'alice@example.com', 25);

-- 데이터 조회
SELECT * FROM users WHERE name = 'Alice';

 

그래프(Graph) 데이터베이스

  • 데이터 간의 관계를 노드와 간선으로 표현합니다.
  • 예: Neo4j
// 사용자 노드 생성
CREATE (a:User {name: "Alice", age: 25});
CREATE (b:User {name: "Bob", age: 30});

// 관계 생성
CREATE (a)-[:FRIENDS_WITH]->(b);

// 관계 조회
MATCH (a:User)-[:FRIENDS_WITH]->(b:User) RETURN a.name, b.name;

 

4. NoSQL vs RDBMS 비교

특징 NoSQL RDBMS

데이터 모델 비관계형 (문서, 키-값, 그래프 등) 관계형 (테이블 기반)
스키마 유연한 스키마 고정된 스키마
확장성 수평 확장 (Scale-out) 수직 확장 (Scale-up)
일관성 약한 일관성 (Eventually Consistent) 강한 일관성 (ACID 준수)
사용 사례 실시간 처리, 빅데이터 관리 트랜잭션 처리, 정형 데이터 관리

 

5. 실제 사례: 카카오톡 데이터베이스 활용

카카오톡은 여러 데이터베이스를 혼합해 사용합니다.

  • Redis: 사용자 상태 관리 및 메시지 큐 처리.
  • Cassandra: 대규모 메시지 이력 저장.
  • MySQL: 사용자 정보 관리.
  • Elasticsearch: 대화 검색 및 로그 분석.

Redis를 사용한 세션 관리 예제

# Redis로 사용자 세션 관리 (Python)
import redis

# Redis 연결
r = redis.StrictRedis(host='localhost', port=6379, decode_responses=True)

# 사용자 세션 저장
r.set('user:1001:status', 'online')

# 사용자 상태 조회
print(r.get('user:1001:status'))  # 출력: online