시스템 아키텍처
마진킹 데이터 파이프라인은 수집기(collectors) → 저장소(Redis/RDS) → data-api → 소비자(프론트/알람) 구조입니다.
전체 구성도
| 레이어 | 역할 |
|---|---|
| 수집기 | 모듈별 컨테이너. 외부 소스를 폴링/WS 구독 → 정규화 → 저장소 적재 |
| Redis (lcache) | 시세/온체인/테마 등 휘발성·고빈도 데이터. 키별 JSON |
| RDS (marginking-db) | 뉴스·경제캘린더·코인마켓 등 영속 데이터 |
| RDS (whale) | 고래 체결/청산 (유일한 MySQL 적재 수집기) |
| data-api | Kotlin/WebFlux 읽기 전용 API. Redis/RDS 조회 → JSON envelope |
| 소비자 | 프론트엔드, 알람 수집기 |
저장소 선택 기준
coinglass 복호화 흐름
coinglass 데이터는 암호화 응답이라 자체 디코더(libs/coinglass)로 처리합니다.
liqMap 특이사항
coinglass index/5/liqMap 은 요청 IP 로 게이팅 + accessToken 을 로그인 IP 에 바인딩합니다. 플래그된 IP 는 40000 거부 → 로그인·요청을 상용 SOCKS(허용 IP) 로 보내고 복호화만 로컬에서 수행합니다. 나머지 coinglass 엔드포인트는 direct(+내장 재시도)로 동작.
로컬 개발 (터널)
수집기는 로컬 도커로도 구동합니다. 사설망 리소스는 호스트 터널을 경유합니다.
관측성 (Sentry)
모든 모듈 index.mjs 가 initSentry() + uncaughtException/unhandledRejection 핸들러를 등록하고, 콜렉터는 실패 시 reportError()(= GlitchTip captureException)로 보고합니다. DB/redis/coinglass/WS 레이어도 캡처. → 수집 실패는 전부 GlitchTip 으로 발송.