Transaction(트랜잭션)
만약 한 테이블에서 어떤 칼럼의 값을 INSERT(삽입) 후에 그 칼럼 값으로 다른 테이블의 칼럼을 UPDATE 한다고 가정할 때
두 쿼리가 모두 제대로 실행되었다면 두 테이블에 각각 알맞은 값이 저장될 것이다.
하지만 첫번째 INSERT 퉈리 실행 후 두번째 UPDATE쿼리에서 익셉션이 발생한다면
첫번재 쿼리를 실행하는 테이블의 칼럼 값을 제대로 삽입되었지만 두번째 쿼리 테이블의 칼럼 값은 변경되지 않았을 것이다.
이처럼 두 개 이상의 쿼리를 모두 정상적으로 실행해야 데이터가 정상적으로 처리되어 유지될 때 Transaction(트랜잭션)을 이용하여
두 개 이상의 쿼리를 마치 하나의 쿼리처럼 처리할 수 있다.
위 그림에서 처럼 트랜잭션은 시작과 종료를 가지고 있다.
트랜잭션의 시작 이후 실행되는 쿼리 결과는 DBMS에 곧바로 적용되지 않고 임시로 보관된다.
이후 트랜잭션을 Commit하면 임시 보관하고 있는 모든 쿼리 결과를 실제 데이터에 반영한다.
만약 Commit 이전에 익셉션이 발생한다면 일시 보관하고 있는 모든 쿼리의 결과를 반영하지 않고 취소(Rollback:롤백)한다.
간단히 말해 트랜잭션이 시작되고 종료할때 까지 범위 내에서 쿼리 결과가 반영되거나 반영되지 않게 할 수 있는 것.
트랜잭션 구현 방법
1. JDBC의 Auto Commit Mode를 false로 지정
* 단일 데이터베이스에 접근하는 경우
try {
conn = DriverManager.getConnection(....);
conn.setAutoCommit(false); //트랜잭션 시작
... 쿼리실행1
... 쿼리실행2
conn.commit(); // 트랜잭션 종료
2. JTA(Java Transaction API)를 이용
* 두 개 이상의 데이터베이스에 접근하는 경우
'WEB > JSP Servlet' 카테고리의 다른 글
필터 (0) | 2016.12.09 |
---|---|
커넥션 풀 (0) | 2016.12.06 |
MVC 패턴과 모델 (0) | 2016.11.22 |
서블릿 : 초기화 (0) | 2016.11.22 |
서블릿 : 기본 (0) | 2016.11.21 |