[데이터베이스/DB] 트랜잭션 - 기능을 단위로 묶는 이유
- Database
- 2021. 6. 4.
트랜잭션
트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위다. 정의된 문장만 봐서는 쉽게 와닿지 않는다. 쉽게 말하면 트랜잭션은 기능을 수행하는 여러 SQL 문들의 묶음이다. 이렇게 SQL문을 임의로 묶는 행위를 '트랜잭션을 정의한다'고 한다.
그렇다면 왜 SQL문을 묶어서 처리하는 걸까. 프로그램에 장애가 발생했을 때 대처하기 위해서다. 가장 직관적으로 이해하기 쉬운 이유 예시를 하나 소개한다. 송금과 입금을 처리하는 프로그램이 있다. A는 B에게 1만원을 송금했다. A의 계좌에서는 1만원이 차감됐다. 이제 B에게 1만원이 입금이 될 차례. 그런데 어떤 이유로 프로그램에 문제가 생겨 입금 기능이 작동하지 않았다. A는 돈을 줬는데 B는 돈을 받지 못한 상황이 돼 버렸다. 치명적인 문제다.
이런 불상사를 막기 위해선 어떻게 해야할까. 송금과 입금 기능을 하나로 묶고 둘 중 하나라도 수행되지 않으면 두 기능 모두 수행되지 않도록 해야한다. 이게 작업을 묶어서 처리할 때 얻을 수 있는 효과다. 이처럼 트랜잭션에 포함된 작업이 전부 수행되거나 아니면 전부 수행되지 않는 성질을 원자성(Atomicity)이라고 한다.
원자성 | 일관성 | 고립성 | 지속성
사실 트랜잭션에 대해 포스팅 하는 이유는 정보처리기사 시험을 준비하던 때가 떠올라서다. 당시 맹목적으로 트랜잭션의 특성 4가지를 암기했는데 무슨말인지는 잘 몰랐다. 이제서야 간단하게 개념을 정리한다.
- 원자성(Atomicity)
트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 않아야 한다는 특성이다. 영어로 하면 all or nothing. 예시는 위에서 소개했으니 넘어간다.
- 일관성(Consistency)
트랜잭션을 수행하기 전과 후, 데이터베이스는 항상 일관된 상태를 유지해야 한다는 특성이다. 위 예시의 연장선으로 쉽게 이해할 수 있다. A의 잔고는 10만원이고 B의 잔고도 10만원이다. 이때 A가 B에게 1만원을 송금하면 A의 잔고는 9만원, B의 잔고는 11만원이 된다. 결론적으로 트랜잭션 수행 후에도 A와 B 잔고의 총 합은 20만원으로 동일하다. 이런 특성을 일관성이라고 한다.
- 고립성(Isolation)
수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경 중인 데이터 값을 훼손하는 일이 없어야 하는 특징이다. 트랜잭션 1과 트랜잭션 2가 같은 시간에 동일한 테이블에 접근할 수 없는 것이다.
- 지속성(Durability)
트랜잭션이 성공적으로 완료되면 변경된 데이터는 영구히 저장된다는 특징이다. 이때 트랜잭션이 완료되는 것을 commit
이라고 하며 데이터를 DB에 저장하는 주체는 DBMS다.
'Database' 카테고리의 다른 글
[자바/JAVA] 커넥션 풀(Connection Pool) 사용법 | 코드로보는 싱글톤 패턴 (0) | 2021.06.09 |
---|---|
[오라클/ORACLE] JDBC로 DB 연동 | 자바로 SQL문 실행하기 (0) | 2021.06.05 |
[오라클/ORACLE] PL/SQL - 트리거(TRIGGER) | 테이블 연결 후 자동화 (0) | 2021.06.03 |
[오라클/ORACLE] PL/SQL - 프로시저(PROCEDURE) | 저장하고 사용하는 SQL (0) | 2021.06.03 |
[오라클/ORACLE] 시퀀스(SEQUENCE) - NEXTVAL | CURRVAL | 초기화 (0) | 2021.06.01 |