1. 트랜잭션이란?
트랙잭션은 여러 단계의 작업을 하나로 처리하는 것으로, 하나로 인식된 작업이 모두 성공적으로 끝나면 Commit이 되고,
하나라도 문제가 발생하면 rollback되어서 작업을 수행하기 전단계로 모든 과정이 회수된다.
=> 즉, 1개의 트랜잭션에 대해서 오류가 발생하면 rollback이 가능하고, 오류가 없이 정상적으로 처리가 되면 commit 이 되어 시스템에 적용된다.
그래서 트랜잭션은 프로그램의 신뢰도를 보장하게 된다(?)고 한다.
2. 이슈
트랜잭션은 All or Nothing으로 표현되는 것으로 데이터베이스 연동을 하는 애플리케이션에 있어서 아주 중요한 것이다.
데이터베이스와 연동된 모든 프로그램은 트랜잭션이 완벽히 보장되어야 한다.
예를 들어 여러분이 현금지급기에서 돈을 인출할 때, 통장에서 잔고가 인출되고 -> 출금 부분에 돈이 들어 있어야 하나의 작업으로 수행이 이루어진 것으로 볼 수 있다.
그런데 통장에서는 잔고가 빠져나갔는데, 출금 부분에 돈이 없다면 어떻게 되겠는가?
이런 일이 발생하면 안 되기 때문에 통장에서는 잔고가 인출되고 출금 부분에 돈이 지급되는 과정이 하나의 작업으로 처리되어야 한다.
하나로 인식되는 작업이 모두 성공적으로 끝나면 commit 이 되고, 하나라도 문제가 생기면 rollback이 되어서 작업을 수행하기 전 단계로 모든 과정이 회수된다.
실제로 트랜잭션이 적용되어 처리되는 부분은 많으나 쉽게 볼 수 있는 것 중의 하나가 쇼핑몰의 장바구니 부분이다.
쇼핑몰에서 쇼핑을 할 때, 장바구니에서 구매할 물품을 선택해 신용카드의 결제까지 정상적으로 끝나야만 구매가 정상적으로 이루어진다.
그러나 변심해서 구매 부분의 신용카드 결제를 취소하는 순간 다시 처음으로 복귀되어 장바구니에 물건이 그대로 남아 있는 상태가 된다.
이것은 트랜잭션에 의해 구매 과정의 신뢰도를 보장하기 위한 것이다.
JSP에서 제공하는 트랜잭션 처리에 대한 메소드는 commit(), rollback() 메소드가 있다.
JDBC API의 Connection 객체가 제공하며 commit()은 트랜잭션의 commit을 수행하고, rollback() 메소드는 트랜잭션의 rollback을 수행한다.
기본적으로 Connection객체에 setAutoCommit이라는 함수는 true로 설정되어 있다.
즉, 기본적으로 JSP 오토커밋(Autocommit)인 것이다.
그래서 Commit을 조절하기 위해서는 setAutoCommit을 해제하고 commit을 적절하게 사용하고 다시 setAutoCommit을 설정해주는 과정이 필요하다.
....
에베ㅔ베베베베ㅓㅏㅋ너ㅏㄴㅁ라머나ㅠㅍ나채ㅑㅔㅗㄷ거뮹리ㅏㅓ쿠처ㅣㅏㅠㄴㅇ먀려ㅔㅈㅂ루차ㅣㅠㅊ포ㅓㄴㅊㄴ ㅏㅓ 나에게 모욕감을 줬어...
Connection conn ...
conn = DriverManager.getConnection(....
conn.setAutoCommit(false);
sql = "SQL문";
pstmt = conn.prepareStatment(sql);
pstmt.setString(1,~)
pstmt.setString(2,~)
...
pstmt.executeUpdate();
sql = "새로운 SQL문"
pstmt = conn.prepareStatment(sql);
pstmt.setString(1,~)
pstmt.setString(2,~)
...
pstmt.executeUpdate();
conn.commit(); // 현재까지를 1개의 트랜잭션으로 처리
conn.setAutoCommit(true);
'개발 > Web Programming' 카테고리의 다른 글
쿠키란? (0) | 2019.12.13 |
---|---|
Javascript에서의 deepcopy (0) | 2019.12.11 |
JDBC 설명 (0) | 2019.12.04 |
Mac MySql , JDBC 다운받고 연동까지하기 (0) | 2019.12.04 |
Java에서 getter/setter 자동생성법 (0) | 2019.12.04 |