• Home
  • About
    • lahuman photo

      lahuman

      열심히 사는 아저씨

    • Learn More
    • Facebook
    • LinkedIn
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

김프봇 제작하기

30 Jan 2025

Reading time ~3 minutes

김치 프리미엄 알리미 봇 & 웹 서비스

바로가기

소개

이 프로젝트는 실시간으로 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 (테스트 클래스)

실행 방법

  1. 프로젝트를 로컬로 클론합니다.
  2. src/main/resources/application.yaml 파일에서 데이터베이스 설정 및 텔레그램 봇 토큰을 확인합니다.
  3. IntelliJ IDEA와 같은 IDE를 사용하여 프로젝트를 실행하거나, Gradle을 사용하여 빌드하고 실행합니다.
    • ./gradlew bootRun
  4. 텔레그램 봇을 시작하고 /start 명령어를 입력하여 봇을 사용할 수 있습니다.
  5. 웹 브라우저에서 http://localhost:8080 주소를 입력하여 웹 서비스에 접속합니다.

추가 정보

  • 외부 API:
    • Bithumb API: 실시간 USDT 가격 정보 제공
    • Naver API: 실시간 USD 환율 정보 제공
  • 데이터베이스: SQLite를 사용하여 가격 정보 및 알림 설정 저장
  • 스케줄링: Spring Scheduling을 사용하여 5초마다 가격 정보 크롤링 및 알림 전송
  • 테스트: JUnit을 사용하여 기본적인 테스트 코드 작성

개선 사항

  • 데이터베이스에 사용자 알림 저장 및 관리
  • 다양한 코인 가격 지원
  • 웹 서비스 디자인 개선
  • 테스트 코드 확장


usdtusdkimp Share Tweet +1