일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- fetch join
- kotlin ::
- 기능적 요구사항
- 스프링 시큐리티 설정
- 스프링 포매터
- spring formatter
- 스프링di
- 도커 이미지 빌드
- IOC
- Atomicity
- 스프링
- java predicate
- Spring
- 소프트웨어의 품격
- jpa no session
- 비기능적 요구사항
- open-session-in-view
- kotlin 리팩터링
- 스프링부트 도커
- 자바 필터
- 수정자주입
- 스프링시큐리티
- ioc컨테이너
- 생성자주입
- method refetence
- 동적파라미터
- jpa lazy
- 정적팩토리메서드
- 토비의 스프링
- 그래프큐엘
Archives
- Today
- Total
공부기록
[ACID] Atomicity - 원자성 본문
반응형
원자성.
여기서 말하는 원자성이란 더 이상 쪼갤 수 없다는 의미다.
원자성에 앞서 트랜잭션에 대해 간단히 정리하자.
What is transaction
- 하나의 작업단위로 볼 수 있는 쿼리들의 집합이다.
- 예를 들자면 송금을 들 수 있다.
- Transaction BEGIN
- 돈을 보내는 사람의 계좌의 잔액을 읽는다. (SELECT)
- 돈을 보내는 사람의 계좌에서 돈을 출금한다. (UPDATE)
- 돈을 받는 사람의 계좌에 돈을 입금한다. (UPDATE)
- Transaction COMMIT OR ROLLBACK
트랜잭션 안에 있는 쿼리들은 모두 성공해야한다. 만약 실패하는 쿼리가 있다면 트랜잭션 내에 있는 모든 쿼리들의 결과는 롤백되어야 한다.
커밋이 되면 변경사항을 기록한다. 그런데.. 커밋이 된 게 아니라, 아직 트랜잭션이 진행 중이라면? 트랜잭션 안에 있는 단일 쿼리의 결과는 어디에 저장하지? 데이터베이스에 따라 다르다. 어떤 데이터베이스는 메모리에 올리고, 어떤 데이터베이스는 실제로 디스크에 쓰기도 한다. 트랜잭션 안에 있는 한 쿼리가 실패하거나, 아님 데이터베이스 시스템이 죽거나 등의 이유로 원자성에 의해 롤백이 되어야 하는데, 데이터베이스에 따라 롤백 작업이 굉장히 긴 시간을 소요하기도 한다.
만약 원자성이 없다면..?
Ex ) 송금 (ACCOUNT 의 ID 가 1 인 계좌에서 ID 가 2인 계좌로 100원을 송금한다.)
1. SELECT BALANCE FROM ACCOUNT WHERE ID = 1;
2. UPDATE ACCOUNT SET BALANCE - 100 WHERE ID = 1;
3. 데이터베이스 죽어버림
????? 내돈..
## 결론
Atomicity 의 의미 : 트랜잭션은 더이상 쪼갤 수 없는 하나의 작업이다!
반응형
'Computer Science > DB' 카테고리의 다른 글
트랜잭션 격리 수준(isolation level) (0) | 2020.07.14 |
---|---|
[MySQL] InnoDB와 MyISAM 차이 (트랜잭션) (0) | 2020.07.07 |
INNER JOIN (0) | 2019.12.07 |
UNION (0) | 2019.12.07 |
GROUP BY (0) | 2019.12.07 |