본문 바로가기

Dev.../플밍 관련 자료

[펌] 자바로 구현하는 트렌젝션 프로그래밍(1)

자바로 구현하는 트렌젝션 프로그래밍(1)




자바스터디 네트워크 [www.javastudy.co.kr]

조대협 [bcho_N_O_SPAM@j2eestudy.co.kr]

 

 

실제로 IT 시스템을 구현함에 있어서 트렌젝션처럼 필수적인 요소도 없으리라 생각된다. 특히 금융권이나, 데이타의 정확성등이 요구되는 비지니스 업무에서는 트렌젝션 지원이 필수적인 요소로 대두 되고, 좀더 안정적이고, 빠른 트렌젝션 처리를 위해서, 많은 미들웨어 들이 사용되고 있다.

 

그러나,실제로 프로그래밍을 하는데 있어서, 제대로 트렌젝션 프로그래밍을 하는 개발자는 그리 많지 않다물론 많은 미들웨어가 트렌젝션에 관련된 많은 작업을 수행해주지만, 절대로 미들웨어는 만능이 아니다. 정확한 트렌젝션의 개념을 알고, 거기에 맞는 프로그래밍을 해야만 제대로 트렌젝션을 보장 받을 있다

 

 이번호 부터 3회에 걸쳐서, 트렌젝션에 대해서 알아보고, 트렌젝션을 자동적으로 관리해주는 미들웨어와, 그리고, 실제로 JAVA 기반에서 XA 인터페이스를 이용하거나 EJB 이용하여 트렌젝션을 프로그래밍하는 방법에 대해서 알아보도록 하자.

 

이번호는 첫시간으로, 먼저 트렌젝션이 무엇인지 그리고 분산 트렌젝션은 어떤식으로 처리되는지 트렌젝션 관리는 어떻게 되는지, 그리고 마지막으로 트렌젝션의 격리 레벨에 대해서 살펴보도록 한다.. 결코 쉬운 내용은 아니지만 적어도 데이타 베이스 프로그래밍을 하는 개발자라면 필히 알고 있어야하는 내용이다.

1.   트렌젝션이란 무엇인가? (What is transaction ?)

 

트렌젝션이란, 중단없이 시작에서부터 종료까지 한번에 수행되어야 하는 하나의 작업단위를 이야기한다. 수행이 끝난후에는 중간에 작업이 실패되었을 경우에는 작업 수행전의 상태로 그대로 돌아가야 한다.

 

이해를 돕기위해서 쉽게 예를 들어서 설명하도록 하자, A계좌에서 B계좌로 1,000원을 계좌 이체를 한다고 가정하자. 작업은 다음과 같은 순서로 이루어지게 된다.

 

1)       A계좌에서 1,000원을 인출한다.

2)       B 계좌에 1,000원을 더한다.

 

만약 위의 작업을 수행하던 도중 A계좌에서 1,000원이 인출된 후에, 은행 시스템의 오류로 인해서 B계좌에 1,000원이 더해지지 않는다면, 중간에 1,000원이라는 돈은 공중에서 증발해 버린것이 된다. 이럴때는 다시 계좌이체를 수행하기 이전의 상태로 되돌려서 A계좌에로부터 1,000원을 인출하지 말아야 한다.

 

그래서 위의 1),2) 작업은 한꺼번에 이루어져야 한다. 계좌이체 작업과 같이 한번에 이루어져야 하는 작업을 트렌젝션이라고 부른다.

 

이처럼 트렌젝션은 쇼핑몰의 주문 결제나,예매와 같이 Mission Critical 작업 있어서 필수적인 개념이라고 있다.

2.   트렌젝션의 기본속성 ACID (Transaction attribute “ACID” )

 

트렌젝션은 크게 4가지 특성을 가지는데 Atomicity,Consistency,Isolation,Durability, 네가지를 줄여서 ACID라고 부른다.

그럼 이제 부터 ACID속성 각각에 대해서 상세하게 알아보도록 하자.

 

Atomicity (원자성)

Database modifications must follow an all or nothing.

원자성이란, 하나의 트렌젝션이 하나의 단위로만 처리가 되어야 한다는것이다. 하나의 트렌젝션안에 여러가지 step 트렌젝션이, 하나로 처리가 되어야한다. 위의 계좌 이체처럼, 계좌에서 돈을 빼고, 돈을 다른 계좌에 넣는 것과 같이 두개이상의 step으로 구성되어 있더라도, 계좌 이체라는 하나의 트렌젝션으로 처리가 된다.

 그래서, 어느 step에서라도 트렌젝션이 실패가 되었을 경우에는 모든 상태가 트렌젝션 상태 전으로 rolled back되서, 이전 상태를 유지해야 한다.

  트렌젝션의 원자성은 트렌젝션이 완전히 수행되거나, 아무것도 수행되지 않은 All or Nothing 이미를 가지게 된다.

Consistency (일관성)

states that only valid data will be written to the database

트렌젝션이 종료된후에 저장되는 데이타는 오류없는 데이타만 저장되어야 한다.

 다시 풀어서 이야기하자면 계좌이체 과정에서, 인출은 되었는데, 다른 계좌로 돈이 안넘어갔다던지, 트렌젝션이 끝난후에, 잘못된 데이타 값으로 변경되었던지, 데이타베이스 constraint 깨졌던지 했을때, Consistency 잘못되었다고 이야기하고, 이런경우에 트렌젝션 내용을 저장하지 말고, 이전 상태로rollback되어야 한다.

Isolation (격리성)

Multiple transactions occurring at the same time not impact each other execution

격리성이란, 트렌젝션중에 의해서 변경된 내용이 트렌젝션이 완료되기전까지는 다른 트렌젝션에 영향을 주어서는 안된다는 이야기이다.

Tx A라는 트렌젝션 수행중 EMP 테이블의 값을