728x90
👉 A 씨는 커피 주문 앱으로 아이스 아메리카노를 선택하고 결제 버튼을 누른 후, 주문이 진행되는 중에 네트워크 오류로 인해 결제를 완료하는데 실패했습니다.
그런데, A씨가 주문한 커피는 정상적으로 데이터베이스에 등록이 되었습니다.
이 경우, 카페를 운영하는 쪽에서는 판매 수익을 얻지 못하는 손해를 보게 됩니다.
✔️ 트랜잭션 (Transaction) 이란 ?
위의 사례를 예방하기 위해 여러 개의 작업들을 하나의 그룹으로 묶어서 처리하는 단위입니다.
즉, 여러개의 작업들을 하나의 작업으로 보고 전부 성공해야만 실제 데이터에 반영하도록 하는 것입니다.
전부 성공하든가 전부 실패하든가(All or Nothing)의 둘 중 하나로만 처리되어야 트랜잭션의 의미를 가질 수 있습니다.
-> 하나라도 실패하면 모두 실패로 간주하는 것
✔️ ACID 원칙
- 원자성 (Atomicity) : 작업을 더 이상 쪼갤 수 없음
위 사례에서 예를 들면, 커피 주문 작업과 결제 작업은 하나는 처리해도 되고, 다른 하나는 처리하지 않아도 되는 식으로 쪼개서 처리할 수 없습니다.
따라서 논리적으로 하나의 작업으로 인식하여 둘 다 성공하든가 둘 다 실패하든가 (All or Nothing) 중에서 하나로만 처리되는 것이 보장되어야 합니다.
- 일관성 (Consistency) : 트랜잭션이 에러 없이 성공적으로 종료될 경우, 비즈니스 로직에서 의도하는 대로 일관성 있게 저장되거나 변경되는 것
회원이 3잔의 커피를 주문했으면, 3잔의 커피값이 결제되어야 함을 의미합니다.
- 격리성 (Isolation) : 여러 개의 트랜잭션이 실행될 경우 각각 독립적으로 실행이 되어야 함
컴퓨터에서 워드 작업을 하고 있고, 동시에 음악을 듣고 있다면 우리 눈에는 보이지 않지만 CPU는 두 가지 프로세스를 아주 빠른 속도로 번갈아가면서 실행을 시키고 있습니다.
이처럼 데이터베이스 역시 한 개 이상의 트랜잭션을 번갈아가면서 처리할 수 있는데, 각 트랜잭션이 다른 트랜잭션에 영향을 주지 않고 독립적으로 실행이 되어야 합니다.
- 지속성 (Durability) : 트랜잭션이 완료되면 그 결과는 지속되어야 함
데이터베이스가 종료되어도 데이터는 물리적인 저장소에 저장되어 지속적으로 유지되어야 한다는 의미입니다.
✔️ 트랜잭션의 커밋 (commit)과 롤백 (rollback)
- 커밋 (commit)
- 모든 작업을 최종적으로 데이터베이스에 반영하는 명령어로써 커밋 명령을 수행하면 변경된 내용이 데이터베이스에 영구적으로 저장된다.
- commit을 하지 않으면 작업의 결과가 데이터베이스에 최종적으로 반영되지 않는다.
- commit을 하면, 하나의 트랜잭션 과정은 종료된다.
- 롤백 (rollback)
- 작업 중 문제가 생겼을 때, 트랜잭션 내에서 수행된 작업들을 취소한다.
- 따라서 트랜잭션 시작 이 전의 상태로 되돌아간다.
728x90
'개발일지 > 웹개발' 카테고리의 다른 글
Cookie의 옵션들 (0) | 2022.11.22 |
---|---|
Hashing, Salt (0) | 2022.11.22 |
REST API (0) | 2022.10.05 |
HTTP 요청 메서드 (0) | 2022.10.05 |
Flask 시작하기 - API 만들기 (0) | 2022.07.06 |