반응형
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 |