개발 일지/Spring

[Spring MVC] 트랜잭션

미숫가루설탕많이 2023. 2. 28. 14:10

 트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키기 위한 하나의 논리적인 작업 단위를 의미한다. 데이터베이스의 상태를 변경하는 작업은 여러 개의 SQL 문으로 이루어질 수 있으며, 이러한 SQL 문들의 논리적인 작업 단위를 트랜잭션이라고 한다.

 

 트랜잭션은 데이터베이스의 안정성과 일관성을 보장하는 데 매우 중요한 역할을 한다.

 

 계좌 이체를 통해 돈을 송금하는 상황이 있다고 가정했을 때, 앱으로 송금을 눌렀지만 네트워크 오류로 인해 송금에 실패했다고 나왔다. 그런데 상대방의 계좌에는 정상적으로 돈이 송금되어 보낸 사람의 계좌에도 돈이 남아있고 받은 사람의 계좌에도 돈이 있다면 결국 은행이 금전적인 손해를 보는 상황이 발생할 것이다.

 

 위처럼 애플리케이션의 신뢰성이 깨지는 상황이 발생하면 트랜잭션이라고 부를 수 없다. 물리적으로는 여러 개의 작업이지만 논리적으로는 마치 하나의 작업으로 인식해서 전부 성공하던가 전부 실패하던가의 둘 중 하나로만 처리되어야 트랜잭션의 의미를 가진다.

 

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

 

 

 

 

ACID 원칙

 

 트랜잭션은 ACID 원칙을 준수해야 한다.

 

 ACID 원칙은 Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성)의 네 가지 속성으로 구성되며, 데이터베이스 트랜잭션의 성질을 나타낸다.

 

  • Atomicity(원자성)
    : 트랜잭션의 작업은 하나의 논리적인 단위로 간주되며, 이 작업이 모두 수행되거나 전혀 수행되지 않아야 한다.

  • Consistency(일관성)
    : 트랜잭션이 실행되기 전과 실행된 후의 데이터베이스 상태가 일치해야 한다.

  • Isolation(고립성)
    : 여러 개의 트랜잭션이 동시에 실행되더라도, 각각의 트랜잭션은 다른 트랜잭션에서 수행하는 작업에 영향을 받지 않도록 격리되어야 한다.

  • Durability(지속성)
    : 트랜잭션이 성공적으로 완료되면 해당 작업이 영원히 유지되어야 한다. 즉, 시스템 장애가 발생하더라도 작업 결과는 유지되어야 한다.

 

 

 

 

트랜잭션 명령어

 

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

  • 롤백(rollback)
    : 작업 중 문제가 발생했을 때, 트랜잭션 내에서 수행된 작업들을 취소하고, 변경된 데이터를 이전 상태로 되돌린다.

  • 세이브포인트(savepoint)
    : 트랜잭션 내에 저장점을 만들고, 저장점 이후의 작업에 대해서만 롤백을 실행할 수 있다.

'개발 일지 > Spring' 카테고리의 다른 글

[Spring] 트랜잭션 전파  (0) 2023.03.02
Failed to configure a DataSource 에러  (0) 2023.03.01
[Spring JPA] CASCADE  (0) 2023.02.27
[Spring JPA] 엔티티 간의 연관 관계 매핑  (0) 2023.02.24
[Spring] 엔티티 매핑  (0) 2023.02.23