라벨이 Room인 게시물 표시

Android 관광 앱 즐겨찾기 · 최근 본 장소 로컬 저장소 분리 구현 (Room, DataStore 운영 팁)

관광 앱 서비스를 개발하고 운영하다 보면, 사용자가 마음에 드는 관광지를 저장하는 '즐겨찾기'와 방금 본 곳을 다시 찾는 '최근 본 장소' 기능은 거의 필수적으로 들어가게 됩니다. 저의 경우도 처음에는 구현이 만만해 보여서 SharedPreferences에 ID 목록 몇 개를 대충 밀어 넣는 방식으로 시작했습니다. 하지만 서비스를 이래저래 운영하다 보니 데이터가 꼬이거나 로컬 용량이 무제한으로 늘어나는 등 여러 한계에 부딪히게 되더군요. 자꾸 까먹기도 하고, 다음에 비슷한 기능을 설계할 때 바로 보고 따라 하려고 실무 관점에서 깔끔하게 정리해 둡니다. 운영하면서 겪기 쉬운 문제들 아무 생각 없이 그냥 설계하면 나중에 꼭 아래와 같은 버그나 운영상 이슈가 터집니다. 데이터 성격을 구분 안 함: 즐겨찾기(명시적 저장)와 최근 본 장소(자동 흔적)를 같은 테이블이나 방식으로 저장해서 삭제 정책이 꼬입니다. 원본 데이터 복사 저장: 장소 이름, 주소, 이미지 URL까지 로컬 DB에 통째로 복사해 두었다가, 나중에 공공데이터 원본이 갱신되어도 로컬에는 옛날 정보가 그대로 남아있는 현상이 생깁니다. 무제한 데이터 누적: 최근 본 장소의 개수 제한을 안 걸어두면 사용자 기기에 데이터가 끝도 없이 쌓여 앱이 무거워집니다. 개인정보 및 로그아웃 이슈: 로그아웃이나 회원 탈퇴를 했는데도 로컬에 사용자 흔적이 그대로 남아있거나, 위치 좌표나 방문 기록을 아무 고지 없이 저장해 보안 검수에 걸리기도 합니다. 핵심은 사용자의 행위 데이터(ID, 시간)와 공공데이터 원본 을 철저히 분리하는 것입니다. 구조 잡기: Room과 DataStore 역할 분담 둘 중 하나만 쓰려고 고집할 필요가 없습니다. 데이터의 형태에 따라 나누는 것이 훨씬 깔끔합니다. Room (로컬 DB): 즐겨찾기 목록, 최근 본 장소 목록처럼 여러 항목을 저장하고 정렬, 검색, 개수 제한(Limit) 등이 필요한 구조화된 리스트 데이터 에 사용합니다. DataStore: 마지막...