# 핫딜 알람 (HotDeal Alarm) Android 핫딜 모니터링 앱 - 뽐뿌, 클리앙, 루리웹, 쿨엔조이의 핫딜을 실시간으로 수집하고 키워드 알림을 제공합니다. ## 지원 사이트 | 사이트 | 게시판 | 색상 | |--------|--------|------| | **뽐뿌** | 뽐뿌게시판, 해외뽐뿌, 알리뽐뿌, 재태크포럼 | 핑크 | | **클리앙** | 사고팔고, 알뜰구매 | 초록 | | **루리웹** | 핫딜/예판 유저, 핫딜/예판 업체 | 파랑 | | **쿨엔조이** | 알뜰구매 | 주황 | ## 주요 기능 ### 🔍 핫딜 수집 - 4개 사이트 동시 모니터링 - 각 사이트별 최대 20개씩 수집 - 사이트별 색상 구분 (뱃지) - 게시판 표시 이름 (예: ppomppu8 → 알리뽐뿌) ### 🔔 알림 시스템 - 키워드 기반 필터링 - 키워드 매칭 시 즉시 알림 - 일반 핫딜도 알림 제공 - 알림 ON/OFF 설정 가능 ### 🎨 UI/UX - Material Design 3 - 사이트 필터 (전체/개별 사이트) - 제목 검색 기능 - 다크 모드 지원 - 로딩 스켈레톤 - 애니메이션 효과 ### ⚙️ 설정 - 사이트/게시판 ON/OFF - 키워드 추가/삭제 - 폴링 주기 설정 - 알림 설정 ## 기술 스택 | 분야 | 기술 | |------|------| | **언어** | Kotlin 1.9.22 | | **UI** | Jetpack Compose | | **아키텍처** | MVVM + Clean Architecture | | **DI** | Hilt | | **DB** | Room 2.6.1 | | **백그라운드** | WorkManager 2.9.0 | | **네트워크** | Jsoup 1.17.2 | | **비동기** | Coroutines + Flow | ## 프로젝트 구조 ``` com.hotdeal.alarm/ ├── data/ │ ├── local/db/ # Room (Entity, DAO, Database) │ ├── remote/scraper/ # 사이트별 스크래퍼 │ └── remote/interceptor/# OkHttp 인터셉터 ├── domain/ │ └── model/ # HotDeal, SiteType, Keyword 등 ├── presentation/ │ ├── main/ # 메인 화면, ViewModel │ ├── deallist/ # 핫딜 목록, 필터 │ ├── settings/ # 설정 화면 │ └── components/ # DealItem, EmptyState 등 ├── worker/ # HotDealPollingWorker ├── service/ # NotificationService └── di/ # Hilt 모듈 ``` ## 빌드 방법 ### 요구사항 - Android Studio Hedgehog+ - JDK 17 - Android SDK 35 ### Debug APK ```bash ./gradlew assembleDebug ``` ### Release APK ```bash ./gradlew assembleRelease ``` ### 설치 (Windows ADB) ```bash /mnt/c/Users/$USER/AppData/Local/Android/Sdk/platform-tools/adb.exe \ install app/build/outputs/apk/debug/app-debug.apk ``` ## 안티 차단 (Anti-Bot) - **요청 간격**: 2~4초 랜덤 대기 - **User-Agent 회전**: 5개 브라우저 랜덤 선택 - **Referer 헤더**: 각 사이트별 적절한 Referer 설정 - **독립적 실행**: 한 사이트 실패필도 나머지 정상 작동 ## 권한 | 권한 | 용도 | |------|------| | `INTERNET` | 웹 스크래핑 | | `POST_NOTIFICATIONS` | 알림 표시 (Android 13+) | | `RECEIVE_BOOT_COMPLETED` | 부팅 시 자동 시작 | | `FOREGROUND_SERVICE` | 백그라운드 작업 | ## 테스트 ```bash # Unit Test ./gradlew test # UI Test ./gradlew connectedAndroidTest ``` ## 라이선스 MIT License