본문 바로가기
개발/MongoDB

[SQL] SQL과 NoSQL 쉽게 이해하기

by 꾀돌이 개발자 2024. 7. 27.
반응형

 

SQL vs NoSQL

 

 

 
 

목차

     

    SQLNoSQL의 개념

    - SQL: 데이터를 표(테이블) 형태로 저장하고 관리하는 전통적인 데이터베이스 시스템입니다.

    • 데이터를 저장할 때 미리 정해진 구조(스키마)에 따라 데이터를 넣어야 합니다.
    • 마치 도서관에서 책을 분류하는 규칙이 정해져 있는 것과 비슷합니다.

     

    - NoSQL: 데이터를 유연하게 저장할 수 있는 현대적인 데이터베이스 시스템입니다.

    • 다양한 형식(문서, 키-값 쌍, 그래프 등)으로 데이터를 저장할 수 있으며, 미리 정해진 구조 없이 필요에 따라 데이터를 넣을 수 있습니다.
    • 이는 자유롭게 책을 쌓아두는 서재와 비슷합니다.

     

    SQL NoSQL의 차이점

    - 데이터 구조:

    • SQL: SQL 데이터베이스는 관계형 데이터베이스 시스템(RDBMS)을 사용하며, 정해진 규칙에 따라 데이터를 표 형식으로 저장합니다. 예를 들어, 학교에서 학생 명부를 표로 작성하는 것과 같습니다.
    • NoSQL: NoSQL 데이터베이스는 비관계형 데이터베이스 (Non-Relational Database)를 사용하며, 자유롭게 데이터를 저장할 수 있습니다. 예를 들어, 일기장에 자유롭게 글을 쓰는 것과 같습니다.

     

    - 확장성:

    • SQL: 더 강력한 컴퓨터로 바꿔서 성능을 높입니다. 예를 들어, 작은 컴퓨터를 큰 컴퓨터로 바꾸는 것과 같습니다.
      1. 대부분의 SQL 데이터베이스는 수직 확장에 의존합니다.
    • NoSQL: 여러 대의 컴퓨터를 추가해서 성능을 높입니다. 예를 들어, 여러 대의 컴퓨터를 같이 사용하는 것과 같습니다.
      1. 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 생태계와 통합되어 대규모 분산 데이터 처리가 가능합니다.

     

    SQLNoSQL 사용 시 주의할 내용

    - 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에서 사용됩니다.

     

    SQLNoSQL 예시

    - 아래 예시는 동일한 데이터를 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}
        ]
      }
    ]

     

     

    반응형