-
DB TransactionSTUDY/Computer Science 2023. 7. 26.
트랜잭션은 프로젝트를 진행할 때, 가끔 존재는 확인했지만 활용할 생각을 못했던 그리고 어떤것인지 정확하게 파악하지 못했던 개념이다..
프로젝트를 진행하며 하나의 요청이 들어왔을 때 여러 개의 엔티티 인스턴스를 수정해야 하는 일이 생길 수도 있다.
그럴 때 어떻게 해야 하는지 알아보자.
🧐 트랜잭션(Transaction) 이란?
시스템에서 사용되는 더 이상 쪼갤 수 없는 업무 처리의 최소 단위이다.
정의만 보면 어떤 것인지 정확한 의미로 받아들이기 힘들것이다.
간단하게 말해서 데이터베이스에서 여러 작업을 하나의 단위로 묶어서 처리할 수 있도록 하는 것이 트랜잭션의 사용 목적이다.
예시를 통해 알아보면 이해가 빠를것이다. 가장 대표적으로 알려져 있는 예시로 계좌이체가 있다.
사람 A는 B에게 20만원을 이체하려고 한다!
이때 계좌이체는 하나의 작업처럼 여겨지지만
1. A의 계좌에서 20만원을 차감
2. B의 계좌에서 20만원을 추가
이렇게 두 단계를 거쳐야 한다.
이때 만약 송금하는 과정에서 네트워크에 이상이 생긴다면 A의 계좌에서는 20만원이 차감되었지만, B의 계좌에는 입금되지 않은 불상사가 생길 수도 있다!
이를 방지하기 위해서 위의 두 작업을 모두 성공적으로 마쳐야 완전한 거래로 승인하고, 만약 오류가 생겼다면 거래를 모두 초기화 시켜 원상태로 되돌려버리는 것이다.
이렇게 여러개의 작업을 하나의 단위로 묶어 안정성을 확보하는 방법을 트랜잭션이라고 한다.
💡트랜잭션(Transaction)의 특징!
데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다.
ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안전성을 보장하기 위해 필요한 성질이다.
- 트랜잭션 4가지 특성
원자성(Atomicity)
- 원자성은 트랜잭션이 DB에 모두 반영되거나, 전혀 반영되지 않는 All or Nothing 방식을 의미한다.
일관성(Consistency)
- 일관성은 트랜잭션 작업 처리의 결과가 항상 일관되어야 한다를 뜻한다.
독립성(Isolation)
- 독립성은 하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 마찬가지로 독립적임을 의미한다.
즉, 각각의 트랜잭션은 독립적이라 서로 간섭이 불가능하다.
지속성(Durability)
- 지속성은 트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 함을 뜻한다.
보통 commit 이 된다면 지속성은 만족할 수 있다. - 만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다는 뜻
- 트랜잭션 조작어 TCL(Transaction Control Language)
COMMIT :
- 올바르게 적용된 데이터를 데이터베이스에 반영시키는 것
ROLLBACK :
- 트랜잭션 시작 이전의 상태로 되돌리는 것
SAVEPOINT :
- ROLLBACK할 때 현시점에서 SAVEPOINT까지 트랜잭션의 일부를 롤백할 수 있다
QueryRunner를 이용한 트랜잭션 제어
nestjs 기반 프로젝트 Transaction 사용 참고 블로그 - https://cherrypick.co.kr/typeorm-basic-transaction/
TypeORM의 Transaction 사용하기
이번 포스팅은 TypeORM의 transaction 사용법에 대한 내용이다. 간단한 사용법이지만 정리하는 차원에 작성한다. 프로젝트는 nestjs 기반으로 생성했으며, 엔티티 프레임워크로 typeorm과 데이터베이스
cherrypick.co.kr
TypeORM에서는 데이터베이스 쿼리를 실행하고 관리하는 객체 QueryRunner를 제공한다.
QueryRunner는 single database connection을 제공하기 때문에 트랜잭션 제어가 가능하다.
세부적으로 직접 트랜잭션을 제어하고 싶을 때에는 QueryRunner를 사용하면 된다.
이전 프로젝트와 달리 이번엔 nest 기반으로 생성한 프로젝트를 진행하지만, queryRunner를 쓰는 구조 자체는 같아서
많이 익숙했다!
분명 쓰기까지 많은 시행착오를 겪겠지만, 어떻게 쓰지 않을까 하는 막연한 자신감을 가지게 되었다..😶
[데이터베이스] 트랜잭션의 ACID 성질 - 하나몬
트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안
hanamon.kr
typeorm 공식문서 Transaction 관련 - https://orkhan.gitbook.io/typeorm/docs/transactions
Transactions - typeorm
The following database drivers support the standard isolation levels (READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE):
orkhan.gitbook.io
'STUDY > Computer Science' 카테고리의 다른 글
데이터베이스 정규화 알아보기 (0) 2023.08.16 API란 무엇인가? (0) 2023.08.09 시간 복잡도에 관하여 (0) 2023.07.12 디자인 패턴과 프로그래밍 패러다임 (0) 2023.05.19