본문 바로가기
DB/DB 공통

(DB) 데이터 제거와 트랜잭션

by 미니몬 2023. 8. 1.

목차

    728x90
    반응형

    Summary

    이 포스트에서는 DB를 다룰 때 굉장히 중요한 내용인 트랜잭션에 대한 개념을 설명하고,
    데이터를 삭제할 때 고려할 사항을 정리하며 Commit / Rollback 에 대한 개념을 알아보겠습니다.

     

     

    1. 트랜잭션(Transaction) 이란?

    트랜잭션(Transaction) 이라는 단어는 '거래', '처리', '업무' 등의 뜻을 가진 단어인데요.

    데이터베이스에서 또한 비슷한 의미로 사용되는데 일반적으로 '최소 처리 단위' 라고 생각하시면 됩니다.

     

    좀 더 자세히 설명하면 데이터베이스에서 트랜잭션(Transaction)은 하나의 논리적인 작업 단위를 의미합니다. 
    트랜잭션은 데이터베이스에서 데이터를 읽거나 변경하는 일련의 작업들을 말하며, 
    모든 작업이 성공적으로 수행되거나, 실패로 인해 작업이 없었던 것처럼 처리되는 것을 보장합니다.

    예를 들어, 은행에서 두 계좌 간에 돈을 이체하는 과정을 생각해보겠습니다. 

    이 과정은 두 개의 개별 작업이 동시에 일어나야 하는 업무입니다.
    은행의 입장에서 보내는 사람 계좌에서는 돈을 빼는 작업이 이루어지고,
    받는 사람의 계좌에 돈을 넣는 두 개의 작업으로 구성됩니다.

    이 두 작업은 동시에 같이 완료되어야 은행의 입장에서 일관성을 유지할 수 있습니다.
    이처럼 돈을 빼는 작업과 넣는 작업이 같은 일련의 작업으로 묶이게되며 이를 하나의 트랜잭션이라고 표현합니다.

     

    이러한 트랜잭션은 ACID라는 특성을 가집니다

    • 원자성(Atomicity)
      트랜잭션에 포함된 모든 작업은 모두 완료되거나, 아니면 모두 수행되지 않아야 합니다. 
      즉, 모든 것이 완벽하게 수행되거나 아무것도 수행되지 않아야 합니다.

    • 일관성(Consistency)
      트랜잭션은 데이터베이스를 하나의 일관된 상태에서 다른 일관된 상태로 변환해야 합니다. 
      트랜잭션이 시작하기 전과 후에 데이터베이스의 일관성 제약조건은 모두 만족해야 합니다.

    • 지속성(Durability)
      트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 합니다. 

      즉, 시스템 고장, 다운 등 어떠한 경우에도 완료된 트랜잭션의 결과는 데이터베이스에 저장되어야 합니다.

    • 격리성(Isolation)
      트랜잭션은 서로 독립적으로 실행되어야 합니다. 
      즉, 하나의 트랜잭션이 다른 트랜잭션의 중간 결과를 볼 수 없습니다. 
      이것은 트랜잭션 외부에서는 연속적인 트랜잭션이 서로에게 영향을 미치지 않게 하는 것을 보장합니다.


    2. 데이터 삭제시 유의 사항

    데이터를 삭제할 때 사용하는 명령은 Delete(DML), Truncate(DDL), DROP(DDL) 세 가지로 구분되는데요.
    각 명령에 대한 개념을 간단히 정리해 보겠습니다.

     

    • DELETE(DML) : 테이블에서 특정 레코드(행)을 삭제
      - 장점 : 롤백 가능, 특정 조건에 따라 유연하게 삭제할 수 있음, 행 단위 삭제 가능
      - 단점 : 대량 데이터 삭제 시 성능 저하 주의

    • TRUNCATE(DDL) : 테이블 구조를 유지하며, 모든 데이터 삭제
      - 장점 : 빠르게 데이터를 삭제할 수 있음, 테이블 구조는 유지되므로 성능 영향이 적음
      - 단점 : 제약 조건을 고려하여 사용해야 함


    • DROP(DDL) : 객체(Table, View, Index 등) 제거
      - 장점 : 빠르게 DB 객체를 삭제, 객체가 완전히 제거되므로 물리 공간 확보
      - 단점 : 제거된 객체와 연관된 내용이 영구 적용되므로 주의, 복구가 어렵고 DB 구조 변경으로 영향도 높음


    이러한 특징을 이해하고 데이터를 지우는 상황에 따라서 적절한 명령어를 선택해야 합니다.

    Drop 명령은 빠르게 객체 자체를 삭제할 수 있고, 물리 공간이 확보되는 장점이 있지만,

    실행되면 영구적으로 객체가 삭제되는 것이기에 신중히 사용해야 합니다.

    일반적으로 기존 사용중인 DB 객체가 새로운 객체로 이관되거나 대개체 되어 이전 객체가 불필요 한 경우

    Drop 명령으로 데이터를 삭제합니다.


    Delete는 여러 조건에 따라 데이터를 유연하게 제거하는 장점이 있지만
    많은 양의 데이터를 지운다면 성능에 저하가 있을 수 있습니다.
    하지만 모든 데이터를 삭제하는 것이 아닌 특정 조건에 해당하는 데이터를 지우는 경우나,
    삭제 로그를 남기거나 필요시 삭제된 데이터의 RollBack이 발생될 여지가 있는 경우
    Delete 명령을 사용합니다.

    Truncate는 테이블의 구조를 유지한 채 빠르게 모든 데이터를 삭제할 수 있는 장점이 있지만,

    여러 제약 조건을 고려하여 사용해야 합니다.
    예를 들어 A테이블의 특정 필드를 외래키로 지정한 B테이블이 존재 할때 A테이블을 Truncate 하면
    참조하고 있는 B테이블에서 오류가 발생할 수 있습니다.

    로그를 남기지 않고, 테이블의 데이터를 모두 삭제해도 문제가 없는 경우 Truncate 명령을 사용합니다.

     


    3. 데이터 Commit & RollBack

    위에서 정리한 내용을 보면 롤백(RollBack) 이라는 표현이 나오는데요.
    이것은 DB에서 일어나는 트랜잭션의 Commit 과 RollBack에 대한 내용입니다.

    • COMMIT
      데이터베이스의 모든 변경사항을 영구적으로 적용하는 것을 의미합니다. 
      즉, 모든 작업이 성공적으로 완료되고, 데이터베이스가 일관된 상태를 유지하는 것이 확인되면 변경사항을 
      영구적으로 저장합니다. Commit된 데이터는 다른 트랜잭션들에게도 보이게 됩니다.
      마치 보내는 사람 계좌에서 돈이 빠져나가, 받는 사람 계좌에서 돈이 입금되는 하나의 트랜잭션이 DB에 적용된
      상태를 Commit 되었다고 생각하시면 됩니다.

    • ROLLBACK
      트랜잭션의 변경사항을 취소하고 이전 상태로 되돌리는 것을 의미합니다. 
      트랜잭션 내에서 오류가 발생하거나 사용자가 작업을 취소하고자 할 때, Rollback을 실행하여 트랜잭션이
      시작되기
      이전의 상태로 데이터베이스를 복원시키고, 이로 인해 데이터베이스는 트랜잭션 시작
      이전의
      일관된 상태를 유지합니다.
      이는 보내는 사람 계좌에서 돈이 빠져나가는 작업은 완료 되었으나, 받는 사람 계좌로 돈이 입금되기 전에
      문제가 발생해 RollBack 수행이 이루어 진다면, 보내는 사람 계좌에서 돈이 빠져나가지 않게 됩니다.

    Commit/Rollback은 트랜잭션의 원자성(Atomicity)과 지속성(Durability)을 보장하기 위해 중요한 개념입니다.
    원자성은 트랜잭션이 전부 수행되거나 전혀 수행되지 않는 것을 보장하고, 지속성은 Commit된 변경사항이

    영구적으로 보존되는 것을 보장합니다. 따라서 트랜잭션에서 Commit과 Rollback을 적절하게 사용하여
    데이터의 일관성과 안정성을 유지할 수 있습니다.

    DDL 명령의 경우 일반적으로 자동으로 Commit 되는 특성이 있기에 DDL 명령을 사용할 때는 
    특히 더 신중히 사용해야 되는 이유가 여기에 있습니다.

     


    Conclusion

    이번 게시물에서 우리는 데이터베이스의 트랜잭션 개념에 대해 알아보았습니다. 


    이렇게 보니 데이터베이스는 마치 거대한 퍼즐 같네요. 각각의 퍼즐 조각이 모여 하나의 그림을 이루듯,

    데이터베이스에서도 작은 작업 단위인 트랜잭션이 모여 전체 데이터의 일관성과 안정성을 이룹니다.

    또한 데이터를 제거할 때 사용하는 'DELETE', 'TRUNCATE', 'DROP'의 차이점과 각각의 적절한 사용 시기에 대해
    살펴보았습니다. 이를 통해 우리는 각각의 명령어가 언제, 어떻게 쓰여야 하는지에 대해 판단할 수 있습니다.


    특히 'Commit'과 'Rollback'의 개념은 데이터베이스 작업에서 중요한 역할을 하는데요. 이 두 키워드는 
    마치 우리가 일상생활에서 '저장' 버튼을 눌러 결과를 확정짓거나, '취소' 버튼으로 작업을 되돌리는 것과 비슷합니다. 

    단지, 데이터베이스에서는 조금 더 복잡한 상황을 다루기 때문에 신중하게 사용해야 합니다.

    이런 복잡함 때문에, DBMS가 복잡해질수록 섬세한 관리가 필요합니다. 
    하지만 복잡함 속에서도 이해를 돕기 위해 우리는 가능한 한 쉽고 친숙한 용어와 비유를 사용하려 노력하였습니다.

    이제 여러분도 트랜잭션, 데이터의 제거, 그리고 Commit과 Rollback에 대해 이해하셨다면, 데이터베이스의 
    세계에서 조금 더 능숙하게 움직일 수 있을 것입니다. 데이터베이스의 세계는 넓고 깊지만, 
    이해하고 나면 매우 흥미롭고 유용한 도구가 될 수 있습니다. 함께 계속해서 배워가봅시다!

    728x90
    반응형