일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 자바스크립트
- 리프2기
- 인프런오리지널
- 인프런파이썬강의
- IOS
- 노드JS
- uikit
- 스위프트
- IOS프로그래밍
- 우리를위한프로그래밍
- 유학토플
- 파이썬웹크롤링
- 파이썬중급강의
- swift
- 인프런강의
- 프로그래머스
- JS
- rxswift
- 토플공부수기
- 교환학생토플
- 카카오톡채팅봇
- 인프런
- SwiftUI
- 파이썬
- Python3
- 파이썬중급
- 토플
- 웹크롤링
- 인프런파이썬
- nodeJS
- Today
- Total
목록Realm (5)
먹고 기도하고 코딩하라
저번 달에 진행했던 Realm과 멀티 스레딩 세미나 자료를 블로그에도 올린다. 목차 Realm과 멀티 스레딩 Realm 마이그레이션 try? Realm()을 하면 한 스레드에 Realm이 여러 개 생기는 거 아닙니까 Realm과 멀티 스레딩 전제 경험으로 알고 있듯 Realm 객체는 다른 스레드에서 사용할 수 없습니다. You cannot share realm instances across threads. 원인 다른 스레드에서 접근 대상 : Realm 객체 자체 / Live Object Realm accessed from incorrect thread (RLMException) 에러와 함께 가차없이 강종됩니다. 싱글턴으로 사용하는 Realm 객체가 메인 스레드에 선언되어 있기 때문에, 다른 스레드에서 R..
이번 포스팅은 Realm 시리즈의 최종장으로 realm 사용에 있어서 자주 실수하는 것들과 더 나아가 realm을 더 잘 쓸 수 있는 best practices를 소개한다. Realm에 접근해야 할 때마다 try! Realm() 하기 저번 포스팅에도 썼던 것처럼, Realm을 접근할 때마다 try! Realm()으로 Realm 객체를 그때그때 가져와주는 것이 좋다. 스레드에서 처음 접근할 때 초기화해서 객체를 생성한 뒤로는 그것을 계속 캐싱해서 쓰기 때문에 오버헤드는 그다지 없다. 게다가 다른 스레드에서 쓰려고 하면, ThreadSafeReference로 Realm을 가져가서 써야 하기 때문에 불편하다. 특별한 사유가 없다면 접근할 때마다 Realm 객체를 가져온다. // 가급적 피하세요 static l..

저번에 여러 스레드에서 Realm을 써야 할 때, 어떻게 써야 앱을 살리면서 쓸 수 있는지 살펴봤다. 이번 포스팅에서는 Realm의 Configuration과 스키마 버전을 올릴 때의 마이그레이션 블록에 대해 살펴본다. 2. 마이그레이션 Realm의 스키마 버전(schemaVersion)을 올려야 할 때가 있다. 모델을 새로 생성하거나, 기존의 모델의 필드를 rename하거나 기타 수정을 가하든지 원래 있던 모델을 삭제한다든지 하는 경우이다. column을 추가하거나 새로운 Object를 추가하는 등의 별도 수동 마이그레이션 작업이 필요없는 수정이 있는 경우에는 마이그레이션 블록을 비울 수 있고, 그렇지 않은 경우에는 마이그레이션 블록을 써야 한다. 이 과정에서 Configuration이 개입하는데, 말..

iOS 앱에서 로컬에 데이터를 저장하는 방법은 여러 가지가 있다. 퍼스트파티인 CoreData도 있고, SQLite나 Realm을 쓸 수도 있다. 그 중 Realm의 장점은 속도가 빠르다, 안드로이드나 윈도우, 맥 등 크로스플랫폼 사용이 가능하다, SQL처럼 데이터 스키마를 Table 형식으로 구성하고, 데이터를 row 등으로 관리하는 게 아니라 OOP 패러다임에 맞게 클래스와 객체로 관리한다 등.. 여러 가지가 있다. 우리 회사 iOS 앱은 현재 클립 데이터를 다운로드받는 데에 Realm을 사용하고 있다. 개인 프로젝트에서도 Realm을 쓰긴 했는데 기획도 개발도 내가 하다 보니 요구 사항이 심플해져서 딥하게 쓸 일은 딱히 없었다. 하지만 회사 앱은 기획에 맞게 타이트하게 기능 개발을 해야 해서 이 기..
2월 한 달동안 회사에서 데이터를 기기에 저장하는 작업을 진행했다. M 대리님이 하던 작업인데, 중간에 어떤 문제 때문에 꼬여서 중단됐던 걸 내가 맡아서 에러 고치고 기능 마저 구현하고 QA 티켓 처리하면서 마무리짓게 됐다. (곧 배포 예정! 예이~) QA에서 나온 이슈 중에 하나가 클립을 다 재생하면 앱이 강제종료된다는 거였는데, 로그를 찾아보니 RLMException 때문에 죽고 있었다. 클립을 다 재생하면 위젯 데이터를 업데이트하는 함수를 호출하게 되어 있는데, 오프라인 모드일 때는 Realm에서 값을 읽어오는 작업을 한다. 여기서 exception이 일어났다. 원인 이 에러는 보통 Realm 객체를 생성한 스레드와 Realm에 접근하는 스레드가 다르기 때문에 발생한다. Realm은 thread-c..