Transaction(트랜잭션)
작업의 완전성을 보장해주는 기능
트랜잭션은 꼭 여러 개의 변경 작업을 수행하는 쿼리가 아니더라도, 논리적인 작업 자체가 적용(Commit)되거나, 모두 적용되지 않아야(Rollback) 보장한다고 할 수 있다.
ACID
트랜잭션은 ACID의 특성을 가지고 있으며, 그 의미와 특징, 그리고 보장 방법을 간단히 설명하면 아래와 같다.
원자성(Atomicity)
트랜잭션의 모든 작업이 정상적으로 수행되거나, 아니면 전혀 수행되지 않는 것
Undo-log를 통한 트랜잭션 이전 상태로의 복구로 원자성 보장
일관성(Consistency)
트랜잭션을 수행 전과 수행 후에 데이터베이스의 일관된 상태 유지
유니크 제약조건, 외래키 제약조건 등의 적용으로 일관성 보장
고립성(Isolation)
트랜잭션 수행 중 다른 트랜잭션의 작업이 데이터 변경을 일으키지 못하는 상태
Isolation Level 조정을 통한 고립성 보장
지속성(Durability)
트랜잭션 완료 후 결과의 영구적 반영
시스템 장애 시, Redo-log에서 커밋된 트랜잭션의 읽기를 통한 지속성 보장
트랜잭션 범위 최소화
트랜잭션은 최대한 작은 범위로 유지하는 것이 좋다. 커넥션 수가 제한적이기 때문에 범위가 커질수록 커넥션을 많이 사용하게 되고, 이는 성능 저하를 일으킬 수 있다.
예시
위의 프로세스에서 아래와 같은 문제점이 있다.
실제로 DBMS에 데이터를 저장하는 작업(트랜잭션)은 5번부터 시작
1번부터 4번까지의 작업들은 트랜잭션 범위에 포함시키지 않는 것이 좋음
8번의 알림 메일 전송과 같은 원격 서버와 통신하는 작업
원격 통신할 수 없는 상황이라면 웹 서버 뿐만 아니라 DBMS도 위험해지는 상황이 발생할 수 있음
9번의 알림 메일 발송 이력을 DBMS에 저장하는 작업
5/6번의 작업과 성격이 다른 작업이므로 트랜잭션 범위에 포함시키지 않는 것이 좋음
트랜잭션 범위 최소화 예시
결론적으로 프로그램 코드에서 트랜잭션 범위를 최소화 시켜 커넥션을 가지고 있는 범위를 최소화 시키는 것과, 원격 통신을 하는 작업은 트랜잭션 범위에 포함시키지 않는 것이 좋다.
참고자료
Last updated
Was this helpful?