Firestore : batch를 알아보자

2025. 11. 26. 17:03
반응형

Firebase Store 기능을 사용하다보면 하면에 여러가지를 저장해야할때가 있습니다. 저는 출석체크기능에 학생별, 날짜별 리스트 두가지를 보기위해서 동시에 저장 밑 업데이트 기능을 사용해야했습니다. 그래서 동시에 하는 방법을 찾던 와중에 batch를 이용해서 transcation을 한번에 하는 방법이 있더라구요. 그래서 글로 정리해보려고 합니다.

 

가장 먼저 해야할일은 역시 공식사이트에서 찾아보는 것이죠

https://firebase.google.com/docs/firestore/manage-data/transactions?hl=ko#dart

 

트랜잭션 및 일괄 쓰기  |  Firestore  |  Firebase

이제 MongoDB 호환성을 갖춘 Cloud Firestore Enterprise 버전을 사용할 수 있습니다. 자세히 알아보기 의견 보내기 트랜잭션 및 일괄 쓰기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저

firebase.google.com

 

우선 기본적인 transaction은 CRUD(create, read, update, delete) 중 하나의 작업을 실행하는 단위입니다. Firebase 명령어로는 set(), get(), update(), delete()가 있습니다.

transaction은 아래의 주의사항이 있다고 합니다.

  • 읽기 작업은 쓰기 작업 전에 실행해야 합니다.
  • 트랜잭션에서 읽는 문서에서 동시에 수정이 이뤄지는 경우 트랜잭션을 호출하는 함수(트랜잭션 함수)가 여러 번 실행될 수 있습니다.
  • 트랜잭션 함수가 애플리케이션 상태를 직접 수정하면 안 됩니다.
  • 클라이언트가 오프라인 상태면 트랜잭션이 실패합니다.

그리고 batch는 문서를 읽을 필요가 없는 경우 set(), update() 또는 delete()의 작업을 포함하는 여러 쓰기 작업을 단일 배치로 수행할 수 있다고 합니다.

      batch.set(docRefAll, studentDataAll, SetOptions(merge: true));
      batch.set(docRef, studentData, SetOptions(merge: true));

이런식으로 작업을 하나씩 배열하여 사용한다는 것입니다.

그러면 사용방식을 알아봅시다.

final batch = _firestore.batch();

batch.set(docRefAll, studentDataAll, SetOptions(merge: true));
batch.set(docRef, studentData, SetOptions(merge: true));

await batch.commit();

 

  1. batch를 선언해줍니다.
  2. batch.set, batch.delete, batch.update 수행해야하는 작업을 작성해줍니다.
    • 이때 들어갈 데이터의 순서는 데이터 베이스 이름, 데이터, 설정 입니다.
    • 예시에서의 Options(merge: true)는 새로운 데이터만을 저장한다는 뜻입니다. 다른 설정을 할 수도 있습니다.
    • batch에서는 get 작업은 하지 않습니다. 그리고 batch.set를 통해서는 기존의 데이터가 있는지를  확인하고 없다면 자동으로 생성하게 됩니다.(중복을 확인준다는 의미가 아닌, 데이터베이스에 데이터의 존재 여부 확인)
  3. 마지막으로 batch.commit();을 사용하면서 단일 작성한 batch 작업들을 한번에 실행합니다.
    • batch 작업중 하나라도 실패가 있는경우 모든 작업이 실패가 됩니다.(일부만 성공이 안됩니다.)
    • 동시에 이루어져야하는 작업에는 좋습니다.

 

사용 방법까지 간단하게 알아보았습니다.

동시 작업을 해야한다면 간단하게 작업을 할 수 있어서 자주 사용할 것같습니다. 특히 데이터 존재 여부를 따로 확인하지 않아도 된다는 점이 코드를 간결하게 만들기 때문에 큰 장점 같습니다.

반응형