728x90
우리가 웹 애플리케이션을 만들 때 그 사이트에 대한 비즈니스 로직들이 존재한다. 이러한 비즈니스 로직들이 진행되다가 문제가 생기면 다시 오류가 난 시점으로 복구를 해야 하는데 그것을 가능케 하는 것이 트랜잭션이다. 자세히 알아보자
트랜잭션이란? 왜 사용하는데?
트랜잭션에 대해서 위키피디아에 검색을 하면 다음과 같이 설명하고 있다.
"데이터베이스에서 데이터에 대한 하나의 논리적 실행단계"가 말을 보고 이해가 가지가 않아서 조금 더 검색해 보았다. 그리고 내가 이해한 대로 가장 쉽게 표현하자면
"데이터베이스에서 여러 작업단위를 하나의 작업단위로 묶어서 실행"이다. 가장 보편적인 예를 한번 들어보겠다.
내가 배달음식을 시켜 먹으려고 한다. 음식을 선택하고 결제를 완료하던 중 모종의 이유로 어플이 강제종료 되었다. 이랬을 때 배달주문이 완료되지 않았는데 내 돈이 빠져나갔다면 어떨까?? 굉장히 짜증이 나고 일어나서는 안 되는 일이다. 이러한 일을 방지할 수 있게 음식을 선택하고
장바구니에 담고 결제까지 하는 일련의 과정을 하나의 과정으로 묶는 것이다. 그 과정도중 하나라도 문제가 생기면 최초의 상태롤 rollback 시키고 정상적으로 진행됐다면 commit 시켜서 데이터베이스에 반영하는 것이다.
트랜잭션의 특징 ACID
이러한 트랜잭션이 안전하게 수행된다는 것을 보장하기 위해 만든 4가지 특징이 있다.
- 원자성(Atomicity)
- 작업단위를 하나로 묶어서 실행해야 한다.
- 이 하나의 작업이 전부 성공하거나 아니면 실패해야 한다.(작업이 부분적으로 실행되다가 중단되지 않는다)
- 음식을 장바구니에 담는 행위는 성공해도 결제하는 부분에서 실패하면 안 된다.
- 정합성(Consistency)
- 트랜잭션 전과 후 모순이 있는 상태면 안된다.
- 작업이 성공했다면 정상적으로 데이터가 저장되어야 하고 실패했다면 그 상태를 유지하는 것이 아니라 원상복구 되어야 한다.
- 독립성(Isolation)
- 트랜잭션 단위끼리 서로 관여할 수 없다. 트랜잭션 연산작업에 끼어들지 못한다.
- 지속성(Durability)
- 트랜잭션이 성공해서 커밋된다면 그 데이터는 영구적으로 보관되어야 한다.
- 추후에 시스템에 문제가 생겨도 그 데이터는 문제가 없어야 한다.
'개발이야기' 카테고리의 다른 글
[Git]Github로 branch만들어서 팀원들과 협업하기 (1) | 2023.12.08 |
---|---|
[TIL]32.타입스크립트 제네릭 (1) | 2023.12.05 |
[TIL]30. SQL 제약조건 (0) | 2023.11.29 |
[TIL]29. Node 환경에서 AWS S3에 이미지 업로드 (0) | 2023.11.29 |
[TIL]28. node sequelize 에서 관계 맺기 (0) | 2023.11.23 |