일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 제주술
- 아규먼트
- iterm
- 테마설정
- 술쟁이
- DB기초
- 백준
- 자바언어의본질
- 데이터베이스
- iTerm테마
- 색상설정
- 응답상태
- 스킨설정
- 클래스파일
- 술샘
- 제주몬순커피주
- 감사주
- 커피냑
- iTerm스킨
- 전통주
- 어린날의추억
- 술담화
- 다이나믹프로그래밍
- 개발용어
- 자바
- 11057
- iTerm2
- 클래스로딩
- 스프링부트
- 포도알
- Today
- Total
배니스트의 개발추적기
[데이터베이스] 트랜잭션(Transaction)이란? 본문
1. 트랜잭션 정의
트랜잭션은 데이터베이스의 상태를 변화시키기 위해서 수행하는 하나의 논리적인 작업 단위이다.
우선 어원으로 따져보면 Transaction은 접두사 trans-와 단어 action이 조합된 파생어다. trans-가 '다른 장소 혹은 상태로의 변화, 이전'(네이버 영어사전), action이 행동, 행위를 뜻하는 단어이다. 데이터베이스에서 트랜잭션은 데이터베이스 상태 변화를 일으키는 작업이라는 것이 자연스럽게 이해된다.
하나의 논리적인 작업 단위라는 건 무엇일까? 데이터베이스에 접근하거나 내부 데이터를 수정하는 작업은 SQL문*으로 수행된다. 트랜잭션은 여러 SQL문들이 조합되어 하나의 작업 덩어리를 이룬 것을 뜻한다. 그래서 하나의 '논리적인' 작업 단위가 된다. (* SELECT, INSERT, DELETE, UPDATE)
그런데 굳이 트랜잭션을 써야할까? 각각의 SQL문을 데이터베이스로 즉각 날려주어도 되지 않을까? UPDATE, DELETE와 같은 명령어들은 데이터베이스 상태 변화를 크게 일으키는 질의어들이다. 먄약 잘못 사용되었을 경우 그 이전 상태로 복구가 필수적이다. 트랜잭션으로 작업하지 않았을 경우 복구가 힘들어진다.
2. 트랜잭션 연산
❝ 하나의 트랜잭션은 Commit되거나 Rollback된다. ❞
🪐 커밋(Commit)
커밋 연산은 트랜잭션(하나의 논리적 작업 단위)이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 트랜잭션이 끝났다는 것을 관리자에 알리는 연산이다. 곧, 트랜잭션의 작업이 성공적으로 데이터베이스에 반영되었음을 뜻한다.
🪐 롤백(Rollback)
롤백이란 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 트랜잭션을 처음부터 다시 시작하거나, 부분적으로 처리된 트랜잭션의 결과를 취소하는 연산이다.
3. ACID Property
산성 아니다.
🔥 원자성(Atomicity)
- 트랜잭션 내 모든 명령어들은 반드시 완벽히 수행되어야 하며, 어느 하나라도 오류가 발생하면
트랜잭션 전체가 취소되어야 한다.
- 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
🔥 일관성(Consistency)
- 트랜잭션이 성공적으로 처리된 후에는 항상 일관성 있는 데이터베이스 상태로 변환한다.
- 그 이외 시스템 고정요소는 트랜잭션 수행 전후가 바뀌지 않아야 한다.
🔥 격리성(Isolation)
- 둘 이상의 트랜잭션이 동시에 실행되는 경우 서로 다른 트랜잭션의 연산은 독립적으로 수행된다.
- 곧, 하나의 트랜잭션은 절대 다른 트랜잭션에서의 수행 결과를 참조할 수 없다.
🔥 지속성(Durability)
- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 데이터베이스에 영구적으로
반영되어야 한다.
4. 트랜잭션의 상태
💥 Active : 트랜잭션이 실행 중인 상태
💥 Partially Committed : 트랜잭션의 마지막 명령어까지 실행한 상태
💥 Failed : 정상적인 실행이 더 이상 진행될 수 없음을 확인한 상태
💥 Aborted : 트랜잭션이 롤백되고 데이터베이스가 해당 트랜잭션이 시작되기 이전 상태로 복구하는 상태
💥 Committed : Commit 연산을 실행한 후의 상태로, 트랜잭션이 성공적으로 종료된 상태
위 내용은 다음 블로그들의 내용을 참고하였다.
[개발자로 홀로 서기]: https://mommoo.tistory.com/62
[코딩 팩토리]: https://coding-factory.tistory.com/226