Skip to content

Commit

Permalink
docs: Transaction의 성질 - ACID
Browse files Browse the repository at this point in the history
  • Loading branch information
SeYun committed Dec 19, 2020
1 parent 9b04146 commit ee55c8b
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
- [JaCoCo 설정하기](https://github.com/ksy90101/TIL/blob/master/java/jacoco-basic.md)
- [OCP와 전략패턴](https://github.com/ksy90101/TIL/blob/master/java/ocp-and-strategy-pattern.md)
- [DTO vs VO](https://github.com/ksy90101/TIL/blob/master/java/dto-vs-vo.md)
- [객체지향 설계를 위한 SOLID 원칙](https://github.com/ksy90101/TIL/blob/master/java/solid.md)

## 🌷 Spring

Expand Down Expand Up @@ -77,6 +78,7 @@
## 📁 DataBase
- [NoSQL vs RDBMS](https://github.com/ksy90101/TIL/blob/master/database/nosql-vs-rdbms.md)
- [개념 모델 vs 논리모델 vs 물리모델](https://github.com/ksy90101/TIL/blob/master/database/db_modelings.md)
- [Transtion의 성질 - ACID](https://github.com/ksy90101/TIL/blob/master/database/transaction-acid.md)

## ⚒ Infra
- [Github Action을 이용해 gradle build를 진행하자.](https://github.com/ksy90101/TIL/blob/master/infra/github-action-pr-gradle-build.md)
Expand Down
38 changes: 38 additions & 0 deletions database/transaction-acid.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Transaction의 성질 - ACID

## 트랜잭션이란?

- 하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합
- 예를 들어 계좌이체를 했을 경우 A 계좌에서 10만원을 인출하고 B 계좌에서 10만원을 입금되었을 경우 A 계좌 인출 시 문제가 생겼을 경우 원래 상태(B 계좌에 입금이 되면 안된다.)로 돌아가야 하고 B 계좌 입금시 문제가 생겼을 경우 원래 상태(A 계좌로 인출이 되면 안된다.)로 돌아가야 한다.
- 이러한 트랜잭션은 다양한 데이터 항목들을 접근하고 갱신하는 프로그램의 수행 단위가 된다.
- 트랜잭션은 아래의 ACID 성질이라고 하는 것으로 설명된다.

## 트랜잭션의 성질

- 트랜잭션이 안전하게 수행되는 것을 보장하기 위한 성질

### A - Atomicity(원자성)

- All or Notihng
- 모든 트랜잭션 연산들이 정상적으로 수행 완료가 되거나 아니면 전혀 어떠한 연산도 수행해서는 안된다.
- 즉, 완료되지 않은 트랜잭션의 중간 상태를 DB에 반영되면 안되고 완료된 트랜잭션은 모두 반영되어야 한다는 것이다.

### C - Consistency (일관성)

- 트랜잭션 작업 처리 결과는 항상 일관성이 있어야 한다.
- 즉, 성공적으로 수행된 트랜잭션은 정당한 데이터들만 데이터베이스에 반영해야 한다.
- 기본키, 외래 키 제약 같은 명시적인 무결성 제약 조건뿐만 아니라 아까의 계좌이체 예제에서 A와 B 계좌의 잔고 합이 트랜잭션 전과 후가 같아야 한다는 비명시적 일관성 조건도 있다.

### I - Isolation (독립성)

- 둘 이상의 트랜잭션이 동시에 실행되고 있다 해도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 실행해야 한다.
- 즉, 서로의 간섭없이 독립적으로 이루어져야 한다는 의미이다.
- 이 독립성을 보장할 수 있는 가장 좋은 방법은 순차적으로 수행하는 것(비동시성)인데, 병렬 처리(동시성)의 장점을 얻기 위해 격리레벨, 전파 옵션을 이용해 독립적은 최소한으로 보장하고 성능은 최대한 가져오는 방법을 제공한다.

### D - Durablity (지속성)

- 트랜잭션이 정상적으로 성공되어 커밋이 되면 해당 트랜잭션에 대한 모든 변경은 영구적으로 반영되어야 한다.

## 참고자료

[NAVER D2](https://d2.naver.com/helloworld/407507)

0 comments on commit ee55c8b

Please sign in to comment.