[]
        
(Showing Draft Content)

동기화 모드 (AutoSync vs Batch)

원격 테이블은 두 가지 동기화 모드를 지원합니다.

  • 단일 동기화 모드

  • 일괄 동기화 모드

동기화 모드는 다음을 결정합니다.

  • 변경 사항이 서버로 전송되는 시점

  • 요청 구조 방식

  • 변경 사항이 트랜잭션 방식으로 처리되는지 여부

모드는 테이블 생성 시 구성됩니다.

단일 동기화 모드(autoSync)

단일 동기화 모드에서는 각 데이터 변경이 즉시 원격 요청을 발생시킵니다.

다음을 설정하여 활성화합니다.

autoSync: true

예제:

const dataManager = spread.dataManager();

const orders = dataManager.addTable("orders", {
    remote: {
        read:   { url: "http://localhost:3000/api/orders", method: "GET" },
        create: { url: "http://localhost:3000/api/orders", method: "POST" },
        update: { url: "http://localhost:3000/api/orders", method: "PUT" },
        delete: { url: "http://localhost:3000/api/orders", method: "DELETE" }
    },
    autoSync: true
});

orders.fetch();

동작 방식:

  • Insert → create 전송

  • Update → update 전송

  • Delete → delete 전송

  • 각 작업은 개별 요청을 전송

  • 수동 제출 불필요

다음과 같은 경우 단일 동기화 모드를 사용합니다.

  • 즉시 저장이 필요한 경우

  • 각 작업이 독립적인 경우

  • 일괄 처리보다 단순성이 중요한 경우

일괄 동기화 모드

일괄 모드에서는 변경 사항이 명시적으로 제출될 때까지 로컬에 저장됩니다.

다음을 설정하여 활성화합니다.

batch: true

예제:

const orders = dataManager.addTable("orders", {
    remote: {
        read:  { url: "http://localhost:3000/api/orders", method: "GET" },
        batch: { url: "http://localhost:3000/api/orders/batch", method: "POST" }
    },
    batch: true
});

orders.fetch();

동작 방식:

  • Insert/update/delete 작업은 로컬에 캐시됨

  • 즉시 네트워크 요청을 전송하지 않음

  • 모든 변경 사항을 함께 제출

변경 사항 전송:

orders.submitChanges();

변경 사항 취소:

orders.cancelChanges();

동작 비교

기능

단일 동기화

일괄 동기화

네트워크 호출

작업별

단일 요청

수동 제출

필요 없음

필요

트랜잭션 유사 동작

아니요

실패 처리

작업별

전체 일괄 처리

다음과 같은 경우 일괄 모드가 적합합니다.

  • 여러 변경 사항이 함께 성공하거나 실패해야 하는 경우

  • 네트워크 트래픽을 최소화해야 하는 경우

  • 서버 측 트랜잭션 처리가 구현된 경우

변경 사항 생명 주기

단일 동기화 모드:

  1. 사용자가 데이터를 수정

  2. 원격 요청 즉시 전송

  3. 서버 응답이 테이블 상태 업데이트

일괄 동기화 모드:

  1. 사용자가 데이터를 수정

  2. 변경 사항이 로컬에 저장

  3. submitChanges()가 모든 변경 사항 전송

  4. 서버가 집계된 결과 반환

  5. 테이블 상태 최종 확정

중요 참고 사항

  • read는 항상 정의되어야 합니다.

  • 단일 동기화 모드는 create, update, delete를 필요로 합니다.

  • 일괄 모드는 batch를 필요로 합니다.

  • 하나의 모드만 활성화해야 합니다.

  • 모든 테이블은 편집 전에 fetch()를 호출해야 합니다.