김치 프리미엄 알리미 봇 & 웹 서비스
바로가기
소개
이 프로젝트는 실시간으로 USDT, USD 가격 정보를 가져와 김치 프리미엄을 계산하고, 이를 사용자에게 보여주는 텔레그램 봇 및 웹 서비스입니다. 사용자는 봇을 통해 실시간 가격 정보를 확인하고, 특정 가격 변동에 대한 알림을 설정할 수 있습니다. 웹 서비스는 현재 가격 정보와 함께 시각적인 인터페이스를 제공합니다.
기능
텔레그램 봇 기능
/start
: 봇 시작 및 사용 안내 메시지 출력/show
: 실시간 USDT, USD 가격 정보 및 김치 프리미엄 표시/event
: USDT, USD, 김프(김치 프리미엄) 알림 설정 메뉴 제공- USDT 알림: 특정 USDT 가격 이상/이하 시 알림 설정
- USD 알림: 특정 USD 가격 이상/이하 시 알림 설정
- 김프 알림: 특정 김프 이상/이하 시 알림 설정
/list
: 설정된 알림 목록 표시 및 삭제 기능 제공/web
: 웹 서비스 링크 제공 및 버튼 생성- 실시간 알림: 설정된 가격 조건에 부합하는 경우 3시간 간격으로 텔레그램 메시지 발송
웹 서비스 기능
- 실시간 USDT/USD 가격 정보 및 김치 프리미엄 표시
- 전일 최고/최저 가격 정보 제공
- 5초마다 자동으로 최신 정보 갱신
기술 스택
- Backend: Kotlin, Spring Boot
- Database: SQLite
- Telegram Bot: KT-GRAM (Kotlin Telegram Bot Framework)
- Frontend: HTML, CSS, Tailwind CSS
- REST Client: Spring RestClient
- Scheduling: Spring Scheduling
프로젝트 구조
├── src
│ ├── main
│ │ ├── kotlin
│ │ │ └── lahuman
│ │ │ └── kimpre
│ │ │ ├── bot
│ │ │ │ └── BotComponent.kt (텔레그램 봇 로직)
│ │ │ ├── config
│ │ │ │ ├── BotConfig.kt (텔레그램 봇 설정)
│ │ │ │ └── RestClientConfig.kt (Rest Client 설정)
│ │ │ ├── controller
│ │ │ │ └── PriceController.kt (가격 정보 API)
│ │ │ ├── dto
│ │ │ │ ├── BithumbMarketResponse.kt (빗썸 API 응답 DTO)
│ │ │ │ ├── NaverExchangeRate4USDResponse.kt (네이버 환율 API 응답 DTO)
│ │ │ │ ├── RequestPriceHistory.kt (가격 이력 저장 요청 DTO)
│ │ │ │ ├── RequestPriceInfo.kt (가격 정보 요청 DTO)
│ │ │ │ └── ResponsePriceInfo.kt (가격 정보 응답 DTO)
│ │ │ ├── entity
│ │ │ │ ├── BaseTimeEntity.kt (생성/수정 시간 추상 엔티티)
│ │ │ │ ├── HistoryPk.kt (가격 이력 복합 키)
│ │ │ │ ├── PriceHistory.kt (가격 이력 엔티티)
│ │ │ │ ├── PriceInfo.kt (가격 정보 엔티티)
│ │ │ │ ├── PricePk.kt (가격 정보 복합 키)
│ │ │ │ └── TelegramAlarm.kt (텔레그램 알림 엔티티)
│ │ │ ├── repository
│ │ │ │ ├── PriceHistoryRepository.kt (가격 이력 레포지토리)
│ │ │ │ ├── PriceInfoRepository.kt (가격 정보 레포지토리)
│ │ │ │ └── TelegramAlarmRepository.kt (텔레그램 알림 레포지토리)
│ │ │ ├── schedule
│ │ │ │ └── PriceCrawling.kt (가격 정보 크롤링 및 알림 스케줄러)
│ │ │ ├── service
│ │ │ │ ├── PriceService.kt (가격 정보 서비스)
│ │ │ │ └── TelegramAlarmService.kt (텔레그램 알림 서비스)
│ │ │ └── utils
│ │ │ ├── DateUtils.kt (날짜 유틸리티)
│ │ │ └── UseYn.kt (사용 여부 Enum)
│ │ ├── resources
│ │ │ ├── application.yaml (Spring Boot 설정 파일)
│ │ │ └── static
│ │ │ ├── index.html (웹 서비스 HTML 파일)
│ │ │ └── tm.png (텔레그램 봇 QR 코드 이미지)
│ ├── test
│ │ └── kotlin
│ │ └── lahuman
│ │ └── kimpre
│ │ └── KimchiPremiumApplicationTests.kt (테스트 클래스)
실행 방법
- 프로젝트를 로컬로 클론합니다.
src/main/resources/application.yaml
파일에서 데이터베이스 설정 및 텔레그램 봇 토큰을 확인합니다.- IntelliJ IDEA와 같은 IDE를 사용하여 프로젝트를 실행하거나, Gradle을 사용하여 빌드하고 실행합니다.
./gradlew bootRun
- 텔레그램 봇을 시작하고
/start
명령어를 입력하여 봇을 사용할 수 있습니다. - 웹 브라우저에서
http://localhost:8080
주소를 입력하여 웹 서비스에 접속합니다.
추가 정보
- 외부 API:
- Bithumb API: 실시간 USDT 가격 정보 제공
- Naver API: 실시간 USD 환율 정보 제공
- 데이터베이스: SQLite를 사용하여 가격 정보 및 알림 설정 저장
- 스케줄링: Spring Scheduling을 사용하여 5초마다 가격 정보 크롤링 및 알림 전송
- 테스트: JUnit을 사용하여 기본적인 테스트 코드 작성
개선 사항
- 데이터베이스에 사용자 알림 저장 및 관리
- 다양한 코인 가격 지원
- 웹 서비스 디자인 개선
- 테스트 코드 확장