플러터 앱을 개발하다 보면 데이터베이스 트랜잭션을 처리할 때가 있습니다. 데이터베이스 트랜잭션 도중 에러가 발생할 경우, 롤백(rollback) 처리를 통해 트랜잭션이 실패한 부분을 이전 상태로 복구할 수 있습니다. 이번 글에서는 플러터(sqflite)에서의 데이터베이스 트랜잭션 롤백 처리에 대해 알아보겠습니다.
1. 데이터베이스 트랜잭션의 이해
트랜잭션은 데이터베이스의 상태를 변경하는 작업의 단위입니다. 트랜잭션은 ACID라는 속성을 가지고 있어야 하며, ACID는 다음과 같이 정의됩니다.
- 원자성(Atomicity): 트랜잭션이 부분적으로 실행되거나 중단되지 않고, 전체가 실행되거나 전혀 실행되지 않아야 합니다.
- 일관성(Consistency): 트랜잭션이 완료된 다음에도 데이터베이스 상태가 일관성을 유지해야 합니다.
- 고립성(Isolation): 둘 이상의 트랜잭션이 동시에 실행되더라도 각각은 서로에게 영향을 미치지 않아야 합니다.
- 지속성(Durability): 트랜잭션이 성공하면 그 결과는 영구적으로 반영되어야 합니다.
이러한 ACID 속성을 지키면서 데이터베이스 상태를 변화시키는 것이 트랜잭션입니다.
2. 데이터베이스 트랜잭션 롤백 처리
플러터 앱에서 sqflite를 사용하여 데이터베이스 트랜잭션을 처리할 때, 롤백 처리는 다음과 같이 수행됩니다.
await db.transaction((txn) async {
try {
// 트랜잭션 수행
await txn.update(table, values);
await txn.insert(table, values);
// 트랜잭션 성공 시 커밋
await txn.commit();
} catch (e) {
// 에러 발생 시 롤백
await txn.rollback();
}
});
위 코드에서 txn.commit()
은 트랜잭션을 커밋하는 메서드이며, 트랜잭션이 성공적으로 실행되었을 때 호출됩니다. 반면 txn.rollback()
은 트랜잭션을 롤백하는 메서드로, 트랜잭션이 실패했을 때 호출됩니다.
이처럼 sqflite에서는 transaction
메서드를 통해 트랜잭션을 정의하고, 이를 통해 롤백 처리를 수행할 수 있습니다.
3. 마무리
이번 글에서는 플러터(sqflite)에서의 데이터베이스 트랜잭션 롤백 처리에 대해 알아보았습니다. 데이터베이스 트랜잭션은 데이터의 일관성을 유지하고, 에러 발생 시 롤백 처리를 통해 이전 상태로 복구하는 중요한 기능이므로, 실무에서 접목할 때 유용하게 활용될 것입니다.
더 많은 정보를 원하신다면 sqflite 공식 문서를 참고하시기 바랍니다.
관련 문서: sqflite 공식 문서
태그: flutter, sqflite, 데이터베이스, 트랜잭션, 롤백