문제
데이터를 받아올 때, Entity를 Currency 모델로 정제 -> ExchangeRateModel과 Realm의 Model과 데이터를 비교하여 currentModel에 저장하는 메소드를 구현하고 싶었다.
ExchangeRateModel과 Realm의 Model과 데이터를 비교하는 과정에서 Realm의 데이터를 받아올 수 없어 아래와 같은 오류가 발생하였다.
내 생각에는 동기적으로 ExchangeRateModel을 fetch -> Realm 데이터 fetch -> 비교하는 과정에서 에러가 발생한 것 같다.
일반적으로 Realm은 다른 스레드에서 초기화하고 다른 스레드에서 액세스하거나 수정하려고 할 때 위와 같은 오류가 발생한다고 한다.
즉, 메인 스레드에서 데이터를 바인딩하려고 할 때(다른 스레드에서 액세스 할 때) Data를 fetch하는 과정에서 Realm 객체에 액세스하고 여기서 오류가 발생한 것 이라고 생각한다.
해결 방법
정말 간단하게 생각을 해보았다. "다른 스레드에서 초기화하고 다른 스레드에서 액세스하거나 수정하려고 할 때 위와 같은 오류가 발생"의 근본적인 원인을 해결하면 되지않을까?
메인 스레드에서 액세스 하니까 같은 스레드를 사용해보자. "Realm을 불러오고 비교할 때 비동기적으로 메인 스레드에서 처리하자"라는 나의 무식한 생각이 도출되었다.
해결
fetchData에서 Realm Model을 Read하고 비교하는 과정을 메인 스레드에서 비동기적으로 처리하였다.
되짚기
✅ 데이터를 읽어오는 과정은 global로 처리하는게 좋은 방법이다. global로 처리해봤지만 에러가 발생한다.
왜일까? 내 생각이지만, 아마 global과 main 즉, 서로 다른 스레드에서 액세스하려고 했기 때문이라고 생각한다.
global로 처리를하면 초기화는 global 스레드에서 하고 액세스는 main 스레드에서 하기 때문에 그러지 않을까?
✅ 스레드에 대해서 다시 한번 생각해봐야겠다. 동기와 비동기는 참 어려운 개념이다.
'ToyProject - 바꿔조 (환율 계산기)' 카테고리의 다른 글
[바꿔조/회고] 바꿔조 개발을 마무리 하며 (1) | 2024.01.29 |
---|---|
[바꿔조/문제해결] myCurrency 업데이트 시 반드시 한 개 이상의 currency를 포함하게 하기 위한 조건 처리 (1) | 2024.01.27 |
[바꿔조] 바꿔조 중간점검 (24.01.01 ~ 24.01.24) (2) | 2024.01.24 |