SQL vs NoSQL
목차
SQL과 NoSQL의 개념
- SQL: 데이터를 표(테이블) 형태로 저장하고 관리하는 전통적인 데이터베이스 시스템입니다.
- 데이터를 저장할 때 미리 정해진 구조(스키마)에 따라 데이터를 넣어야 합니다.
- 마치 도서관에서 책을 분류하는 규칙이 정해져 있는 것과 비슷합니다.
- NoSQL: 데이터를 유연하게 저장할 수 있는 현대적인 데이터베이스 시스템입니다.
- 다양한 형식(문서, 키-값 쌍, 그래프 등)으로 데이터를 저장할 수 있으며, 미리 정해진 구조 없이 필요에 따라 데이터를 넣을 수 있습니다.
- 이는 자유롭게 책을 쌓아두는 서재와 비슷합니다.
SQL과 NoSQL의 차이점
- 데이터 구조:
- SQL: SQL 데이터베이스는 관계형 데이터베이스 시스템(RDBMS)을 사용하며, 정해진 규칙에 따라 데이터를 표 형식으로 저장합니다. 예를 들어, 학교에서 학생 명부를 표로 작성하는 것과 같습니다.
- NoSQL: NoSQL 데이터베이스는 비관계형 데이터베이스 (Non-Relational Database)를 사용하며, 자유롭게 데이터를 저장할 수 있습니다. 예를 들어, 일기장에 자유롭게 글을 쓰는 것과 같습니다.
- 확장성:
- SQL: 더 강력한 컴퓨터로 바꿔서 성능을 높입니다. 예를 들어, 작은 컴퓨터를 큰 컴퓨터로 바꾸는 것과 같습니다.
- 대부분의 SQL 데이터베이스는 수직 확장에 의존합니다.
- NoSQL: 여러 대의 컴퓨터를 추가해서 성능을 높입니다. 예를 들어, 여러 대의 컴퓨터를 같이 사용하는 것과 같습니다.
- NoSQL 데이터베이스는 설계상 수평 확장에 최적화되어 있습니다.
- 트랜잭션:
- SQL: 모든 작업이 완벽하게 끝나야 저장됩니다. 예를 들어, 은행에서 송금할 때 모든 절차가 완료되어야 돈이 이동하는 것과 같습니다.
- NoSQL: 일부는 작업 중에 데이터가 조금씩 저장될 수도 있습니다. 예를 들어, 웹사이트에 댓글을 달 때, 댓글이 점차 저장되는 것과 비슷합니다.
가장 많이 쓰이는 SQL 종류
- 가장 많이 쓰이는 SQL
- MySQL: 오픈 소스, 사용이 쉽고 커뮤니티 지원이 풍부합니다. LAMP 스택의 일부로 널리 사용됩니다.
- 기타 SQL 종류
- PostgreSQL: 강력한 기능과 확장성, ACID 트랜잭션을 완벽하게 지원합니다.
- Oracle Database: 고성능, 고가용성, 다양한 기업용 기능을 제공합니다.
- Microsoft SQL Server: 사용이 쉬우며, .NET 환경과의 호환성이 뛰어납니다.
- SQLite: 서버가 필요 없으며, 가벼운 애플리케이션에 적합합니다.
- MariaDB: MySQL의 포크로서, 오픈 소스이며 성능과 기능이 개선되었습니다.
가장 많이 쓰이는 NoSQL 종류
- 가장 많이 쓰이는 NoSQL
- MongoDB: 문서 지향 데이터베이스로 유연한 스키마를 제공합니다. JSON과 유사한 형식을 사용해 사용이 쉽습니다.
- 기타 NoSQL 종류
- Cassandra: 높은 확장성과 가용성을 제공합니다. 대규모 데이터를 처리하는 데 적합합니다.
- Redis: 키-값 저장소로, 매우 빠른 성능을 제공합니다. 캐싱에 적합합니다.
- CouchDB: JSON 문서를 저장하며, HTTP를 통해 접근할 수 있습니다. 쉬운 데이터 동기화가 가능합니다.
- Neo4j: 그래프 데이터베이스로, 복잡한 관계 데이터를 처리하는 데 적합합니다.
- HBase: Hadoop 생태계와 통합되어 대규모 분산 데이터 처리가 가능합니다.
SQL, NoSQL 사용 시 주의할 내용
- SQL 사용 시 주의사항:
- 스키마 설계: 스키마를 잘못 설계하면 성능 문제가 발생할 수 있습니다. 미리 계획하고 설계하는 것이 중요합니다.
- 인덱스: 적절한 인덱스를 사용하지 않으면 쿼리 성능이 저하될 수 있습니다.
- 백업 및 복구: 정기적인 백업을 통해 데이터 손실에 대비해야 합니다.
- 보안: SQL 인젝션 공격을 방지하기 위해 파라미터화된 쿼리를 사용해야 합니다.
- NoSQL 사용 시 주의사항:
- 데이터 일관성: 분산 시스템에서는 데이터 일관성이 문제될 수 있으므로, 일관성 모델을 잘 이해하고 사용해야 합니다.
- 백업 및 복구: NoSQL도 정기적인 백업이 필요합니다.
- 데이터 모델링: 적절한 데이터 모델링이 필요하며, 데이터 접근 패턴을 잘 이해하고 설계해야 합니다.
- 성능 최적화: 대규모 데이터 처리에서 성능 최적화를 위해 샤딩과 인덱스를 적절히 사용해야 합니다.
데이터베이스 전문용어 요약
- RDBMS (Relational Database Management System): (관계형 데이터베이스)데이터를 테이블 형식으로 저장하고, 각 테이블은 고정된 스키마를 갖는 데이터베이스 관리 시스템. 예: MySQL, PostgreSQL.
- 스키마 (Schema): 데이터베이스에서 데이터 구조를 정의하는 규칙. 테이블, 열, 데이터 타입 등을 포함합니다.
- 트랜잭션(Transactions): 데이터베이스에서 하나의 논리적 작업 단위를 구성하는 일련의 작업을 말합니다. 트랜잭션은 데이터베이스의 일관성과 무결성을 유지하기 위해 중요한 개념입니다.
- ACID (Atomicity, Consistency, Isolation, Durability): 데이터베이스 트랜잭션이 안전하게 처리되도록 보장하는 네 가지 특성.
- 원자성 (Atomicity): 트랜잭션이 완전히 수행되거나 전혀 수행되지 않도록 보장.
- 일관성 (Consistency): 트랜잭션이 성공적으로 완료된 후에도 데이터베이스의 일관성 유지.
- 격리성 (Isolation): 동시에 수행되는 트랜잭션이 서로 간섭하지 않도록 보장.
- 내구성 (Durability): 트랜잭션 완료 후 데이터가 영구적으로 저장됨.
- 샤딩 (Sharding): 데이터를 여러 데이터베이스 서버에 분산하여 저장하는 방식으로, 주로 NoSQL에서 사용됩니다.
- 수평 확장 (Horizontal Scaling): 서버를 추가하여 시스템의 처리 능력을 확장하는 방식.
- 수직 확장 (Vertical Scaling): 기존 서버의 성능을 향상시켜 시스템의 처리 능력을 확장하는 방식.
- CAP 이론 (CAP Theorem): 분산 시스템에서 일관성(Consistency), 가용성(Availability), 파티션 허용성(Partition Tolerance) 중 두 가지 특성만을 선택할 수 있다는 이론.
- BSON (Binary JSON): JSON과 유사하지만 바이너리 형식으로 저장되는 데이터 형식, 주로 MongoDB에서 사용됩니다.
SQL, NoSQL 예시
- 아래 예시는 동일한 데이터를 SQL과 NoSQL에 저장하는 방법을 설명합니다.
- SQL 예시: SQL에서는 데이터를 테이블 형식으로 저장하고, 각 테이블은 고정된 스키마를 따릅니다. 테이블 간의 관계를 통해 데이터를 연결할 수 있습니다.
- 학생 테이블 (Students)
StudentID | Name | Age | Major |
1 | Kim.C.S | 20 | Computer Science |
2 | Lee.Y.P | 22 | Mathematics |
3 | Park.J.S | 19 | Physics |
- 과목 테이블 (Courses)
CourseID | CourseName | Credits |
101 | Database Systems | 3 |
102 | Calculus | 4 |
103 | Physics | 5 |
- 등록 테이블 (Enrollments)
EnrollmentID | StudentID | CourseID |
1 | 1 | 101 |
2 | 2 | 102 |
3 | 3 | 103 |
- NoSQL 예시: NoSQL에서는 데이터를 문서 형식으로 저장하며, 각 문서는 JSON과 유사한 유연한 구조를 가집니다. 데이터를 중첩 구조로 저장할 수 있어, 관계형 데이터베이스의 여러 테이블에 저장해야 하는 데이터를 하나의 문서에 포함시킬 수 있습니다.
[
{
"id": 1,
"name": "Kim.C.S",
"age": 20,
"major": "Computer Science",
"courses": [
{"courseId": 101, "courseName": "Database Systems", "credits": 3}
]
},
{
"id": 2,
"name": "Lee.Y.P",
"age": 22,
"major": "Mathematics",
"courses": [
{"courseId": 102, "courseName": "Calculus", "credits": 4}
]
},
{
"id": 3,
"name": "Park.J.S",
"age": 19,
"major": "Physics",
"courses": [
{"courseId": 103, "courseName": "Physics", "credits": 3}
]
}
]
'개발 > MongoDB' 카테고리의 다른 글
[MongoDB] 실전용 MongoDB 기초 사용방법 간단히! (0) | 2024.08.01 |
---|---|
[MongoDB] 윈도우 MongoDB 설치방법 처음부터 끝까지! (0) | 2024.07.29 |