billcorea.com
빌코리아의 홈페이지 입니다.
2026/05/17
오늘의 이야기
#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase
🎯 야 너 토요일마다 로또 확인하냐?
나도 맨날 “혹시나~” 하면서 봤거든 ㅋㅋ
근데 이제는 그냥 안 해
AI한테 맡겼어 🤖✨
그것도 구글 Gemini로다가!
그래서 앱 하나 만들었지
👉 “로또 예상번호 by Gemini” 🎱
AI가 분석해서 번호 딱! 뽑아줌
그냥 보고 참고만 하면 됨
재미로 해도 좋고…
혹시 모르는 거잖아? 😏
https://play.google.com/store/apps/details?id=com.billcorea.gptlotto1127
오늘의 이야기
#스하리1000명프로젝트
오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲
이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.
앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao
오늘의 이야기
#스하리1000명프로젝트,
가끔 외국인 노동자들과 대화가 힘들 때가 있죠?
도움이 되는 간단한 앱을 만들어 봤습니다! 당신은 당신의 언어로 글을 쓰고, 다른 사람들은 그것을 그들의 언어로 봅니다.
설정에 따라 자동 번역됩니다.
쉬운 채팅에 매우 편리합니다. 기회되면 꼭 보세요!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416
오늘의 이야기
#billcorea #운동동아리관리앱
🏸 Schneedle, a must-have app for badminton clubs!
👉 Match Play – Record Scores & Find Opponents 🎉
Perfect for anywhere, alone, with friends, or in a club! 🤝
If you like badminton, definitely try it
Go to app 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay
오늘의 이야기
**) 단계별 구현 로드맵 (MVP -> 확장)
Phase 1 - MVP (핵심 기능)
- Hilt/Room 기본 세팅
- Receipt Entity/DAO/Repository 구현
- 스캔 화면 + 코드값 저장
- 목록/상세/수정/삭제 (현재 상세는 Edit 화면 겸용)
- 기본 테스트(DAO + ViewModel)
Phase 2 - 사용자 경험 강화
- 검색/필터/정렬
- 영수증 이미지 첨부
- 스캔 실패/중복 처리 UX 개선
- DataStore 설정화
2-1) 검색/필터/정렬
세부 작업
-
ReceiptUiState에sort,filters상태(기간/금액/저장여부 등) 추가 -
ReceiptListScreen상단을 검색 + 필터 + 정렬 UI로 확장 -
ReceiptDao에 필터/정렬 쿼리 추가(또는 통합 쿼리 전략 적용) -
ReceiptRepository.observeReceipts(...)를 query + sort + filter 입력으로 확장 -
ReceiptViewModel에서 검색/필터/정렬을 단일 Flow 파이프라인으로 결합
완료 기준 (Acceptance Criteria)
- 검색어/필터/정렬 변경 시 목록이 즉시 반영된다
- 빈 결과/초기 상태/검색 결과 상태가 UI에서 구분된다
권장 테스트 포인트
- DAO 테스트: 정렬 우선순위 및 필터 조합 결과 검증
- ViewModel 테스트: query/sort/filter 변경 시 상태 전이 검증
2-2) 영수증 이미지 첨부
세부 작업
-
ReceiptEditScreen에 이미지 첨부/변경/삭제 액션 및 썸네일 추가 - ActivityResult 기반 이미지 선택 플로우 연결
-
imageUri저장/수정 경로를 Repository 저장 로직에 반영 - URI 접근 실패 시 플레이스홀더 + 재선택 안내 UI 제공
- 목록 카드에서 첨부 여부(썸네일/아이콘) 표시
완료 기준 (Acceptance Criteria)
- 이미지 첨부 후 저장 시 재진입해도 첨부 상태가 유지된다
- 잘못된 URI/권한 문제 시 크래시 없이 복구 안내가 표시된다
권장 테스트 포인트
- Repository 테스트:
imageUri저장/수정/삭제 검증 - UI 테스트: 첨부 전/후/삭제 상태 렌더링 검증
2-3) 스캔 실패/중복 처리 UX 개선
세부 작업
- 스캔 결과 모델을 성공/취소/실패/중복으로 구분
- 취소/실패(
raw없음) 시 사용자 피드백 + 재시도 액션 제공 - 중복 판단 기준 정의 및 DAO/Repository 중복 조회 API 추가
- 중복 시 기존 열기/신규 저장 선택 다이얼로그 제공
- 실패/중복 이벤트를
scan_history에 기록
완료 기준 (Acceptance Criteria)
- 취소/실패/중복 상황에서 다음 행동(재시도/이동) 안내가 제공된다
- 동일 코드 재스캔 시 중복 정책 분기가 일관되게 동작한다
권장 테스트 포인트
- Repository 테스트: 중복 판단 경계값 검증
- UI 테스트: 실패/중복 다이얼로그 표시 및 액션 검증
2-4) DataStore 설정화
세부 작업
- DataStore 의존성 추가 및 버전 카탈로그 반영
- 설정 모델(
SortOrder, 기본 필터, 스캔 옵션)과SettingsDataStore구현 - Hilt 모듈에 DataStore/Settings Repository 제공 추가
- ViewModel에서 DataStore Flow와 목록 Flow 결합
- 최소 UI(정렬/필터 선택)에서 설정 저장 연결
완료 기준 (Acceptance Criteria)
- 선택한 정렬/필터 기본값이 앱 재실행 후에도 유지된다
- 설정 변경 시 목록이 즉시 반영된다
권장 테스트 포인트
- DataStore 테스트: 기본값/쓰기/읽기/복원 검증
- ViewModel 테스트: 설정 Flow 반영으로 목록 상태 변경 검증
Phase 3 - 고도화 기능
- Kakao Map 연동(상세 -> 지도)
- In-app Update 적용
- 통계/리포트(월별 금액, 카테고리)
오늘의 이야기
#스하리1000명프로젝트,
Bị lạc ở Hàn Quốc? Ngay cả khi bạn không nói được tiếng Hàn, ứng dụng này vẫn giúp bạn đi lại dễ dàng.
Chỉ cần nói ngôn ngữ của bạn—nó sẽ dịch, tìm kiếm và hiển thị kết quả bằng ngôn ngữ của bạn.
Tuyệt vời cho du khách! Hỗ trợ hơn 10 ngôn ngữ bao gồm tiếng Anh, tiếng Nhật, tiếng Trung, tiếng Việt, v.v.
Hãy thử nó ngay bây giờ!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127
2026/05/16
오늘의 이야기
#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase
🎯 야 너 토요일마다 로또 확인하냐?
나도 맨날 “혹시나~” 하면서 봤거든 ㅋㅋ
근데 이제는 그냥 안 해
AI한테 맡겼어 🤖✨
그것도 구글 Gemini로다가!
그래서 앱 하나 만들었지
👉 “로또 예상번호 by Gemini” 🎱
AI가 분석해서 번호 딱! 뽑아줌
그냥 보고 참고만 하면 됨
재미로 해도 좋고…
혹시 모르는 거잖아? 😏
https://play.google.com/store/apps/details?id=com.billcorea.gptlotto1127
오늘의 이야기
#스하리1000명프로젝트
오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲
이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.
앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao
오늘의 이야기
#스하리1000명프로젝트,
Bazen yabancı işçilerle konuşmak zor oluyor, değil mi?
Yardımcı olacak basit bir uygulama yaptım! Siz kendi dilinizde yazarsınız ve başkaları da bunu kendi dillerinde görür.
Ayarlara göre otomatik çeviri yapar.
Kolay sohbetler için son derece kullanışlı. Fırsat bulduğunda bir göz at!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416
오늘의 이야기
#billcorea #운동동아리관리앱
🏸 Schneedle, badminton kulüplerinin olmazsa olmaz uygulaması!
👉 Maç Oyunu – Skorları Kaydedin ve Rakipleri Bulun 🎉
Tek başınıza, arkadaşlarınızla veya bir kulüpte her yerde mükemmel! 🤝
Badmintonu seviyorsanız mutlaka deneyin
Uygulamaya git 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay
오늘의 이야기
BarcodeVoucher0407 - Agent Draft
0) 문서 목적
이 문서는 BarcodeVoucher0407 프로젝트의 초기 개발 가이드입니다.
목표는 바코드/QR 기반 영수증 적립 및 조회 앱의 MVP를 빠르게 완성하고,
이후 지도/업데이트/고도화 기능으로 확장 가능한 구조를 만드는 것입니다.
1) 제품 목표 / 핵심 사용자 시나리오
제품 목표
- 사용자가 영수증의 바코드(또는 QR)를 스캔해 디지털로 보관
- 보관된 영수증을 목록/검색/필터로 빠르게 조회
- 매장 위치와 연계(카카오맵)해 사용처를 시각적으로 확인
- 안정적인 업데이트 전달(In-app Update)
핵심 사용자 시나리오
- 앱 실행 -> 스캔 버튼 탭
- 바코드/QR 스캔 -> 코드값 추출
- 영수증 메타정보(매장명, 금액, 일시, 카테고리, 메모 등) 입력/수정
- 저장 후 목록에서 확인
- 상세 화면에서 지도 위치 확인 및 메모 관리
2) 기술 스택 제안과 선택 이유
- Kotlin + Jetpack Compose: UI 생산성, 상태 기반 화면 구성
- Hilt: 의존성 주입 표준화, 테스트 용이성 향상
- Room: 오프라인 우선 로컬 저장, 구조화된 쿼리 지원
- Barcode/QR Scanner (ML Kit 또는 ZXing 계열): 빠른 스캔 구현
- Play Core In-app Update: 앱 내 업데이트 UX 개선
- Kakao Map API: 매장 위치/지도 시각화
- Coroutines + Flow: 비동기 처리, 반응형 데이터 스트림
- DataStore: 사용자 설정/간단 상태 영속화
3) 권장 프로젝트 구조
초기에는 단일 모듈(app)로 시작하고, 기능 확장 시 멀티모듈 전환을 권장합니다.
단일 모듈 패키지 구조(초기)
com.billcorea.barcodevoucher0407
core/(공통 유틸, Result, Dispatcher, Base)di/(Hilt Module)data/
local/(Room DB, DAO, Entity)remote/(향후 서버 연동 시)repository/(구현체)
domain/
model/repository/(인터페이스)usecase/
feature/
scan/receipt_list/receipt_detail/map/settings/
ui/(theme, common components)
멀티모듈 전환 후보(확장)
core-common,core-ui,data-local,feature-scan,feature-receipt,feature-map
4) 데이터 모델(Room) 초안
MVP 기준 최소 모델 + 확장 가능한 형태
Entity: Receipt
id: Long(PK, autoGenerate)barcodeRaw: String(원본 코드값, index)barcodeType: String(QR_CODE,EAN_13등)storeName: String?totalAmount: Long?currency: String?(예: KRW)purchasedAt: Long?(epoch millis)memo: String?imageUri: String?(선택: 영수증 사진)lat: Double?lng: Double?createdAt: LongupdatedAt: Long
Entity: ScanHistory
id: Long(PK)receiptId: Long?(FK)rawValue: Stringformat: StringscannedAt: LongisSaved: Boolean
DAO 예시
insertReceipt(receipt)updateReceipt(receipt)deleteReceipt(id)getReceiptById(id)observeReceipts()(Flow<List>)searchReceipts(query)
인덱스/제약
barcodeRaw,purchasedAt,storeName인덱스 권장ScanHistory.receiptIdFK + CASCADE
5) 화면/플로우 초안
주요 화면
- Splash/Init: 필수 권한/업데이트 체크
- Receipt List: 최근순 목록, 검색/필터
- Scan: 카메라 미리보기 + 스캔 가이드
- Receipt Edit/Detail: 저장/수정/삭제
- Map: 카카오맵 위치 확인
- Settings: 스캔 옵션, 테마, 정보
내비게이션
list -> scan -> edit -> detaildetail -> map
6) 아키텍처 가이드
- 패턴: MVVM + Repository + UseCase
- 상태:
UiState(Loading/Success/Error) + 단방향 데이터 흐름 - 비동기:
viewModelScope+Flow - DI: Hilt로
Database,Dao,Repository,UseCase주입 - 에러 정책: 도메인 에러 타입 분리(
Validation,Camera,Database,Map)
7) 단계별 구현 로드맵 (MVP -> 확장)
Phase 1 - MVP (핵심 기능)
- Hilt/Room 기본 세팅
- Receipt Entity/DAO/Repository 구현
- 스캔 화면 + 코드값 저장
- 목록/상세/수정/삭제
- 기본 테스트(DAO + ViewModel)
Phase 2 - 사용자 경험 강화
- 검색/필터/정렬
- 영수증 이미지 첨부
- 스캔 실패/중복 처리 UX 개선
- DataStore 설정화
Phase 3 - 고도화 기능
- Kakao Map 연동(상세 -> 지도)
- In-app Update 적용
- 통계/리포트(월별 금액, 카테고리)
8) 주요 리스크와 대응
- 스캔 인식률 문제: 가이드 오버레이, 재시도 UX, 라이브러리 A/B 검토
- 권한 거부 이슈: 권한 사전 안내 + 대체 흐름 제공
- 지도 API 키 관리:
local.properties/CI Secret 사용, 하드코딩 금지 - 업데이트 정책 충돌: immediate/flexible 전략 분리 및 QA 시나리오 확보
- 데이터 신뢰성: 트랜잭션/중복 체크/마이그레이션 테스트
9) 테스트 전략
- Unit Test: UseCase, ViewModel 상태 전이
- DAO Test: in-memory Room DB로 CRUD/검색 검증
- UI Test: 리스트/상세/스캔 진입 플로우
- 통합 점검: 업데이트 체크, 맵 진입, 권한 케이스
권장 기준:
- 핵심 도메인 로직 테스트 우선
- DB 스키마 변경 시 마이그레이션 테스트 필수
10) 초기 To-do 체크리스트
환경/의존성
- Hilt 관련 Gradle 플러그인 및 의존성 추가
- Room(KSP/KAPT 포함) 의존성 추가
- 스캔 라이브러리(ML Kit 또는 ZXing) 선택/적용
- In-app Update 의존성 추가
- Kakao Map SDK 의존성 및 키 설정
코드 베이스
-
Application+@HiltAndroidApp구성 -
AppDatabase, Entity, DAO 생성 - Repository + UseCase + ViewModel 연결
- Compose Navigation 그래프 구성
- 샘플 더미 데이터/프리뷰 작성
품질/운영
- 기본 테스트 템플릿 작성
- 에러 로깅/크래시 대응 정책 확정
- 릴리스 전 권한/업데이트/지도 QA 체크리스트 작성
부록: 구현 우선순위 제안 (짧게)
- Hilt + Room 기반 골격 완성
- 스캔 -> 저장 -> 목록/상세까지 E2E 연결
- 맵/업데이트 기능 순차 통합
- 테스트 보강 후 MVP 배포
피드 구독하기:
글 (Atom)
오늘의 이야기
#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase 🎯 야 너 토요일마다 로또 확인하냐? 나도 맨날 “혹시나~” 하면서 봤거든 ㅋㅋ 근데 이제는 그냥 안 해 AI한테 맡겼어 🤖✨ 그것도 구글 Gemini로다가! ...
-
이전 글에서 정리할 것처럼 java에서 kotlin으로 이전을 했습니다. 그러고 나서 보기 시작했는 데, DefaultSharedPrefernces의 사용할 수 없는 환경으로 변경이 된 것을 알게 되었습니다. 이전 prefs = Prefere...