콘텐츠로 이동

8. 트랜잭션#

AltibaseDatabase는 수동 트랜잭션 제어를 지원한다.

트랜잭션 메서드#

메서드 설명
startTransaction() 트랜잭션 시작
endTransaction() 트랜잭션 커밋
abortTransaction() 트랜잭션 롤백
isTransactionActive() 트랜잭션 활성 상태 확인

예제: 수동 트랜잭션#

try (AltibaseDatabase db = AltibaseClient.getDatabase(url)) {
    AltibaseCollection orders = db.getCollection("orders");
    AltibaseCollection inventory = db.getCollection("inventory");

    db.startTransaction();
    try {
        // 주문 생성
        AltibaseDocument order = orders.createDocument(
            "{\"product\": \"laptop\", \"quantity\": 1}"
        );
        orders.insertOne(order);

        // 재고 감소
        AltibaseDocument filter = AltibaseDocument.parse("{\"product\": \"laptop\"}");
        AltibaseDocument newInventory = inventory.createDocument(
            "{\"product\": \"laptop\", \"stock\": 99}"
        );
        inventory.replaceOneByCond(filter, newInventory);

        // 커밋
        db.endTransaction();
        System.out.println("주문 완료");

    } catch (Exception e) {
        // 롤백
        db.abortTransaction();
        System.err.println("주문 실패, 롤백됨: " + e.getMessage());
    }
}

예제: 트랜잭션 상태 확인#

try (AltibaseDatabase db = AltibaseClient.getDatabase(url)) {
    System.out.println("트랜잭션 활성: " + db.isTransactionActive()); // false

    db.startTransaction();
    System.out.println("트랜잭션 활성: " + db.isTransactionActive()); // true

    db.endTransaction();
    System.out.println("트랜잭션 활성: " + db.isTransactionActive()); // false
}