일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 보안
- git
- db
- Javascript
- 자바
- Server
- Redis
- 자바스크립트
- 상태코드
- SQL
- 오라클
- java
- oracle
- WAS
- Eclipse
- 디비버
- mybatis
- JQuery
- 이클립스
- svn
- HTTP
- DBeaver
- 인텔리제이
- 마이바티스
- Tomcat
- IntelliJ
- JSON
- 모바텀
- 톰캣
- Linux
- Today
- Total
JongTachi의 개발 블로그
[DB] 트랜잭션 - ACID(원자성, 일관성, 고립성, 지속성) 본문
오늘은 데이터베이스 관리 시스템 중 하나인 트랜잭션에 대해 공부해보겠습니다.
1. What is Trasaction?
트랜잭션은 데이터베이스(DB) 관리 시스템에서 여러 개의 작업이 하나의 논리적 작업 단위로 묶여있는 것을 뜻합니다.
이 논리적 작업에서는 모든 작업이 성공적으로 수행되거나 or 아무것도 수행되지 않아야 합니다.
즉 되거나, 안 되거나
트랜잭션은 데이터베이스에서 일관성을 유지하고 데이터의 무결성을 보장하는데 중요한 역할을 합니다.
2. Transaction의 특징
트랜잭션은 ACID 속성을 따릅니다.
ACID는 Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성)의 약자로, 이 속성들은 트랜잭션이 안전하게 수행되고 데이터의 무결성이 유지되도록 하는 원칙을 나타냅니다.
1) Atomicity(원자성) : 트랜잭션은 원자적인 작업 단위로 간주되어, 모든 작업이 성공적으로 완료되거나 전혀 수행되지 않아야 합니다. 다시 말해 중간에 어떤한 작업이라도 실패하게 된다면 트랜잭션 전체가 롤백(초기화) 되어야 하는 것이죠.
2) Consistency(일관성) : 트랜잭션이 수행된 후에 데이터베이스는 미리 정의된 규칙에 따라 일관된 상태여야 합니다. 트랜잭션이 일관성을 깨뜨리는 작업을 수행하지 않아야 합니다.
3) Isolation(고립성) : 여러 트랜잭션이 동시에 수행되더라도, 각 트랜잭션은 다른 트랜잭션의 작업에 영향을 받지 않아야 합니다. 각각의 트랜잭션은 독립적으로 실행되어야 합니다.
4) Durability(지속성) : 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 합니다.
즉 데이터베이스가 손실되더라도 트랜잭션의 결과는 보존되어야 합니다.
3. Transaction 예시
여러분들의 이해를 돕기 위해 간단한 트랜잭션 예시를 들어보겠습니다.
은행 송금 트랜잭션을 생각해보겠습니다.
여러분이 누군가에게 돈을 보낸다고 가정한다면
은행 송금 트랜잭션은 다음과 같은 단계로 이루어질 수 있습니다.
1. 출금작업 : A(자신)의 계좌에서 일정 금액을 인출합니다.
2. 입금작업 : B(돈을 보낼 대상)계좌로 해당 금액을 입금합니다.
여러분 B라는 사람에게 5,000원을 보낸다고 가정합시다.
그럼 먼저 출금작업에서 자신의 계좌에서 5,000원을 인출하겠죠. 그 이후에 B의 계좌에 보내려 하는데..
어떠한 이유로 에러가 났습다고 가정합시다. 그럼 여러분의 5,000원은 인출만 된 상태에서 가만히 있게 되겠죠.
이럴 경우 트랜잭션의 원자성 때문에 해당 작업은 다시 롤백 됩니다.
즉 출금, 입금 작업이 제대로 되지 않았기 때문에 여러분의 계좌에서 빠진 돈 5,000원이 다시 들어온 것이죠.
이게 바로 트랜잭션의 원리이자 개념이라고 할 수 있겠습니다.
나중에 또 좋은 정보를 가지고 찾아뵙겠습니다.
감사합니다.
'DB' 카테고리의 다른 글
[DB] 테이블 컬럼 데이터 타입(Type), 타입 길이(length) 조회 (디비버 사용) (0) | 2024.03.13 |
---|---|
[DB] 테이블 컬럼 COMMENT 추출하기(디비버 사용) (0) | 2024.03.13 |
[Oracle] Oracle java.sql.SQLException: 부적합한 열 유형:1111 (MyBatis) (0) | 2023.08.16 |
[DB] SELECT문 한꺼번에 INSERT하기 (0) | 2023.08.05 |
[Oracle] Oracle 다중 INSERT문 (0) | 2023.07.26 |