[Data] Database 기초 다지기 - 데이터 베이스 관리 시스템이란? (DBMS)

    Database 기초 다지기 2번째 글입니다.
    데이터 베이스에 이어서 데이터 베이스 관리 시스템에 대해 정리하겠습니다.
    데이터 베이스에 대해 궁금한 점이 있으시면 아래 링크를 참고하세요.

     

    [Data] Database기초 다지기 - 데이터 베이스란? (Ft. DIKW, Literacy, DB)

    데이터 베이스 기초 데이터 리터러시 DIKW 피라미드란? DIWK 피라미드는 Data, Information, Knowledge, Wisdom로 구성되어 있습니다. 이는 데이터, 정보, 지식을 통해 지혜를 얻어내는 과정을 계층적 구조로

    kay-dev.tistory.com


    데이터 베이스 관리 시스템 (DBMS)

    DBMS (shutterstock)

    정의와 기능

    DBMS 정의

    데이터 베이스 시스템

    DBMS는 위와 같이 표현할 수 있습니다.
    그리고 다수의 응용 소프트웨어 및 사용자가 데이터 베이스에 접근하여
    원활하게 사용할 수 있도록 중간에서 관리해주는 시스템이라고 정의할 수 있습니다.


    DBMS 기능

    DBMS의 기능은 크게 4가지로 소개할 수 있습니다.

    • 동시성 제어
      • 다수 트랜잭션*의 동시 처리로 부터 데이터 무결성** 확보를 위한 제어 수행
    • 회복 관리
      • 시스템 오류 및 장애로 인한 데이터 손실 및 결함의 대응
    • 성능 관리
      • 데이터 처리 속도 확보를 위한 실행 계획의 최적화
    • 보안 관리
      • 비인가 사용자의 접근 제어 및 중요 정보의 암호화

    * 트랜잭션: 데이터 무결성을 보장하기 위한 하나의 논리적 기능을 수행하는 작업 단위 (글 마지막에 상세 설명)
    ** 데이터 무결성: 데이터의 정확성, 일관성, 유효성을 의미

    DBMS의 종류와 특징들은 다음 글에서 다뤘으니 아래 링크를 통해 확인해 보세요.

     

    [Data] Database 기초 다기지 - DBMS의 종류와 구조, 특징 (Ft. 데이터 무결성, 옵티마이저, 트랜잭션)

    Database 기초 다지기 3번째 글입니다. 데이터 베이스 관리 시스템에 대해 소개한 글에 이어 데이터 베이스 관리 시스템의 종류와 특징을 정리해 볼게요. 데이터 베이스나 데이터 베이스 관리 시스

    kay-dev.tistory.com

    기능 중에서 "동시성 제어"와 "회복 관리"는 아래에서 더 자세히 알아보겠습니다.


    옵티마이저 (Optimizer)

    옵티마이저가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진입니다.

    옵티마이저는 아래와 같은 절차를 가지고 있습니다.

    • Parsing
      • Syntax, Semantics 검사
      • Pared Tree 생성
    • Optimization
      • 서브 질의와 뷰의 병합
      • 액세스 경로 결정 (RBO, CBO)
    • QEP (QP)
      • Query Execution Plan (Query Plan)
      • 실행계획 수립 및 실행
      • Cache에 저장해 재활용

    트랜잭션 (Transaction)

    트랜잭션이란 데이터 무결성을 보장하기 위한 하나의 논리적 기능을 수행하는 작업 단위입니다.
    데이터 베이스 상태를 변화시키는 하나의 논리적 작업 단위를 구성하는 일련의 연산 집합이죠.

    트랜잭션

    데이터 베이스의 Data1을 Data2로 Update 하는 과정을 예로 들어볼게요.
    트랜잭션이 시작되면 각 단위 기능들이 Update 됩니다.
    도중에 한 단위기능이 실패하면 모든 트랜잭션 과정은 취소되고
    트랜잭션을 시작하기 전 상태로 돌아가는 "Rollback"이 수행됩니다.
    만약 모든 단위기능이 성공하면 트랜잭션이 종료되고 이를 "Commit"합니다.

    트랜잭션은 몇 가지 특성을 가지고 있어요.

    • 원자성(Atomicity)
      • 트랜잭션의 "All or Nothing" 특성
      • 모든 작업의 완벽 수행 또는 모두 취소
      • 보장 방안: 회복 기법
    • 일관성(Consistency)
      • 트랜잭션 연산 성공 후에는 일관성 있는 데이터 베이스 상태를 보존
      • 보장 방안: 동시성 제어
    • 고립성(Isolation)
      • 트랜잭션이 실행 중에 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근할 수 없는 특성
      • 보장 방안: 동시성 제어
    • 지속성(Durability)
      • 완료된 트랜잭션 결과 영구 반영
      • SW, HW 장애 시 절대적으로 보전
      • 보장 방안: 회복 기법

    옵티마이저트랜잭션은 다음 글에서 더 상세히 다뤘으니 아래 링크를 통해 확인해 보세요.

     

     

    [Data] Database 기초 다기지 - DBMS의 종류와 구조, 특징 (Ft. 데이터 무결성, 옵티마이저, 트랜잭션)

    Database 기초 다지기 3번째 글입니다. 데이터 베이스 관리 시스템에 대해 소개한 글에 이어 데이터 베이스 관리 시스템의 종류와 특징을 정리해 볼게요. 데이터 베이스나 데이터 베이스 관리 시스

    kay-dev.tistory.com

    자, 이제 트랜잭션의 보장 방안으로 제시된 회복 기법동시성 제어에 대해 알아볼까요?



    동시성 제어

    동시성 제어

    동시성 제어는 다중 사용자 환경을 지원하는 데이터 베이스 시스템에서
    여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능을 말합니다.
    그리고 직렬성 보장이란 트랜잭션들이 병행 처리한 결과가 순차적으로 수행한 결과와 같아지는 성질입니다.

    예를 통해 하나씩 살펴볼게요.

    동시성 제어 예시

    통장에 10,000원이 있고 두 사람이 아주 근소한 시간차이로 인출을 시도하는 상황입니다.

    동시성 미수행 시에는 문제가 발생하겠죠?
    사람 A가 먼저 인출을 하는 중이라면 통장의 잔고는 7,000원이 돼야 합니다.
    하지만 사람 B도 거의 비슷한 시간에 인출하려 해서 잔고가 10,000원으로 보이고 전액을 인출하려 합니다.
    이때 발생한 문제를 "현황파악의 오류(Dirty Read)"라고 합니다.
    그리고 결국 13,000원이 인출되게 된다면 이를 "갱신 손실(Lost Update)"이라고 하죠.
    모든 상황이 끝났을 때 사람 A와 사람 B가 보는 통장의 잔고가 서로 다르겠죠?
    이건 "모순성(Inconsistency)"이라는 문제입니다.
    만약 사람 B가 문제를 인지하고 10,000원 인출을 취소하려 했지만 취소가 안 됐습니다.
    바로 "연쇄 복귀(Cascading Rollback)"의 문제입니다.

    그렇다면 이러한 문제들을 방지하기 위해 동시성 제어가 필요할 겁니다.
    다시 처음의 상황으로 돌아가보죠.
    근소한 차이지만 사람 A가 먼저 인출을 시도합니다.
    그다음으로 사람 B가 인출을 하려 하지만 접근을 못하게 막아주는 기능이 있습니다.
    바로 "Locking"이죠. 여기서 더 발전해 이중적으로 방지기능을 수행하는 것이 "2 Phase Locking"입니다.
    그리고 먼저 접근한 사람 A의 동작을 우선 처리하는 것이 "Time Ordering"이죠.
    만약 수백, 수천 명의 사람이 한 Data에 접근하면 어떨까요?
    "Validation(낙관적 검증)"을 통해 동시성 제어 여부를 내부적으로 확인하고 결과를 출력해야 합니다.
    그리고 하나의 Data에 접근한 사람들마다 Serial Number(S/N)를 부여하고
    가장 최신의 S/N을 갖는 Data 만 보유하도록 하는 것을 "다중 비전 동시성제어 (MVCC)"라 합니다.

    어떤가요?
    예와 함께 보니 이해가 더 편하시죠?


    데이터 베이스 회복

    데이터 베이스 회복장애 발생 시
    Log 등을 통해 데이터 베이스를 장애 발생 이전의 상태로 복원(Recovery)하는 기법입니다.

    이 복원 기법에는 2가지 방식이 있습니다.
    앞서 알아본 트랜잭션을 기준으로 두 방식을 구분할 수 있죠.

    • REDO(Forward Recovery)
      • 장애 발생 시점: 트랜잭션 완료 후 (Commit 이후)
      • 복원 메커니즘: 변경사항 Log를 재 실행 (Commit 한 버전으로 복원)
    • UNDO(Backward Recovery)
      • 장애 발생 시점: 트랜잭션 완료 전 (Commit 전)
      • 복원 메커니즘: Log를 사용해 모든 변경사항 취소

    두 방식 모두 가장 최근 Commit 한 버전으로 복원한다고 할 수 있겠네요.


    데이터 베이스 관리 시스템 (DBMS)에 대해 알아봤습니다.
    제 글이 도움이 되면 좋겠습니다.
    감사합니다.😊

    댓글

    Designed by JB FACTORY