본문 바로가기

Java/Spring

Transaction

트랜잭션은 데이터베이스에서 데이터에 대한 하나의 논리적 실행단계 이며

ACID (원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다.

출처 - https://ko.wikipedia.org/wiki/ACID

 

즉, 트랜잭션은 하나의 최소 단위의 작업에 여러가지 데이터 변경을 넣으면, 모두 저장되거나, 아무 것도 저장되지 않거나를 보장한다.

만약, A계좌에서 B계좌로 20만원을 보낸다고 가정했을때,

  1. A 계좌 잔고 200,000 원 이상 확인
    • A 계좌 잔고: 1,000,000 원
  2. A 계좌 잔고 200,000 원 금액 감소
    • A 계좌 잔고: 800,000 원 (1,000,000 원 - 200,000 원)
  3. B 계좌 잔고 200,000 원 금액 증가
    • B 계좌 잔고: 1,200,000 원 (1,000,000 원 + 200,000 원)

모두 성공 시 ⇒트랜잭션 Commit

중간에 하나라도 실패 시 ⇒ 트랜잭션 Rollback

 

위 과정을 보장하는게 Transaction이다.

 

이전에 만들어본 프로젝트에서 관리자 계정 생성 과정을 글로적으면 다음과 같다.

1.전달받은 이름과 비밀번호를 받아 DB에서 중복된 이름이 있는지 확인  ⇒ 중복된 이름 있으면 트랜잭션 Rollback

2.관리자 계정 생성 체크 확인 ⇒ 체크가 되어 있지 않으면 일반 유저로 트랜잭션 Commit

3.관리자 계정 생성 체크가 되어있다면 관리자 토큰을 체크

     - 3-1.토큰이 일치할경우 ⇒  관리자 계정으로 트랜잭션 Commit

     - 3-2.토큰이 일치하지 않을경우 ⇒ 트랜잭션 Rollback

 

 Transaction을 적용한 계정 생성 과정을 순서도로 보면 다음과 같다.

그리고 스프링 AOP를 통해 모듈화된 @Transactional을 사용한 순서도는 다음과 같다.

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

JWT  (0) 2022.12.15
인증과 인가  (0) 2022.12.14
의존성 주입 - 스프링 IoC컨테이너  (0) 2022.12.13
의존성 주입 - 강한결합  (0) 2022.12.13
영속성 컨텍스트  (0) 2022.12.12