전체 글
-
Redis StreamsKnowledge Base/Foundations 2025. 12. 25. 22:30
Redis Streams는 로그 기반 데이터 구조로, Apache Kafka의 핵심 아이디어를Redis의 단순성과 결합한 메시지 브로커/이벤트 소싱 도구입니다.공식 자료Redis 공식 문서문서URL핵심 내용Introduction to Redis Streamsredis.io/docs/data-types/streamsStream 개념, 명령어 기초XADDredis.io/commands/xadd이벤트 발행, MAXLENXREADredis.io/commands/xread블로킹 읽기, 폴링XREADGROUPredis.io/commands/xreadgroupConsumer GroupXRANGEredis.io/commands/xrange범위 조회, 리플레이설계 원문자료저자URLStreams: A New General..
-
Server-Sent Events (SSE)Knowledge Base/Applied 2025. 12. 25. 22:28
SSE는 HTTP 기반의 단방향 서버→클라이언트 실시간 스트리밍 프로토콜입니다.WebSocket보다 단순하고, 실시간 진행 상황 전달에 적합합니다.공식 자료W3C/WHATWG 표준문서URL내용HTML Living Standard - Server-sent eventshtml.spec.whatwg.org공식 스펙EventSource APIMDN Web Docs클라이언트 APIHTTP 관련RFC제목관련 내용RFC 7230HTTP/1.1 Message SyntaxTransfer-Encoding: chunkedRFC 9110HTTP SemanticsContent-Type, Cache-Control프레임워크 문서프레임워크URL내용FastAPIfastapi.tiangolo.com/.../streamingStreami..
-
Distributed Tracing: Trace, Span으로 분산 시스템 추적하기Knowledge Base/Applied 2025. 12. 25. 22:22
참고: OpenTelemetry Documentation참고: W3C Trace Context들어가며분산 시스템에서 하나의 요청이 여러 서비스를 거쳐 처리된다.문제가 발생했을 때 "어디서 느려졌는지", "어디서 에러가 났는지" 찾기가 매우 어렵다.┌─────────────────────────────────────────────────────────────┐│ 분산 시스템 디버깅의 어려움 │├─────────────────────────────────────────────────────────────┤│ ││ 사용자 요청: "스캔 결과가 ..
-
Idempotent Consumer: 중복 메시지 처리 패턴Knowledge Base/Foundations 2025. 12. 25. 22:13
참고: Enterprise Integration Patterns - Gregor Hohpe참고: Microservices Patterns - Chris Richardson 분산 시스템에서 메시지는 정확히 한 번(Exactly-Once) 전달되기 어렵다.네트워크 장애, Consumer 재시작, Broker 장애 등으로 같은 메시지가 여러 번 전달(At-Least-Once)될 수 있다.┌─────────────────────────────────────────────────────────────┐│ 메시지 중복 전달 시나리오 │├─────────────────────────────────────────────────────────────┤│ ..
-
Celery: Python 분산 태스크 큐이코에코(Eco²)/Message Queue 2025. 12. 25. 22:06
원문: Celery Documentation저자: Ask Solem (2009~)들어가며 Celery는 Python으로 작성된 분산 태스크 큐 시스템이다. 2009년 Ask Solem이 Django 프로젝트의 비동기 작업 처리를 위해 개발했으며, 현재 Python 생태계에서 가장 널리 사용되는 비동기 작업 처리 라이브러리다. (이코에코에선 RabbitMQ, FastAPI와 함께 쓰였다.) Celery의 핵심 철학단순함: 복잡한 분산 시스템을 간단한 데코레이터로 추상화유연함: RabbitMQ, Redis 등 다양한 브로커 지원신뢰성: 재시도, DLQ, 모니터링 내장Celery 탄생 배경Django의 한계2009년, Django 웹 애플리케이션들은 심각한 문제에 직면했다:┌───────────────────..
-
AMQP와 RabbitMQ: 메시지 브로커의 표준Knowledge Base/Foundations 2025. 12. 25. 22:00
원문: AMQP 0-9-1 Specification (2006)RabbitMQ: RabbitMQ Documentation들어가며AMQP(Advanced Message Queuing Protocol)는 메시지 지향 미들웨어의 개방형 표준 프로토콜이다.2003년 JPMorgan Chase에서 시작되어 2006년에 AMQP 0-9-1로 표준화되었다.RabbitMQ는 AMQP 0-9-1의 가장 널리 사용되는 구현체로, Erlang으로 작성되어 높은 안정성과 분산 처리 능력을 제공한다.Kafka가 로그라면, RabbitMQ는 우체국에 가깝다.Kafka: 메시지를 로그처럼 영구 저장, Consumer가 원하는 위치에서 읽음RabbitMQ: 메시지를 큐에 저장, Consumer에게 전달 후 삭제AMQP 탄생 배경금융..
-
Gevent+Celery Event+SSE 50 VU 부하 테스트 병목 분석 레포트이코에코(Eco²) Context/Performance 2025. 12. 25. 21:51
테스트 일시: 2025-12-25 19:50 ~ 19:55 KST (약 5분)테스트 환경: k6 SSE Load Test, 50 VU엔드포인트: POST /api/v1/scan/classify/completion https://snapshots.raintank.io/dashboard/snapshot/7xvEQyVzhIXMUxMehz8nlP0jSJXlfrPq GrafanaIf you're seeing this Grafana has failed to load its application files 1. This could be caused by your reverse proxy settings. 2. If you host grafana under subpath make sure your grafana.ini..
-
이코에코(Eco²) Message Queue #13: Scan API 성능 측정 (SSE + Celery Chain + Gevent)이코에코(Eco²)/Message Queue 2025. 12. 25. 04:57
Celery Chain + Gevent Pool 기반 비동기 아키텍처 전환 후 실제 성능을 측정하고, HTTP 1.1 + gRPC + asyncio와 비교합니다.항목내용테스트 일시2025-12-25 02:16 ~ 04:35 (KST)테스트 도구k6 (JavaScript 기반 부하 테스트)대상 엔드포인트/api/v1/scan/classify/completion (SSE)모니터링Prometheus + Grafana (Scan SSE Pipeline 대시보드)1. 테스트 환경1.1 Queueing 아키텍처1.2 Worker 설정scan-workergevent1001~5character-match-workergevent501~4character-workergevent501~2my-workergevent501~2..