2026. 4. 19. 06:28ㆍAI Product Building/Lotto App
지난 포스팅에서 카메라를 통해 QR 코드를 순식간에 읽어오는 기능을 만들었습니다. 하지만 스캔한 직후에만 당첨 여부를 확인할 수 있고 기록이 남지 않는다면 사용자 입장에서 매우 불편하겠죠? 내가 이번 주에 어떤 번호를 스캔했는지, 지난달에는 얼마나 당첨되었는지 한눈에 관리할 수 있어야 진정한 '로또 관리 앱'이라고 할 수 있습니다. 이번 7편에서는 Flutter에서 가볍고 빠른 로컬 데이터베이스인 Hive를 사용하여 스캔 내역을 저장하고 관리하는 과정을 담아보았습니다.
1. 왜 SQLite가 아닌 Hive를 선택했나?
모바일 앱에서 데이터를 저장할 때 흔히 SQLite를 떠올리지만, 로또 데이터처럼 구조가 비교적 단순하고 빠른 읽기/쓰기가 필요한 경우에는 NoSQL 기반의 Hive가 훨씬 유리합니다. Hive는 Dart로 작성되어 별도의 네이티브 의존성이 적고, 성능 테스트 결과 SQLite보다 수배 이상 빠른 속도를 보여주었습니다. 특히 '바이브 로또'는 사용자가 QR을 찍는 순간 '찰나의 지연'도 없어야 하기에, 비동기 처리에 최적화된 Hive를 선택하여 데이터 모델(TypeAdapter)을 설계했습니다.
2. 로또 번호 저장을 위한 데이터 모델 설계
단순히 문자열로 저장하는 것이 아니라, 추후 통계 기능을 위해 회차, 스캔 일시, 선택 번호, 당첨 여부 등을 포함하는 객체 모델을 만들었습니다. @HiveType 어노테이션을 사용하여 코드를 생성하면, 복잡한 쿼리 없이도 객체를 통째로 DB에 넣고 뺄 수 있습니다. 아래는 실제 프로젝트에서 사용된 로또 내역 모델의 핵심 소스 코드입니다.
// 핵심 소스 코드: LottoHistory 모델 정의 (scan_history_model.dart)
import 'package:hive/hive.dart';
part 'scan_history_model.g.dart';
@HiveType(typeId: 0)
class LottoHistory extends HiveObject {
@HiveField(0)
final String round; // 회차
@HiveField(1)
final List<int> numbers; // 선택한 6개 번호
@HiveField(2)
final DateTime scanDate; // 스캔한 날짜
@HiveField(3)
bool isWin; // 당첨 여부
LottoHistory({
required this.round,
required this.numbers,
required this.scanDate,
this.isWin = false,
});
}
3. 중복 데이터 방지 및 리스트 UI 연동
사용자가 같은 복권을 실수로 두 번 스캔할 수도 있습니다. 이를 방지하기 위해 데이터를 저장하기 전, 고유 식별자(QR 코드의 특정 값)를 체크하여 이미 존재하는 내역인지 확인하는 로직을 추가했습니다. 또한 ValueListenableBuilder를 활용하여 DB에 새로운 데이터가 들어오자마자 화면이 자동으로 새로고침되도록 구현했습니다. 사용자는 별도의 새로고침 버튼을 누를 필요 없이 스캔 즉시 목록에 추가되는 것을 확인할 수 있습니다.
4. 데이터 관리의 핵심, 삭제 및 초기화 기능
데이터를 쌓는 것만큼 중요한 것이 정리하는 것입니다. '바이브 로또'는 사용자가 특정 내역을 옆으로 밀어(Swipe to Delete) 삭제하거나, 전체 초기화 기능을 통해 개인정보를 보호할 수 있도록 설계했습니다. Hive의 box.deleteAt(index) 함수를 사용하면 매우 직관적으로 특정 데이터를 삭제할 수 있습니다. 이러한 안정적인 데이터 관리 로직 덕분에 사용자는 앱을 믿고 자신의 소중한 복권 내역을 기록할 수 있게 되었습니다.
편리한 스캔 내역 관리, 지금 직접 경험해 보세요!
👉 바이브 로또(구 MyFeelLotto) 다운로드 바로가기이번 회차에서는 스캔한 로또 정보를 기기에 안전하게 담는 과정을 살펴보았습니다. 다음 8편에서는 "깜빡하고 안 산 로또가 1등이라면?"이라는 끔찍한 상상을 막아줄 로컬 알림 서비스(Notification) 구현기로 돌아오겠습니다. 매주 토요일 저녁, 놓치지 않게 알려주는 스마트한 기능 구현법을 기대해 주세요!
'AI Product Building > Lotto App' 카테고리의 다른 글
| '로또 사고 싶은날' 개발기 9편: 내 소중한 기록을 안전하게! 백업 및 복원 시스템 구축기 (0) | 2026.04.22 |
|---|---|
| '로또 사고 싶은날' 개발기 8편: 토요일 밤의 긴장감! 로컬 알림으로 당첨 확인 놓치지 않기 (0) | 2026.04.20 |
| '로또 사고 싶은날' 개발기 6편: 앱의 생명! 초고속 QR 코드 스캐너 기능 구현 (CameraX & ML Kit) (1) | 2026.04.17 |
| '로또 사고 싶은날' 개발기 5편: 동행복권 오픈 API 연동을 통한 실시간 당첨 결과 파싱하기 (0) | 2026.04.16 |
| '로또 사고 싶은날' 개발기 4편: 시선을 사로잡는 메인 화면 UI 및 로또 공 컴포넌트 디자인 (1) | 2026.04.15 |