MVC2 모델에서 service에서 트랜잭션을 처리하는 부분이다.
트랜잭션을 처리하기 위해선 conn.setAutoCommit(false);를 연결과 동시에 설정해주어야 하며
Exception이 발생하는 곳에서 conn.rollback()을 작성해주어야 한다.
또한 try~catch 구문에서 선언된 변수는 당연하게 지역변수로 처리되므로 구문 밖에다 null값으로 미리 선언해 두어야 한다.
Connetion conn = null;
PreparedStatement st = null;
ResultSet rs =null;
Connetion conn = null;
try{
Connetion conn = DriverDriverManager.getConnection();
conn.setAutoCommit(false);
}catch{
try{
conn.rollback();
}catch(SQLException e){}
}
여기서 중요한 점은 conn.rollback() 또한 예외를 던질 수 있습니다.
그 이유는 앞에서 conn객체를 얻지 못했다면 예외가 발생하며 catch블록을 실행할 것입니다. 또한 현재 코드에서는 conn 관련된 코드밖에 없지만 다른 코드에서 에러가 발생할 수도 있기 때문입니다.
그렇기에 조건문 하나를 더 추가해주어야 합니다.
try{
if(conn != null)
conn.rollback();
}catch(SQLException e){
}
트랜잭션을 처리할 때 중요한 점은
ACID입니다
A : 간단히 말하면 트랜잭션이 깨지지 않아야 한다는 것입니다. 트랜잭션 처리 중 하나의 SQL 구문만 처리되고 나머지는 처리되지 않는다면 원자성에 위배됩니다.
그렇기에 우리는 commit과 rollback을 이용해 원자성을 유지합니다.
C : 일관성입니다. 일관성은 제약조건을 이용해 결함을 제거하는 것입니다.
D : COMMIT을 이용해 물리적으로 영구적으로 유지되어야 합니다.
I : 동시에 작업을 하여 수정 , 변경에 대한 접근을 막고 고립성을 유지하는 것입니다.
고립도에 대한 Level이 존재합니다.
에러에 대한 처리는 UI 즉 Controller에서 해주어야만 합니다. rollback을 위해 예외처리를 했다면 다시 예외를 발생시켜 해당되는 에러에 대한 페이지를 보여주어야 합니다.
throw new RuntimeException(); 를 던져주어서 ui에 출력하도록 설정을 하면 됩니다.
'웹 프로그래밍 기초 > 자바기반의 웹&앱 응용SW 개발자' 카테고리의 다른 글
자바기반의 웹&앱 응용 SW개발자 양성과정 63일차 -95 (0) | 2020.06.11 |
---|---|
자바기반의 웹&앱 응용 SW개발자 양성과정 62일차 -94 (0) | 2020.06.03 |
자바기반의 웹&앱 응용 SW개발자 양성과정 60일차 -92 (0) | 2020.06.01 |
자바기반의 웹&앱 응용 SW개발자 양성과정 59일차 -91 (0) | 2020.05.28 |
자바기반의 웹&앱 응용 SW개발자 양성과정 58일차 -90 (0) | 2020.05.27 |
댓글