[spring mvc] 트랜잭션(Transaction)

Backend kwon·2023년 9월 22일
0

⚫트랜잭션이란?

여러 개의 작업들이 마치 하나의 그룹처럼 묶여서 처리되는 중에 둘 중 하나라도 처리에 실패할 경우 애플리케이션의 신뢰성이 깨지는 상황이 발생할 수 있습니다.

트랜잭션은 여러 개의 작업들을 하나의 그룹으로 묶어서 처리하는 처리 단위인데 애플리케이션의 신뢰성이 깨지는 상황이 발생하면 트랜잭션이라고 부를 수 없습니다.

무조건 여러 개의 작업을 그룹으로 묶는다고 해서 트랜잭션이라고 부를 수 있는 게 아니라 물리적으로는 여러 개의 작업이지만 논리적으로는 마치 하나의 작업으로 인식해서 전부 성공하든가 전부 실패하든가(All or Nothing)의 둘 중 하나로만 처리되어야 트랜잭션의 의미를 가집니다.

이러한 트랜잭션 처리 방식은 애플리케이션에서 사용하는 데이터의 무결성을 보장하는 핵심적인 역할을 합니다.

데이터의 무결성은 정확성, 일관성, 유효성이 유지되는 것을 의미

 

⚫ACID 원칙

  1. 원자성(Atomicity)
    트랜잭션에서의 원자성이란 작업을 더 이상 쪼갤 수 없음을 의미합니다.
    논리적으로 하나의 작업으로 인식해서 둘 다 성공하든가 둘 다 실패하든가(All or Nothing) 중에서 하나로만 처리되는 것이 보장되어야 합니다.

  2. 일관성(Consistency)
    일관성은 트랜잭션이 에러 없이 성공적으로 종료될 경우, 비즈니스 로직에서 의도하는 대로 일관성 있게 저장되거나 변경되는 것을 의미합니다.

  3. 격리성(Isolation)
    격리성은 여러 개의 트랜잭션이 실행될 경우 각각 독립적으로 실행이 되어야 함을 의미합니다.

  4. 지속성(Durability)
    트랜잭션이 완료되면 그 결과는 지속되어야 한다는 의미입니다.
    데이터베이스가 종료되어도 데이터는 물리적인 저장소에 저장되어 지속적으로 유지되어야 한다는 의미입니다.

 

⚫트랜잭션 커밋(commit), 롤백(rollback)

커밋(commit) : 모든 작업을 최종적으로 데이터베이스에 반영하는 명령어로써 commit 명령을 수행하면 변경된 내용이 데이터베이스에 영구적으로 저장됩니다.

만약 commit 명령을 수행하지 않으면 작업의 결과가 데이터베이스에 최종적으로 반영되지 않습니다.

commit 명령을 수행하면, 하나의 트랜젝션 과정은 종료하게 됩니다

롤백(rollback) : 롤백(rollback)은 작업 중 문제가 발생했을 때, 트랜잭션 내에서 수행된 작업들을 취소합니다.
따라서 트랜잭션 시작 이 전의 상태로 되돌아갑니다.

우리가 JPA API를 사용해서 commit을 수행하는 작업은 너무나도 간단한 작업인데, 내부적으로는 아주 복잡한 과정을 거쳐서 최종적으로 commit 명령이 데이터베이스에 전달됩니다. (차후 공부할 것)

 

트랜잭션은 사실 데이터베이스에만 한정해서 사용하는 의미는 아닙니다.

두 개의 작업이 하나의 트랜잭션으로 묶여서 둘 중에 하나라도 실패할 경우 롤백(rollback)이 되어야 할 수도 있습니다

이처럼 전혀 다른 타입의 리소스(데이터베이스, 파일, 메시지 등)를 하나의 작업 단위로 묶어서 처리해야 되는 상황에서도 어떤 식으로 트랜잭션을 적용해야 할 지 고민할 수 있습니다.

profile
백엔드개발자를 향해서

0개의 댓글