본문 바로가기

Programming/Java & JSP & Spring

[Spring] 트랜잭션 처리

스프링을 사용하는 프로젝트 내에서는 특별한 경우가 아니라면 데이터베이스의 트랜잭션은 AOP의 설정을

응용해서 처리한다. 약간의 설정과 애노테이션만을 이용하면 트랜잭션의 문제가 간단하게 해결된다.


트랜잭션이란?

트랜잭션은 쉽게 말해 하나의 업무에 여러 개의 작은 업무들이 같이 묶여 있는 것을 의미한다.


가장 흔한 예로 계좌이체를 들 수 있다.

만약 내가 상대방에게 이체를 할때, 먼저 내 통장에서 돈이 빠져나가고 상대방 통장에 돈이 들어감으로써

하나의 온전한 프로세스가 완료되게 된다.

이렇게 두 개 이상의 작은 업무로 구성된 것을 트랜잭션이라고 한다.


데이터베이스의 정규화와 트랜잭션은 서로 연관이 있는 경우가 많다. 데이터베이스의 정규화가 잘 돼 있을수록,

관련을 맺는 데이터는 줄어든다. 반면에 성능상의 이유나 구현상의 복잡함으로 인해 반정규화가 많이 진행되는

경우에는 트랜잭션을 처리해야 하는 상황이 더욱 많아질 수 밖에 없다.


트랜잭션의 기본원칙

트랜잭션의 기본 원칙은 흔히 ACID 속성이라고 한다.

  • 원자성(Atomicity) : 하나의 트랜잭션은 모두 하나의 단위로 처리돼야한다.
  • 일관성(Consistency) : 트랜잭션으로 처리된 데이터와 일반데이터 사이에는 전혀 차이가 없어야 한다.
  • 고립성(Isolation) : 트랜잭션으로 처리되는 중간에 외부에서의 간섭은 없어야 한다.
  • 영구성(Durability) : 트랜잭션이 성공적으로 처리되면, 그 결과는 영속적으로 보관되어야한다.

이 중에서 트랜잭션을 가장 잘 표현한 것은 '원자성'이다.

쉽게 말해 원자성은 '되면 모두 다 되고, 안되면 모두 안된다.' 라고 말할 수 있다.


Spring의 트랜잭션 처리

스프링에서 트랜잭션을 처리하는 방식은 기본적으로 XML을 사용해서 선언하는 방식과 애노테이션을

활용하는 방식으로 나뉜다.


XML을 사용하는 경우에는 transaction-context.xml 파일을 이용해 XML로 작성해서 처리하는 경우가 많고,

애노테이션을 사용하는 경우에는 DAO나 Mapper등을 이용하는 Service클래스에 애노테이션 처리를

통해서 트랜잭션을 활용한다.

'Programming > Java & JSP & Spring' 카테고리의 다른 글

[Spring] @RequestParam 파라미터 매핑  (0) 2017.02.14
[Spring] VO와 DTO  (0) 2017.02.02
[Spring] AOP, Filter, Interceptor의 차이  (0) 2017.02.01
[Spring] AOP 란?  (0) 2017.02.01
[Spring] RestController와 Ajax  (0) 2017.02.01