트랜잭션은 데이터베이스에서 데이터에 대한 하나의 논리적 실행단계 이며
ACID (원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다.
출처 - https://ko.wikipedia.org/wiki/ACID
즉, 트랜잭션은 하나의 최소 단위의 작업에 여러가지 데이터 변경을 넣으면, 모두 저장되거나, 아무 것도 저장되지 않거나를 보장한다.
만약, A계좌에서 B계좌로 20만원을 보낸다고 가정했을때,
- A 계좌 잔고 200,000 원 이상 확인
- A 계좌 잔고: 1,000,000 원
- A 계좌 잔고 200,000 원 금액 감소
- A 계좌 잔고: 800,000 원 (1,000,000 원 - 200,000 원)
- 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 |