반응형
SMALL
insert, update, delete 등 DB 변경에 해당하는 명령이 있는 SQL 구문을 트랜잭션이라고 함
Commit – 트랜잭션의 결과를 DB에 반영
Rollback – 트랜잭션 결과를 DB에 미반영
-------------------------------------------------------------
트랜잭션 처리가 필요한 잉 ㅠ
1. 김상현이 김용남에게 100만원을 빌림
2. 일주일 뒤에 갚겠다고 약속함
3. 일주일 후 김상현이 돈이 생김
4. 국민은행에서 100만원을 계좌 이체하려고 함
5. 인출 과정
(김상현 계좌 -> 잔액 - 100만원 update -> 김용남 계좌 -> 잔액 + 100만원 update)
6. 하지만 김상현 계좌에서 -100만원 update 후 전산
원자성, 일관성, 격리성, 지속성
1. 원자성(Atomicity) - 트랜잭션 내에 있는 모든 작업이 완료되거나 모든 작업이 완료되지 않아야 한다. 즉, 트랜잭션 내의 작업 중 하나라도 에러가 발생하면 트랜잭션 내의 모든 작업은 롤백(rollback)되어야 합니다.
2. 일관성(Consistency) - 트랜잭션 중에 오류 없이 유효한 데이터만 데이터베이스에 저장되어야 합니다.
3. 격리성(Isolation) - 트랜잭션 중에 변경된 내용이 트랜잭션이 완료되기 전까지 다른 트랜잭션에 영향을 미쳐서는 안됩니다.
1. 김상현이 김용남에게 100만원을 빌림
2. 일주일 뒤에 갚겠다고 약속함
3. 일주일 후 김상현이 돈이 생김
4. 국민은행에서 100만원을 계좌 이체하려고 함
5. 인출 과정
(김상현 계좌 -> 잔액 - 100만원 update -> 김용남 계좌 -> 잔액 + 100만원 update)
6. 하지만 김상현 계좌에서 -100만원 update 후 전산장애 ?
7. 김상현은 돈 100만원은 어디로 ?
5번은 과정을 한 개의 작업으로 만드는 것이 트랜잭션 처리
-------------------------------------------------------------------------
트랜잭션의 기본 개념
---------------------------------------------------------------------------
트랜잭션 처리 하는 방법 (자바단에서 )
뭐 더 설명은 필요 없을 듯 ㅋㅋ
setAutoCommit(true); 이게 커밋이고
이걸 위임하지 않고 사용자가 정의 하려면
fasle를 넘겨주고 컨넥션객체에 con.commit();
이런식으로 해주어야 함
핵심포인트 / 주의사항
1. 디폴트는 autocommit(true); 이다.
2. autocommit(false); 를 선언한후 작업이 다 완료되면
자동위탁모드를 다시 true로 바꿔야 한다.
3. catch 구문에서 rollback를 해주어야 한다.
4. commit or rollback를 호출하여 Connection 객체가 현재 보관 유지하는 데이터베이스 락을 해제합니다.
원자성, 일관성, 격리성, 지속성을 고려해서 트랜잭션처리를 구현해야 함.
트랜잭션처리 방법은 무수히 많다.
대표적으로 가장 좋은 방법으로 뽑히고 있는 방법은 Spring기반의 방법이 추천되고 있으며
어떠한 프레임워크 기반인지 어떠한 DB인지 여러 상황을 고려해서 트랜잭션처리를 선택해야 함.
https://blog.naver.com/0131v/110105753252
반응형
LIST
'Programming > Java' 카테고리의 다른 글
java.sql.SQLDataException: ORA-01861:리터럴이 형식 문자열과 일치하지 않음. (0) | 2023.02.09 |
---|---|
java.lang.UnsupportedClassVersionError: Bad version number in .class file 에러 관련 (0) | 2023.02.09 |
[퍼옴]Java를 잘 이해하고 사용하고 계신지요[Okky] (0) | 2023.02.03 |
Tree data structure: Binary Search Tree (0) | 2022.12.25 |
[Java]JVM Architecture And Class Loaders Java (0) | 2022.12.25 |