본문 바로가기
웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자

자바기반의 웹&앱 응용 SW개발자 양성과정 61일차 -93

by oncerun 2020. 6. 2.
반응형

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에 출력하도록 설정을 하면 됩니다.

 

반응형

댓글