Skip to content

umnipotent/bizarre

Repository files navigation

Bizarre

한국투자증권 Open API를 통해 계좌의 자산 현황을 주기적으로 조회하고 디스코드 웹훅으로 전송하는 자동화 도구.

Node Version Package Manager Tests Status

TypeScript Node.js SQLite PM2 Discord

주요 기능

  • 다중 계정 관리: 최대 4개의 한국투자증권 계정 등록 및 동적 활성화 지원.
  • 토큰 자동 갱신: SQLite 데이터베이스를 연동하여 만료 마진 내의 액세스 토큰 자동 재사용 및 갱신 기능 제공.
  • 자산 현황 요약 보고: 매입금액합계, 순자산총금액, 예수금액 등 25개의 전체 자산 정보 중 0원이 아닌 항목을 선별해 마크다운 형태로 디스코드 전송.
  • PM2 크론 스케줄링: 15분 주기로 백그라운드 자동 기동 및 자산 보고 수행.

시스템 아키텍처

의존성 규칙이 중심부인 Domain을 향하도록 설계된 클린 아키텍처 구조임.

graph TD
    subgraph Presentation [Presentation Layer]
        CLI[issue-token, report-balance]
    end
    subgraph Application [Application Layer]
        IT[IssueTokens]
        RAB[ReportAccountBalance]
        TP[TokenProvider]
    end
    subgraph Domain [Domain Layer]
        T[Token Interfaces]
        AB[AccountBalance Interfaces]
        N[Notifier Interface]
    end
    subgraph Infrastructure [Infrastructure Layer]
        HTI[HantuTokenIssuer]
        HABL[HantuAccountBalanceLoader]
        STR[SqliteTokenRepository]
        DN[DiscordNotifier]
    end

    CLI --> IT
    CLI --> RAB
    CLI --> TP

    IT --> T
    RAB --> AB
    RAB --> N
    RAB --> TP
    TP --> T

    HTI -.->|implements| T
    HABL -.->|implements| AB
    STR -.->|implements| T
    DN -.->|implements| N
Loading

디렉터리 구조

  • src/domain/: 핵심 비즈니스 모델 및 인터페이스 (토큰, 자산 정보, 알림 등)
  • src/application/: 토큰 발급, 자산 조회 및 보고 유스케이스 서비스
  • src/infrastructure/: SQLite DB 연동, 한투 API 통신, 디스코드 웹훅 전송 및 환경 설정
  • src/presentation/: 토큰 발급 및 자산 보고 실행을 위한 CLI 엔트리포인트

실행 방법

환경 변수 설정

.env 파일에 다음 항목을 작성함.

  • WEBHOOK_ID: 디스코드 웹훅 ID
  • WEBHOOK_TOKEN: 디스코드 웹훅 토큰
  • HANTU_XX_NO: 계정 번호 (XX = 01 ~ 04)
  • HANTU_XX_AK: 한국투자증권 App Key (XX = 01 ~ 04)
  • HANTU_XX_SK: 한국투자증권 App Secret (XX = 01 ~ 04)

의존성 설치

pnpm install

토큰 발급 및 갱신

pnpm token

백그라운드 크론 구동 (PM2)

pnpm start       # 프로덕션 서비스 기동 (15분 주기, 영업일 08:30 - 16:30만 발송)
pnpm start:dev   # 개발용 서비스 기동 (5분 주기, 시간 제한 없이 항상 발송)
pnpm stop        # PM2 서비스 중지
pnpm logs        # 서비스 실행 로그 tailing

유닛 테스트

의존성 없이 Node.js 내장 test runner와 assertion을 사용해 검증함.

pnpm test

라이선스

  • MIT License 적용. 자유로운 이용 및 수정 가능.