IT

SQL vs. NoSQL 특징과 차이점이 뭐에요?

jaewon_sss 2024. 7. 12. 16:59
반응형

1. 개요

SQL:

  • 정의: 구조화된 쿼리 언어를 사용하여 관계형 데이터베이스를 관리.
  • 특징: 고정된 스키마와 테이블 기반 구조.
-- 사용자 테이블 생성
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

NoSQL:

  • 정의: 비관계형 데이터베이스로, 다양한 데이터 모델을 지원.
  • 특징: 유연한 스키마와 문서, 키-값, 그래프, 열 기반 데이터 모델.
// MongoDB 예시 - 사용자 문서 삽입
{
    "_id": 1,
    "name": "John Doe",
    "email": "john.doe@example.com"
}

 

 

 

 

2. 데이터 모델

SQL:

  • 테이블 기반: 행과 열로 구성된 테이블 구조.
  • 스키마: 데이터가 미리 정의된 스키마에 따라 저장.
-- 제품 테이블 생성
CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    price DECIMAL(10, 2)
);

 

NoSQL:

  • 유연한 데이터 모델: 문서, 키-값, 그래프, 열 기반 데이터 모델.
  • 스키마 유연성: 스키마를 미리 정의할 필요 없음.
// MongoDB 예시 - 제품 문서 삽입
{
    "_id": 1,
    "name": "Laptop",
    "price": 1200.00
}

 

 

 

3. 쿼리 언어

SQL:

  • SQL 사용: 구조화된 쿼리 언어를 사용하여 데이터 조회 및 조작.
-- 모든 사용자 조회
SELECT * FROM users;

-- 특정 사용자 조회
SELECT * FROM users WHERE id = 1;

 

NoSQL:

  • 다양한 쿼리 언어: 각 NoSQL 데이터베이스마다 고유한 쿼리 언어 사용.
// MongoDB 예시 - 모든 사용자 조회
db.users.find({});

// MongoDB 예시 - 특정 사용자 조회
db.users.find({ _id: 1 });

 

 

 

4. 스키마 설계

SQL:

  • 정형화된 스키마: 데이터 무결성과 일관성을 유지하기 위해 고정된 스키마 사용.
-- 주문 테이블 생성
CREATE TABLE orders (
    id INT PRIMARY KEY,
    user_id INT,
    product_id INT,
    quantity INT,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
);

 

NoSQL:

  • 유연한 스키마: 데이터 구조를 동적으로 변경할 수 있음.
// MongoDB 예시 - 주문 문서 삽입
{
    "_id": 1,
    "user_id": 1,
    "product_id": 1,
    "quantity": 2
}

 

 

 

 

5. 확장성

SQL:

  • 수직 확장: 더 강력한 서버로 업그레이드하여 확장.
-- 인덱스 생성으로 성능 최적화
CREATE INDEX idx_user_id ON orders(user_id);

 

NoSQL:

  • 수평 확장: 여러 서버에 데이터를 분산하여 확장.
// MongoDB 샤딩 설정 예시
sh.addShard("rs1/mongo1:27017");
sh.addShard("rs2/mongo2:27017");

 

 

 

 

6. 트랜잭션 지원

SQL:

  • ACID 준수: 원자성, 일관성, 고립성, 지속성을 보장.
-- 트랜잭션 시작
START TRANSACTION;

-- 데이터 삽입
INSERT INTO users (id, name, email) VALUES (1, 'John Doe', 'john.doe@example.com');

-- 트랜잭션 커밋
COMMIT;

NoSQL:

  • BASE 모델: 최종적 일관성을 보장하며, 트랜잭션 지원은 데이터베이스마다 다름.
// MongoDB 예시 - 트랜잭션 사용
const session = db.getMongo().startSession();
session.startTransaction();
try {
    db.users.insertOne({ _id: 1, name: 'John Doe', email: 'john.doe@example.com' }, { session });
    session.commitTransaction();
} catch (error) {
    session.abortTransaction();
}
session.endSession();

 

 

 

 

7. 데이터 일관성

SQL:

  • 강한 일관성: 모든 데이터 쓰기 연산이 즉시 모든 사용자가 볼 수 있게 적용됨.
-- 데이터 업데이트
UPDATE users SET email = 'john.new@example.com' WHERE id = 1;

 

NoSQL:

  • 최종 일관성: 시간이 지나면서 데이터가 일관성 있게 됨.
// MongoDB 예시 - 데이터 업데이트
db.users.updateOne({ _id: 1 }, { $set: { email: 'john.new@example.com' } });
반응형

'IT' 카테고리의 다른 글

GDPR과 CCPA가 뭐에요?  (0) 2024.07.14
가명처리가 뭐에요?  (0) 2024.07.13
React vs. Vue.js 특징과 차이점이 뭐에요?  (0) 2024.07.10
JSON vs. CSV 파일 형식 비교  (0) 2024.07.09
Rust vs. Go 특징과 차이점이 뭐에요?  (0) 2024.07.08