monticker 설계와 구현 기록
시리즈

monticker 설계와 구현 기록

가격·거래량 변화를 이벤트로 기록하는 주식 관찰 앱 monticker의 설계 결정과 구현을 정리한 시리즈. 왜 이벤트 중심인지, 모듈식 모놀리스와 TimescaleDB를 고른 이유, EMA 기반 이상 탐지, 분산 추적과 서킷 브레이커, 그리고 실시간 시세 경로를 부하와 장애로 직접 재 본 실험까지 다룬다.

8편 - 이벤트 중심 시세 관찰 앱
설계

왜 이렇게 설계했는가

제품 철학과 아키텍처 결정. 이벤트 중심 도메인, 모듈식 모놀리스, 시계열 저장소 선택.

  1. 1
    가격이 아니라 이벤트를 팔자 — monticker 설계 철학 Product Design · Event Driven · stock
  2. 2
    모듈식 모놀리스를 선택한 이유 — MSA의 유혹을 거부하기 Architecture · modular-monolith · Spring Boot
  3. 3
    TimescaleDB를 시계열 DB로 고른 이유 — Hypertable과 연속 집계 timescaledb · PostgreSQL · Time Series
탐지

평소와 다른 움직임을 어떻게 알아채는가

고정 임계값 대신 지수이동평균으로 기준선을 갱신하는 이상 탐지.

  1. 7
    EMA 기반 이상 탐지 — 가격 급등과 거래량 서지 실시간 감지 ema · event-detection · anomaly
운영

관측성과 복원력

분산 추적으로 파이프라인 지연을 재고, 외부 API 장애를 서킷 브레이커로 격리한다.

  1. 21
    OpenTelemetry + Jaeger로 분산 추적 — 시세 파이프라인 지연 측정 OpenTelemetry · jaeger · tracing
  2. 22
    Circuit Breaker로 외부 API 장애 격리 — Resilience4j + KIS·Yahoo 폴백 체인 Circuit Breaker · resilience4j · fallback
실험

실시간 경로는 어디서 깨지는가

WebSocket과 폴링을 1만 클라이언트에서 재고, 파티션·컨슈머 격자에서 종목별 순서와 리밸런스·핫 종목의 대가를 잰 기록.

  1. 23
    WebSocket push와 REST polling을 클라이언트 1만 개에서 재다 — 지연과 서버 비용, Kafka 정지 45초, 느린 소비자 25개 WebSocket · STOMP · Polling
  2. 24
    market.ticks 파티션 × 컨슈머 격자 — 키가 같아도 순서가 깨진 이유, 크래시 하나가 시세 전체를 멈춘 이유, 파티션 이웃이 인질이 되는 순간 Kafka · Partitioning · Ordering