트랜잭션
데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것이다.
예를 들어, 1,2 둘다 함꼐 성공해야 결제가 완료되는데, 중간에 하나라도 실패하면 거래 전의 상태로 돌아갈 수 있는것이다.
트랜잭션에서는 커밋과 롤백을 빼놓을 수 없는데 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 커밋(Commit) 이라 하고, 작업중 하나라도 실패해서 거래 이전으로 되돌리는 것을 롤백(Rollback) 이라 한다.
💡 트랜잭션을 사용하기 위한 준비단계!!
기본적으로 자동커밋 모드가 설정되어 있다. 하지만 자동 커밋 모드에서는 트랜잭션을 수행할 수 없어서 아래 명령어로 수동 커밋 모드로 바꾸어주어야 트랜잭션을 시작한다고 표현할 수 있다.
set autocommit false;
💡 애플리케이션에서 트랜잭션은 어디에서 시작하고 어디에서 커밋해야 할까?
➡ 비즈니스 로직이 있는 서비스 계층에서 시작해야한다! 비즈니스 로직이 잘못되면 해당 비즈니스 로직으로 인해 문제가 되는 부분을 함께 롤백해야 하기 때문이다.
또한 트랜잭션을 시작하려면 Connection 이 필요하다. 결국 서비스 계층에서 Connection 을 만들고, 트랜잭션 커밋 이후에 커넥션을 종료해야한다.
또한 중요한것이 애플리케이션에서 DB 트랜잭션을 사용하려면 트랜잭션을 사용하는 동안 같은 Connection 을 유지해야 한다. 그래야 같은 세션을 사용할 수 있다.
트랜잭션의 ACID
트랜잭션이 보장해야하는 4가지!
원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability) 을 보장해야 한다.
원자성(Atomicity)
트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공 하거나 모두 실패해야 한다.
일관성(Consistency)
모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다.
예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다.
격리성(Isolation)
동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다.
예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준(Isolation level) 을 선택할 수 있다.
지속성(Durability)
트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 한다.
참고
인프런 - 스프링 DB1
'Database' 카테고리의 다른 글
[ORACLE] 오라클 새 계정추가, 권한부여, 권한삭제, 계정 PASSWORD 변경, 계정삭제 (1) | 2021.02.28 |
---|---|
SELECT CASE 를 사용해서 DB의 특정 값을 다른값으로 표현하기 (0) | 2021.02.18 |
[Altibase] 테이블 조회, 생성, 내부 데이터삭제, 테이블이름변경, 테이블 컬럼 타입변경 (0) | 2020.07.28 |
댓글