인프런 커뮤니티 질문&답변

GO님의 프로필 이미지
GO

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

Hive, Riverpop 제너레이터 호환성 문제

작성

·

349

0

안녕하세요 선생님 지난번 날씨앱에서 질문 드리고 중급강의 GoRouter 까지 무지성으로 따라가고있는 수강생입니다.

중급 캐시강의를 보다가 문득 든 생각이

서버에서 받아온 데이터를 Hive를 사용해서 기기에 저장을 하고 휴대폰 DB에 저장된 리스트들을

Hive에 데이터가 있다면 hive에서 읽고 없다면 새로받아오는 형식으로 Riverpod을 사용해 관리하면 어떨까? 싶은 생각이 들었습니다.

이유는 서버에서 restAPI를 통해 받아온 값들은 메모리에 저장되어있으니 앱을 껏다 키거나 메모리가 초기화되면 캐쉬가 날아가는 것이 아닌가? 라는 생각이 들어서였구요

(리스트나 자료들을 휴대폰 db에 저장 해놓고 꺼내쓴다면 재요청횟수가 줄어들어 비용절감이 되지 않을까? 싶은 생각)

 

그래서 당연히 생각만 가지고 있지 아직은 아무것도 할줄 모르지만 일단Hive와 Riverpod을 동시에 설치는 해보자는 생각에 인스톨 해봤는데요

문제는 hive_generator의 버전은 analyzer 5.0과 호환되고

riverpop_generator와 json_serializable 제너레이터들은 analyzer 6.0과 호환되어

한프로젝트에 동시설치가 불가능 한 것 같습니다.

analyzer6.0을 사용하는 다른 제너레이터들의 버전을 낮춰봐도 더 복잡하고 많은 에러가 뜨는데요.

 

1)그래서 캐쉬를 hive로 사용하는게 어떨까? 라는 생각이 맞는 생각인지? (예를들면 riverpod의 캐쉬를 사용하면 되는데 궂이 db를 캐쉬로 왜 사용하는가?)

2)유용한 생각이라면 analyzer버전 호환문제를 해결해서 동시에 사용할 수 있는 방법이 있는지?

3)동시 설치가 안된다면 hive외 대안이 있거나 sqflite 같은 다른sql이 대안이 되는지?

(hive를 캐쉬 대용으로 사용하려고한것은 hive의 빠른속도 때문인데, sqflite를 사용하게되면 궂이 물리적인 db캐쉬가 유효/유용 한건지?)

 

에 대한 의문이 들었습니다.

이런생각을 하는 이유는, 나중에 혼자 앱을 만들게 된다면 서버를 사용하는 것보다 파이어베이스 같은 클라우드 플랫폼을 사용하지 않을까 싶은 생각에서 트래픽을 줄일 수 있는 방법이 궁금해서 였습니다.

아직 멋모르고 강의 열심히 따라가는 중이라 급한내용은 아니니 시간 편하실때 천천히 답변주시면 감사하겠습니다.

 

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

하나씩 답변 드리겠습니다.

1)그래서 캐쉬를 hive로 사용하는게 어떨까? 라는 생각이 맞는 생각인지? (예를들면 riverpod의 캐쉬를 사용하면 되는데 궂이 db를 캐쉬로 왜 사용하는가?)

Hive로 캐싱을 하셔도 상관없고 흔히 사용되는 형태입니다. Riverpod으로 캐싱을 하면 휘발성이 높아집니다. 하지만 Hive는 보조기억장치에 저장되기 때문에 앱의 라이프 사이클이 끝나도 데이터를 유지 할 수 있습니다. 후자가 장점이 높다고 생각하면 사용하면 됩니다.

2)유용한 생각이라면 analyzer버전 호환문제를 해결해서 동시에 사용할 수 있는 방법이 있는지?

analyzer 호환은 잘 모르겠으나 만약에 절대 불가능하다면 generator를 사용하지 않는 것도 방법입니다. 대부분의 generator를 사용하는 플러그인들은 generator 없이 사용하는 방법도 제공합니다. (물론 json serializable처럼 애초에 generator를 사용하는게 목적인 플러그인은 제외입니다)

3)동시 설치가 안된다면 hive외 대안이 있거나 sqflite 같은 다른sql이 대안이 되는지?

1번과 마찬가지의 답변입니다. Hive vs sqflite는 단순히 속도 기준으로만 비교 할 수 없습니다. NoSQL과 SQL은 구조적 근본적인 차이가 있습니다. 속도의 측면에선 유즈케이스에 따라서 NoSQL이 빠른 경우가 있고 SQL이 빠른 경우도 있는데 Hive가 sqflite보다 빠른 이유는 사실 다른 곳에 있습니다. Hive는 데이터를 보조기억장치에 저장하긴 하지만 앱 실행시 모든 데이터를 메모리에 올린상태로 사용합니다. 사실상 인메모리 데이터베이스라 빠른겁니다.

캐싱은 빠른 속도를위해 사용하는게 맞습니다. 하지만 어떤 레이턴시를 줄이는게 목적인지를 정확히 인지하셔야 비교가 맞습니다. 일반적으로는 네트워크 레이턴시를 줄이기위해 사용하기 때문에 Hive와 sqflite의 퍼포먼스 차이에서 오는 속도 차이는 어느 하나를 고를 정도의 영향력이 있는 요소가 아니라고 생각합니다.

감사합니다!

GO님의 프로필 이미지
GO
질문자

답변 감사드립니다.

말씀을 들으니 hive를 사용한 캐쉬관리가 유효한 방법임을 인지했습니다.

아직 초보라 직접 구축해보기전엔 어떤방식이 맞는지 제가 구현이 가능할지 모르겠지만. 열심히 강의 따라가 보겠습니다! 감사합니다.!

GO님의 프로필 이미지
GO

작성한 질문수

질문하기