데이터베이스 베이직 트랜잭션 NHN NEXT 정호영 나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.
데이터베이스베이직
트랜잭션
NHN NEXT 정호영
나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.
대표적 DB 응용
OnLine Transaction Processing(OLTP)
OnLine Analytical Processing(OLAP)
Transaction
원래 뜻은 '거래' :쌍방이 무언가를교환해야성립
데이터베이스에서는
쪼갤수없는작업의단위를트랜잭션이라고함
Transaction의특징
ACID 특성 : 강의전체에서가장중요한키워드
Atomicity (원자성)
Consistency (일관성)
Isolation (고립성)
Durability( 지속성)
Atomicity: 원자성
All or Nothing
'트랜잭션은 완전히 수행되거나 전혀 수행되지 않은 상태를 유
지해야한다'
원자성의예제
영남이는우진이에게고흐의그림을 1억에샀다.이 거래는다음과 같이표현
트랜잭션은어디부터어디까지?
1) 영남.돈 -= 1억2) 우진.돈 += 1억3) 우진.아이템 -= 그림4) 영남.아이템 += 그림
원자성의예제
영남이는우진이에게고흐의그림을 1억에샀다.이 거래는다음과 같이표현
트랜잭션은어디부터어디까지? 전부다묶어서!
1) 영남.돈 -= 1억2) 우진.돈 += 1억3) 우진.아이템 -= 그림4) 영남.아이템 += 그림
Consistency : 일관성
트랜잭션을 수행하고 나면 하나의 일관된 상태(correct status)
에서 다른일관된 상태로바뀌어야한다.
Consistency : 일관성
Correct State:도메인의 유효범위, 무결성 제약조건등의 제약조건을 위배하지 않는 정상적인 상태
Correct State Correct StateTransaction
Consistency예제
영남이의 골드 잔액은 100골드. 이 때 영남이가 상점에서 '몰왕검'을 3200골드에구매하려고함
영남이는 상점에 3200골드를 내고 '몰왕검'을 사기위해 계속구입버튼을누름 ( 100 – 3200 = - 3100 골드)
시스템상에서 골드 > 0 제약조건을 가지고 있으므로 절대 '몰왕검'을 살수 없음
Consistency예제2
세현이는 100골드를보유중이다.
1) 2500골드의강철의솔라리를 구매와
2) 3200골드의몰왕검판매를
묶어서진행하려 한다.
이 경우
1)로 인해일시적으로비정상상태가되어도
최종상태는정상상태이므로트랜잭션은수행될 수있다
Isolation (고립성)
'한 트랜잭션이 실행되는 동안 외부에서는 트랜잭션에 접근할수 없다'
Isolation (고립성)
한번에하나의 트랜잭션만수행한다면고립성은항상보장
그러나실제 DB에서는동시에여러 트랜잭션이수행
다수의 트랜잭션이 동시에 수행되더라도 한 번에 하나씩 수행된 것과 동일한결과를가져야 하는특성
Durability (지속성)
완료(commit)된 트랜잭션은 영구적으로 보존이 되어야 된다는 특성
* 커밋: 트랜잭션의완료를 나타내는용어
Durability (지속성)
예) 트랜잭션이 commit 된 직후 PC의 리셋 버튼을눌렀다.
1) 어떻게되어야 하나?
2) 1)의 답을위해 시스템과 OS레벨에서해야하는 일은?
트랜잭션사용하기
START TRANSACTION
[SQL 명령어] +
COMMIT | ROLLBACK
COMMIT : 트랜잭션을완료함
ROLLBACK : 트랜잭션을취소함
롤백예제
COMMIT예제
트랜잭션프로그래밍
JDBC에서
Connection은자동커밋이 기본설정
따라서 SQL 문장은 하나하나커밋이됨
기본 설정을바꿔야트랜잭션을사용할 수 있음
JDBC 트랜잭션예제
//자동 커밋 해제
conn.setAutoCommit(false);
//커밋하기
conn.commit();
//롤백하기
conn.rollback();
예제
주의사항
실제 코드에서는예외처리 코드를꼭 작성해야함
트랜잭션의 중간에 에러가 발생했을 경우 반드시 rollback을해야 함
트랜잭션을 작성할 때는 얘기치 못한 에러가 발생했을 때 회사에 손해가적게 가는 방향으로작성해야함!!
실습
account( id, 이름, 잔액) 테이블 생성
이체 프로그램작성
잔액이 0원 이하가되면 롤백
정상적으로이체가가능할 경우 commit
추가로 공부할 것들
• TRANSACTION ISOLATION LEVEL에 대해 각자 공부합시다.
THANK YOU!!!