1. 트랜잭션이란?
트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 하나의 논리적 작업 단위를 말한다.
즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않도록 한다.
사용자의 입장에서는 작업의 논리적 단위로 이해를 할 수 있고 시스템에의 입장에서는 데이터들은 접근 또는 변경하는 프로그램 단위가 된다.
2. 트랜잭션의 4대 특성: ACID
♦️ Atomicity (원자성)
만약 트랜잭션 중간에 어떠한 문제가 발생한다면 트랜잭션에 해당하는 어떠한 작업 내용도 수행되어서는 안되며 아무런 문제가 발생되지 않았을 경우에만 모든 작업이 수행되어야 한다. ⇒ 트랜잭션에 포함된 작업은 전부 수행되거나 전부 수행되지 않아야 한다.
♦️ Consistency(일관성)
트랜잭션이 완료된 다음의 상태에서도 트랜잭션이 일어나기 전의 상황과 동일하게 데이터의 일관성을 보장해야 한다. ⇒ 트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관된 상태를 유지해야 한다.
♦️ Isolation (고립성)
각각의 트랜잭션은 서로 간섭없이 독립적으로 수행되어야 한다. ⇒ 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경중인 데이터 값을 훼손하지 않아야 한다.
♦️ Durability (지속성)
트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장되어야 한다.⇒ 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 한다.
3. 트랜잭션의 생명주기: 5가지 상태 (State)
- Active : 트랜잭션의 활동 상태. 트랜잭션이 실행중이며 동작중인 상태를 말한다.
- Failed :트랜잭션 실패 상태. 트랜잭션이 더이상 정상적으로 진행 할 수 없는 상태를 말한다.
- Partially Committed :트랜잭션의 Commit 명령이 도착한 상태. 트랜잭션의 commit이전 sql문이 수행되고 commit만 남은 상태를 말한다.
- Committed : 트랜잭션 완료 상태. 트랜잭션이 정상적으로 완료된 상태를 말한다.
- Aborted : 트랜잭션이 취소 상태. 트랜잭션이 취소되고 트랜잭션 실행 이전 데이터로 돌아간 상태를 말한다.
💡 Partially Committed와 Commited 차이
Partial committed는 Commit 요청이 들어왔을 때를 말하며, Commited는 Commit을 정상적으로 완료한 상태를 말한다.
4. 트랜잭션 제어 연산 (TCL)
트랜잭션의 연산으로는 크게 Commit과 Rollback 두 가지가 있다.
♦️ Commit 연산
Commit 연산은 하나의 트랜잭션이 성공적으로 종료된 후, 데이터베이스가 일관된 상태를 유지할 때 갱신 연산이 완료되었다고 트랜잭션 관리자에게 알려주고 결과를 최종적으로 데이터베이스에 반영하는 연산이다.
♦️ Rollback 연산
Rollback 연산은 하나의 트랜잭션이 비정상적으로 종료되어 데이터베이스의 일관성을 잃었을 때 트랜잭션이 지금까지 실행한 연산의 결과가 취소되고 트랜잭션 수행 이전의 상태로 돌아가는 연산이다.
Rollback을 하는 경우엔 해당 트랜잭션을 재시작하거나 폐기한다.
5. 실무에서 트랜잭션을 사용할 때 주의할 점
트랜잭션의 범위를 최소화하여야 한다. 그 이유는 아래와 같다.
- 일반적으로 데이터베이스 커넥션은 개수가 제한적이다.
- 각 단위 프로그램이 커낵션을 소유하는 시간이 길어지면 사용 가능한 여유 커넥션 수가 줄어들게 된다.
- 그러다 어느 순간 커넥션을 가져가기 위해 단위 프로그램들이 기다려야 하는 상황이 발생한다. (DeadLock)
추가적으로 트랜잭션 내에 외부 API 호출은 제외한다. 외부 API를 트랜잭션에 포함할 시, API 응답이 늦어질 때 DB 커넥션이 계속 묶여있을 수 있다.
0 댓글