로컬DB 라이브러리 변경

정규상·2023년 11월 21일
0

고민의 흔적

목록 보기
4/4

현재 react-native-async-storage와 react-native-encrypted-storage 사용중

원인불명으로 3~7일 사이에 저장소 데이터 유실

트레이드오프
1. 버그 발생 기간이 명확하여 트러블슈팅을 하기에 너무 오랜기간 소요됨
2. 라이브 서비스에서 버그 발생 (최대한 빠르게 해결)

해결책
라이브러리 변경 시도
react-native-mmkv로 라이브러리 변경 + 리팩토링

Asyncstorage -> mmkv 리팩토링

///

왜 하게 되었는가
1. 2주 스프린트하는데 1주차에 2주차까지 끝내버림
2. 기존 자산에서 Portfolio 데이터가 간헐적으로 유실되는 현상 있었음(3일~7일)
현상이 일어나는 이유 불분명 -> 트러블슈팅 하는데 너무 오랜시간이 걸림
3. 마침 자산을 개발할 당시 짠 로직에 불만이 많았던 상태였고 리팩토링을 하기로함
대부분 db에 접근하는 코드와 비지니스 로직이 같이 존재해 가독성이 매우 낮아 건들기 쉽지 않았음
4. 어떤데이터는 asyncstorage에 저장, 특정 데이터는 encrypted storage에 저장하기 때문에 모든 쿼리마다 RQ 훅을 따로 만들고 있었음(암호화 로직 제외 동일)
5. 효율적인 관리를 위해 다양한 패턴을 찾던 중 레포지토리 패턴이 적합하다고 생각해 사용하기로함

적합하다고 생각한 이유
프론트엔드에서 로컬DB사용시 레포지토리패턴 사용 이유
1. 유닛테스트코드 작성 간편해짐
2. 비지니스 로직, 책임분리
3. 라이브러리 교체 간편화
4. 범용적 재사용성 증가

의존성의 역전이 필요한 이유

  1. 결합을 줄이고 변경의 이유를 줄이고 유지보수성을 좋게 한다

tsyringe 사용

https://velog.io/@jojo_devstory/DIDependency-Injection%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

Storage -> repository -> Service 순으로 추상화

고려해야할 부분
기존 async-storage에 UserInfo 저장된 유저들 앱 업데이트 시 오류 발생

앱 최초 실행 시 모달에서 로그아웃 후 재 로그인 유도

기존 async-storage에 Portfolio 연동 되어있는 유저들 연동정보 유실

자산 최초 진입 시 모달에서 재 연동 유도

profile
이것 저것 다해보는 삶

0개의 댓글