트랜잭션?

박준형·2023년 9월 30일

데이터베이스

목록 보기
1/6

📌트랜잭션이란

트랜잭션은 "쪼갤 수 없는 업무 처리의 최소 단위"를 말한다. 이 단위 안에는 데이터베이스의 상태를 변화 시키기 위해서 실행되는 작업이 포함된다. ex) SELECT, UPDATE, INSERT, DELETE

📌트랜잭션 특징

트랜잭션은 ACID라 하는 원자성, 일관성, 격리성, 지속성을 보장해야 한다.

  • 원자성(Atomicity): 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하든가 모두 실패해야 한다.

  • 일관성(Consistency): 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다.

  • 격리성(Isolation): 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야한다. 격리성은 동시성과 관련된 성능 이슈로 인해 격리 수준은 선택할 수 있다.

  • 지속성(Durability): 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 한다.

자바 ORM 표준 JPA 프로그래밍(김영한) - 참고


📌트랜잭션 상태

트랜잭션에는 사용자가 적은 쿼리문과 데이터를 최종적으로 데이터베이스에 반영하는 커밋(Commit)과 롤백(RollBack)이 있다.

  • 활동(Active): 트랜잭션이 실행 중인 상태
  • 실패(Failed): 트랜잭션 실행에 오류가 발생하여 중단된 상태
  • 철회(Aborted): 트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태
  • 부분 완료(Partially Commited): 트랜잭션의 마지막 연산까지 실행했지만, 커밋 연산이 실행되기 직전의 상태
  • 완료(Commited): 트랜잭션이 성공적으로 종료되어 커밋 연산을 실행한 후의 상태

📌Commit 과 RollBack

  • 커밋(Commit): 모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어로서, 처리과정을 데이터베이스에 영구적으로 저장하는 것이다. 커밋을 수행하게 되면 하나의 트랜잭션 과정을 종료 하는 것이다. 커밋을 수행하게 되면 이전 데이터가 완전히 업데이트 되어 이전 데이터는 영원히 잃어버리게 된다.

  • 롤백(RollBack): 작업 중 문제가 발생하여 트랜잭션의 처리과정에서 발생한 변경사항을 취소하는 명령어이다. 이 트랜잭션의 일부가 정상적으로 처리되더라도 트랜잭션의 원자성을 지키기 위해서 이 트랜잭션이 행한 모든 작업을 취소하게 된다. 트랜잭션이 시작되기 전의 상태로 복구시킨다.

📌트랜잭션의 필요성

A가 B에게 5만원을 송금하는 상황을 예시로 들어보자. 먼저 A의 계좌에서 5만원이 있는지 확인한다. 이후 B의 계좌가 맞는지 확인한다. 확인이 완료되면 A의 계좌에서 5만원이 차감되고 B의 계좌에 5만원이 증가한다. 이 모든 과정이 하나의 트랜잭션으로 묶어서 처리하게 되고 성공하면 데이터베이스는 Commit 하게 된다. 만약에 A의 계좌에서 5만원이 차감되고 B의 계좌에 반영되기 전에 오류가 발생하여 정상적으로 송금이 되지 않는다면 데이터베이스는 오류 이전에 발생한 변경 내역들을 RollBack 하게 된다.

profile
으쌰 으쌰

0개의 댓글