[CS/DB] 데이터베이스 간단 요약

cs데이터베이스
avatar
2025.03.17
·
12 min read

  • RDBMS vs NoSQL 차이

    • RDBMS(관계형 DB)

      • SQL을 사용하면 데이터를 저장, 수정, 삭제 및 검색 가능

      • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장

      • 데이터는 관계를 통해 여러 테이블에 분산

      • 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다. 즉, 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가가 가능하다.

      • 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어지는 장점

      • 수직적 확장 - 단순히 데이터베이스 서버의 성능을 향상시키는 것

      • 장점

        • 명확하게 정의된 스키마, 데이터 무결성 보장

      • 단점

        • 덜 유연함. 데이터 스키마를 사전에 계획하고 알려야 함 (나중에 수정하기 힘듦)

        • 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질수 있음

    • NoSQL(비관계형 DB)

      • 스키마와 관계가 없음

      • 레코드를 문서라고 부름

      • 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다.

      • 문서는 JSON과 비슷한 형태로 가지고 있다.

      • 여러 테이블에 나누어 담지 않고, 관련 데이터를 동일한 ‘컬렉션’에 넣음

      • 수평적 확장 가능 - 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨

      • 조인 필요 없음

        • 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출하도록 한다.

        • 하지만 이러면 데이터가 중복되어 서롤 영향을 줄 위험이 있다.

      • 조인을 잘 사용하지 않고, 자주 변경되지 않는 데이터일 때 NoSQL 사용

      • 장점

        • 스키마가 없어서 유연함. 언제든지 저장된 데이터를 조정하고 새로운 필드 추가 가능

        • 데이터는 어플리케이션이 필요로 하는 형식으로 저장됨. 데이터 읽어오는 속도 빨라짐

        • 수직 및 수평 확장 가능 -> 어플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리 가능

      • 단점

        • 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있음

        • 데이터 중복을 계속 업데이트해야 함

        • 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 함

  • 정규화와 비정규화 개념

    • 정규화

      • 테이블 간 중복된 데이터를 줄이고, 불필요한 데이터를 최소화시킨다.

      • 무결성을 지키고, 이상 현상 방지한다.

      • 테이블 구성을 논리적이고 직관적으로 할 수 있다.

      • 데이터베이스 구조를 확장에 용이해진다.

      • 1NF : 테이블 컬럼이 원자값(하나의 값)을 갖도록 테이블 분리

        • 어떤 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있어야 한다.

        • 모든 속성에 반복되는 그룹이 나타나지 않는다.

        • 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다.

      • 2NF : 테이블의 모든 컬럼이 완전 함수적 종속을 만족해야 한다.

        • 테이블에서 기본키가 복합키로 묶여있을 때, 두 키 중 하나의 키만으로 다른 컬럼을 결정지을 수 있으면 안된다.

      • 3NF : 2NF가 진행된 테이블에서 이행적 종속을 없애기 위해 테이블 분리

        • 릴레이션이 2NF에 만족

        • 기본키가 아닌 속성들은 기본키에 의존

  • 인덱스(Index)의 역할과 B-Tree, Hash Index 개념

    • 인덱스

      • 목적 : RDBMS에서 검색 속도를 높이기 위한 기술

      • 컬럼을 색인화

      • 테이블을 생성하면, MYD, MYI, FRM 3개의 파일 생성

        • MYD : 실제 데이터 있는 파일

        • MYI : 인덱스 정보가 들어있는 파일

        • FRM : 테이블 구조가 저장되어 있는 파일

    • B-Tree

      • 이진트리는 하나의 부모가 두 개의 자식밖에 가지질 못하고, 균형이 맞지 않으면 검색 효율이 선형검색 급으로 떨어진다. 하지만 이진 트리 구조의 간결함과 균형만 맞다면 검색, 삽입, 삭제 모두 O(logN)의 성능을 보이는 장점이 있기 때문에 계속 개선시키기 위한 노력이 이루어지고 있다.

      • 이진트리를 확장해서 더 많은 수의 자식을 가질 수 있게 일반화 한 것이 B-Tree로, 데이터베이스, 파일 시스템에서 널리 사용되는 트리 자료구조의 일종이다.

      • 각 노드에 데이터가 저장된다.

      • 각 노드에서 key와 data 모두 들어갈 수 있고, data는 disk block으로 포인터가 될 수 있다.

      • 규칙

        • 노드의 자료 수가 N이면, 자식 수는 N+1이어야 한다.

        • 각 노드의 자료는 정렬된 상태여야 한다.

        • 루트 노드는 적어도 2개 이상의 자식을 가져야 한다.

        • 루트 노드를 제외한 모든 노드는 적어도 M/2개의 자료를 가지고 있어야 한다.

        • 외부 노드로 가는 경로의 길이는 모두 같다.

        • 입력 자료는 중복될 수 없다.

    • 해시(Hash)

      • 데이터를 효율적으로 관리하기 위해, 임의의 길이 데이터를 고정된 길이의 데이터로 매핑하는 것

      • 해시함수를 구현하여 데이터 값을 해시 값으로 매핑한다.

      • 결국 데이터가 많아지면 다른 데이터가 같은 해시 값으로 충돌나는 현상이 생한다.

      • 특징

        • 언제나 동일한 해시값 리턴, 인덱스를 알면 빠른 데이터 검색 가능

        • 해시테이블의 시간복잡도 O(1)

      • 충돌문제 해결

        • 체이닝 : 연결리스트로 노드를 계속 추가해나가는 방식 (제한없이 계속 연결가능, but 메모리 문제)

        • Open addressing : 해시함수로 얻은 주소가 아닌 다른 주소에 데이터를 저장할 수 있도록 허용 (해당 키 값에 저장되어 있으면 다음 주소에 저장)

        • 선형 탐사 : 정해진 고정 폭으로 옮겨 해시값의 중복을 피함

        • 제곱 탐사 : 정해진 고정 폭을 제곱수로 옮겨 해시값의 중복을 피함

  • 트랜잭션 (ACID 개념)

    • 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위

    • SQL 질의어를 통해 DB에 접근 (SELECT, INSERT, DELETE, UPDATE)

    • 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정함

    • 원자성 - 트랜잭션이 DB에 모두 반영되거나 혹은 전혀 반영되지 않아야 한다.

    • 일관성 - 트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.

    • 독립성 - 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다

    • 지속성 - 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.

    • 커밋 : 하나의 트랜잭션이 성공적으로 끝났고, DB가 일관성있는 상태일 때 이를 알려주기 위해 사용하는 연산

    • 롤백 : 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션 원자성이 깨진 경우

    • UNDO : 수정된 페이지들이 버퍼 교체 알고리즘에 따라서 디스크에 출력될 수 있음. 버퍼 교체는 트랜잭션과는 무관하게 버퍼의 상태에 따라서 결정됨. 이로 인해, 정상적으로 종료되지 않은 트랜잭션이 변경한 페이지들은 원상 복구되어야 하는데, 이 복구를 UNDO라고 한다.

    • REDO : 이미 커밋한 트랜잭션의 수정을 재반영하는 복구 작업

    • FORCE : 수정했던 모든 페이지를 트랜잭션 커밋 시점에 디스크에 반영

  • 조인(Join) 종류 (INNER, OUTER, LEFT, RIGHT)







- 컬렉션 아티클