데이터베이스 트랜잭션(Database Transaction)이란?
데이터베이스 관리 시스템(DBMS)에서 이루어지는 상호작용의 단위이다. 트랜잭션을 지원하는 데이터베이스를 트랜잭셔널 데이터베이스(transactional database)라고 부르며, 현재 대부분의 관계형 데이터베이스 관리시스템은 트랜잭션 데이터베이스이다. (위키백과)
쉽게 말해 MySQL 등과 같은 DBMS을 통해 수행되는 데이터베이스 작업을 위한 '논리적 작업 단위'라고 말할 수 있다.
데이터베이스 트랜잭션의 특징
데이터베이스 시스템은 트랜잭션을 통해 데이터 무결성(Integrity*)을 보장하며 이를 위해 트랜잭션은 원자성, 일관성, 독립성, 영속성 이라는 특성을 갖는다. (ACID)
* Data Integrity : 데이터 무결성, 완전성, 정확성 등으로 해석되며 데이터를 보호하고 항상 정상인 데이터를 유지하는 것을 의미한다. - 데이터를 신뢰할 수 있는 근거가 된다. (네이버 지식백과 컴퓨터인터넷IT용어대사전)
- 원자성(Atomicity) : 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장한다. 작업들을 수행하다가 중간에 실패하면 모두 롤백 처리를 하여 작업의 일부만 반영되는 것을 방지한다. (all or nothing)
- 일관성(Consistency) : 트랜잭션 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태를 유지한다. 트랜잭션 수행 전후를 상태 전이(transition)이라고 생각했을 때, 상태 전이가 이루어지기 전 후 모두 기본키, 외래키와 같은 무결성을 위한 제약조건 등을 만족하는 상태여야한다.
- 독립성(Isolation) : 트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장한다. 트랜잭션들 사이에 간섭이 불가능하다.
- 영속성 or 지속성(Durability) : 성공적으로 수행된 트랜잭션은 영원이 반영되어야한다.
* Auto-commit 기능
MariaDB에서는 default 설정으로 autocommit 기능이 true 로 되어 있다. 따라서, DML 쿼리(insert, update, delete)가 실행될 때마다 자동으로 commit 처리되어 전체 작업 중 일부에서 오류가 발생했을 때 rollback 할 수 없다.
하지만 이를 방지하기 위해 autocommit 기능을 off 했을 때, 사용자가 데이터 작업을 한 뒤 실수로 commit 실행을 하지않으면 쿼리의 작업 결과가 데이터베이스에 적용되지 않는다는 단점이 존재한다.
Application에서는 어떻게 적용되는가?
Spring 프레임워크에서는 Transaction을 관리하기 위한 여러 기능을 제공하며 대표적으로 @Transactional 어노테이션을 통해 Transaction 을 관리할 수 있다.
[참고]
- 데이터베이스 트랜잭션 (wikipedia) - https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98
- ACID (wikipedia) - https://ko.wikipedia.org/wiki/ACID
- Naver D2 : DBMS는 어떻게 트랜잭션을 관리할까? - https://d2.naver.com/helloworld/407507
- autocommit 여부 - https://good-dba.gitbooks.io/mariadb-sql-for-oracleuser/content/c03_2_autocommit.html
- stackoverflow - https://stackoverflow.com/questions/47587998/is-it-good-practice-to-leave-mysqls-auto-commit-mode-disabled-across-a-web-ap
'Database' 카테고리의 다른 글
[DB] 트랜잭션 이해하기 (동시성 이슈와 서비스의 경계) (0) | 2025.03.24 |
---|