React Relay Offline은 Relay 기반 React 애플리케이션에 오프라인 기능을 추가하는 확장 라이브러리입니다. Relay는 Facebook이 개발한 데이터 페칭 계층으로, React 앱에서 데이터 로딩, 갱신, 캐싱을 처리합니다. 이 프로젝트는 Relay의 기능을 확장하여 네트워크 연결이 없을 때도 앱이 정상 작동하고, 네트워크 복구 시 변경 사항을 자동 동기화합니다.
핵심 기술 분석
- 자동 지속성 및 재수화(Rehydration): AsyncStorage, localStorage, IndexedDB 같은 저장소 메커니즘을 통해 앱 상태를 자동으로 저장하고 복원합니다.
- 오프라인 전략 설정: 네트워크 우선, 저장소 우선 등 다양한 페칭 전략을 제공하여 여러 사용 사례에 대응합니다.
- 네트워크 상태 관리: 네트워크 상태를 자동 탐지하고, 상태에 따라 적절한 페칭 전략으로 전환합니다.
- 오프라인 뮤테이션 관리: 오프라인 상태에서 데이터 변경을 지원하고, 네트워크 복구 후 자동 동기화합니다.
적용 사례
- 모바일 앱: 불안정한 네트워크 환경에서도 핵심 기능 사용 가능
- 데스크톱 앱: 일시적 네트워크 단절에도 앱이 완전히 멈추지 않음
- 오프라인 편집: 네트워크 없이 콘텐츠 수정 후, 연결 복구 시 서버 동기화
- 오프라인 보고서: 로컬에서 보고서 생성 후, 네트워크 복구 시 업로드
주요 특징
- 유연한 저장소 설정: AsyncStorage, localStorage, IndexedDB 등 다양한 저장소 지원 및 사용자 정의 가능
- 스마트 페칭 전략: 여러 전략을 제공하며 앱 요구에 따라 선택 가능
- 자동 네트워크 상태 전환: 수동 개입 없이 상태에 따라 페칭 전략 자동 전환
- 오프라인 뮤테이션 동기화: 오프라인 변경 사항을 네트워크 복구 시 자동 동기화
- 다양한 예제 프로젝트: 빠른 학습을 위한 여러 샘플 제공
코드 예제
Relay 환경 설정 예시:
import { Network } from "relay-runtime";
import { RecordSource, Store, Environment } from "react-relay-offline";
const net = Network.create(fetchData);
const recordSource = new RecordSource();
const dataStore = new Store(recordSource);
const appEnvironment = new Environment({ network: net, store: dataStore });
// 오프라인 옵션 구성
appEnvironment.setOfflineOptions({
manualExecution: false,
network: Network.create(fetchOfflineData),
// 추가 옵션...
});
데이터 페칭 시 전략 지정 예시:
import { useQuery } from "react-relay-offline";
const queryResult = useQuery(graphqlQuery, queryVars, {
fetchPolicy: 'store-or-network', // 저장소 우선, 실패 시 네트워크
// 추가 옵션...
});
React Relay Offline은 네트워크 불안정 환경에서도 안정적인 앱 경험을 제공하는 강력한 도구입니다. 다양한 저장소 및 페칭 전략을 지원하여 여러 사용 사례에 유연하게 대응할 수 있습니다. 오프라인 기능이 필요한 React Relay 앱을 개발 중이라면 이 라이브러리를 고려해보세요.