RxSwift 기반 Realm 비동기 처리

brick·2023년 10월 27일
0

오단완

목록 보기
1/3

문제 상황

Realm을 사용해 데이터를 관리하는 작업을 비동기로 글로벌 스레드에서 처리하기 위해 subscribe(on:) 메서드를 사용해 타이머 설정을 업데이트하는 observable(single)이 글로벌 스레드에서 동작하게 했습니다.

타이머 설정을 업데이트하기 위해 realm 인스턴스에 접근하는 순간 아래와 같이 realm을 잘못된 스레드에서 접근했다는 에러가 발생했습니다.

문제 원인

Realm의 Thread 공식 문서의 Three Rules to Follw 중 3번째 규칙 Don't pass live objects, collections, or realms to other threadsd에서 realm 인스턴스는 thread-confined 해서 생성된 스레드에서만 유효하다고 합니다.

현재 realm 인스턴스를 main 스레드에서 생성 후 11번 스레드에서 접근을 시도해 오류가 발생하고 있습니다.

해결 과정

Realm 공식 문서를 참고해 realm 인스턴스를 serial queue에서 생성했습니다.

Three Rules to Follw의 3번째 규칙을 준수해 realm 인스턴스에 접근할 때는 생성할 때 사용한 realmTaskQueue에서 접근해 global 스레드에서 비동기 적으로 작업하게 했습니다.

참고

0개의 댓글