@croco/tx-core
v0.0.1
Published
AsyncLocalStorage 기반 Unit of Work 계층입니다. 트랜잭션 컨텍스트, 중첩 전략, 전파 규칙, after-commit 훅을 제공합니다.
Readme
@croco/tx-core
AsyncLocalStorage 기반 Unit of Work 계층입니다. 트랜잭션 컨텍스트, 중첩 전략, 전파 규칙, after-commit 훅을 제공합니다.
설치
pnpm add @croco/tx-core @croco/framework-context사용법
TxManager로 수동 실행
import { TxManager, type TxAdapter } from "@croco/tx-core";
const adapter: TxAdapter<unknown> = {
async transaction(fn) {
return fn({});
},
async savepoint(client, fn) {
return fn(client);
},
supportsSavepoint() {
return true;
},
};
const txManager = new TxManager(adapter, { defaultNesting: "join", defaultTimeout: 5000 });
await txManager.run(async () => undefined);@Transactional 데코레이터 사용
import { Transactional } from "@croco/tx-core";
class OrderService {
@Transactional({ propagation: "REQUIRES_NEW", timeout: 10000 })
async placeOrder(): Promise<void> {}
}API 레퍼런스
TxAdapter: 루트 트랜잭션과 savepoint 생성 계약TxManager:run,getClient,isInTransaction,onAfterCommit,suspendTransactional: 메서드 단위 트랜잭션 데코레이터TxManagerRegistry,DEFAULT_TX_MANAGER_KEY: 다중 매니저 등록과 조회- 타입:
TxRunOptions,TxManagerConfig,TransactionalOptions,Propagation,NestingStrategy - Problem:
TransactionTimeoutProblem,TransactionContextProblem,AfterCommitHooksProblem,TxPropagationError
전파 규칙
REQUIRED: 기존 트랜잭션에 참여, 없으면 새로 시작REQUIRES_NEW: 현재 컨텍스트를 중단하고 새 트랜잭션 시작MANDATORY: 기존 트랜잭션이 없으면 오류NEVER: 트랜잭션 안에서 호출되면 오류
