[영상후기] 데이터베이스 트랜잭션(transaction)을 아십니까? 그리고 트랜잭션의 매우 중요한 속성들인 ACID를 아십니까? 모르신다면 들렀다 가시지요

박철현·2023년 4월 2일
0

영상후기

목록 보기
69/160

movie

  • 트랜잭션 : 단일한 논리적인 작업 단위

    • 논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어서 나눠질 수 없게 만드는 것
    • 트랜잭션 내부 SQL문들 중 일부만 성공해서 DB에 반영되는 일은 일어나지 않는다(논리적으로 묶여 모두 성공해야 반영되는 것)
  • commit : 지금까지 작업한 내용을 DB에 영구적으로 저장하라(transaction 종료)

  • rollback : 지금까지 작업들을 모두 취소하고 transaction 이전 상태로 되돌린다.(transaction 종료)

  • Autocommit : 각각 SQL문을 자동으로 transaction 처리 해주는 개념

    • SQL문이 성공적으로 실행하면 자동으로 commit
    • 실행 중 문제가 있었다면 알아서 rollback
    • MySQL 및 다른 DBMS 대부분에서 default로 autocommit이 enable 되어 있다.
  • MySQL에서는 START TRANSACTION 실행과 동시에 Autocommit off 된다.

  • COMMIT / ROLLBACK과 함께 transaction이 종료되면 원래 autocommit 상태로 돌아간다.

    • START TRANSACTION 하기 전 Autocommit 활성화 -> 다시 활성화
    • 하기 전 Autocommit 비활성화 -> 트랜잭션 끝나도 비활성화
  • 일반적인 transaction 사용 패턴

    • 트랜잭션 시작
    • 데이터를 읽거나 쓰는 등의 SQL문들을 포함해서 로직 수행
    • 일련의 과정들이 문제없이 동작했다면 transaction을 commit
      • 중간에 문제 발생 시 transaction을 rollback
  • 트랜잭션 ACID : 트랜잭션이 각각 어떤 속성을 지녀야 하는지 나타냄

    Atomicity(원자성) : ALL or NOTHING
    • 논리적으로 쪼개질 수 없는 작업 단위인 트랜잭션이기에, 내부 SQL문들이 모두 성공해야 한다.
    • 중간에 SQL문이 실패하면 지금까지의 작업을 모두 취소하여 아무일도 없던 것 처럼 rollback 해줘야 함
    • commit 실행 시 DB에 영구 저장은 DBMS 담당, rollback 실행 시 이전 상태로 되돌리는 것도 DBMS 담당하는 부분
    • 개발자는 언제 commit 하거나 rollback 할지를 챙겨야 함
    Consistency(일관성) : DB의 상태를 일관성 유지
    • 트랜잭션은 DB 상태를 consistent 상태에서 또 다른 consistent 상태로 바꿔줘야 한다.
    • constraints, trigger 등을 통해 DB에 정의된 rules을 transaction이 위반했다면 rollback(일관성 위반이기 때문)
    • 트랜잭션이 DB에 정의된 rule을 위반했는지는 DBMS가 commit전에 확인하고 알려준다.
      • 예외 처리해서 RollBack해야 함
    • 그 외에 application 관점에서 transaction이 consistent하게 동작하는지는 개발자가 챙겨야 한다.
    Isolation(분리)
    • 여러 트랜잭션들이 동시에 실행될 때도 각각의 트랜잭션이 혼자 실행되는 것처럼 동작하게 만든다.
    • DBMS는 여러 종류의 isolation level을 제공한다.
      • level 이 높을수록 독립성 증가 -> 동시성이 줄어들어 DB 서버의 퍼포먼스 줄어듦
      • 낮을수록 엄격한 격리 -> 동시성 증가 -> DB서버 퍼포먼스 증가, 다른 트랜잭션의 영향 받을 가능성 증가
    • 개발자는 isolation level 중에 어떤 level로 transaction을 동작시킬지 설정할 수 있다.
      • Default 설정을 그대로 사용할 수도 있음
    • concurrency control의 주된 목표가 isolation이다.
    Durability(영존성)
    • commit된 트랜잭션은 DB에 영구적으로 저장한다.
    • DB system에 문제(power fail or DB crash)가 생겨도 commit된 transaction은 DB에 남아있는다.
      • 영구적으로 저장한다 : 비휘발성 메모리(HDD,SSD,..)에 저장함을 의미
      • 기본적으로 트랜잭션의 durability는 DBMS가 보장한다.

  • 트랜잭션을 어떻게 정의해서 사용할 지는 개발자가 정하는 것, 구현하려는 기능과 ACID 속성을 이해해야 트랜잭션을 잘 정의할 수 있음

  • 트랜잭션의 ACID와 관련해서 개발자가 챙겨야 하는 부분들이 있다.

    • DBMS가 모든 것을 알아서 해주는 것은 아님
profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN