전체 글
-
이코에코(Eco²) Message Queue #1: MQ 적용 가능 영역 도출이코에코(Eco²)/Message Queue 2025. 12. 21. 22:52
개요RabbitMQ + Celery 아키텍처 설계에서는 Chat/Scan API의 AI 파이프라인을 비동기로 전환하는 계획을 수립했다. 그러나 MQ 도입의 효과는 AI 파이프라인에만 국한되지 않는다.본 글에서는 이코에코 백엔드 전체를 분석하여 RabbitMQ 적용으로 개선할 수 있는 영역을 도출하고, 우선순위를 정한다.분석 대상도메인역할현재 부하 특성chat폐기물 분류 챗봇GPT API 호출 (10~30초)scan이미지 스캔 + 리워드GPT API + gRPC 호출character캐릭터 발급 + 동기화DB + gRPC 호출image이미지 업로드S3 Presigned URLlocation위치 검색PostGIS 쿼리my사용자 프로필CRUDauth인증/인가Redis 블랙리스트ext-authzJWT 검증Redi..
-
이코에코(Eco²) Message Queue #0: RabbitMQ + Celery 아키텍처 설계이코에코(Eco²)/Message Queue 2025. 12. 21. 22:25
개요이코에코(Eco²) 백엔드는 현재 동기식 HTTP/gRPC 통신 기반으로 운영되고 있다. 7개 도메인 서비스(auth, character, chat, scan, my, location, image)가 Istio Service Mesh 위에서 동작하며, 분산 추적이 가능한 Observability 환경(EFK 로깅, Jaeger 트레이싱, Prometheus 메트릭)은 구축 완료된 상태다.그러나 AI 파이프라인의 동기 대기 구간에서 심각한 레이턴시 누적이 발생하고 있으며, 이는 사용자 경험과 시스템 확장성 모두에 악영향을 미친다. 본 글에서는 RabbitMQ + Celery 기반의 비동기 아키텍처 전환 계획을 수립하고, 다른 메시지 브로커(NATS, Kafka)와의 비교 분석을 통해 기술 선정 근거를 ..
-
Debezium Outbox Event Router: CDC 기반 이벤트 발행Knowledge Base/Foundations 2025. 12. 21. 19:12
원문: Reliable Microservices Data Exchange with the Outbox Pattern - Gunnar Morling (Red Hat, 2019)문서: Debezium Outbox Event Router들어가며Chris Richardson이 Transactional Outbox 패턴을 이론화했다면, Gunnar Morling은 이를 실제로 구현하는 방법을 제시했다.Red Hat의 Debezium 프로젝트를 통해 CDC(Change Data Capture) 기반의 해결책을 만들어냈다.이 문서는 Polling Publisher의 한계를 넘어, 데이터베이스의 트랜잭션 로그를 직접 활용하는 방법을 다룬다.Polling Publisher의 한계왜 CDC가 필요한가?┌──────────..
-
Transactional Outbox: 이중 쓰기 문제의 해결Knowledge Base/Foundations 2025. 12. 21. 19:08
원문: Transactional Outbox Pattern - Chris Richardson (microservices.io)참고: Microservices Patterns - Chris Richardson (Manning, 2018)참고: Designing Data-Intensive Applications - Martin Kleppmann (O'Reilly, 2017) 들어가며마이크로서비스 아키텍처에서 까다로운 문제 중 하나다. 데이터베이스 업데이트와 메시지 발행을 어떻게 원자적으로 처리할 것인가?Chris Richardson이 "Microservices Patterns"에서 공식화한 Transactional Outbox 패턴은 이 문제에 대한 우아한 해결책을 제시한다. 이 패턴은 Pat Helland..
-
SAGAS: 장기 실행 트랜잭션의 해법Knowledge Base/Foundations 2025. 12. 21. 19:04
원문: SAGAS - Hector Garcia-Molina, Kenneth Salem (ACM SIGMOD Record, December 1987)PDF: Direct Download 들어가며1987년, Princeton 대학의 Hector Garcia-Molina와 Kenneth Salem이 발표한 이 논문은 분산 시스템에서 장기 실행 트랜잭션을 처리하는 방법의 원형을 제시했다. 핵심 질문은 단순하다. 트랜잭션이 몇 시간 동안 실행된다면, 그 동안 데이터를 잠가둬야 할까?Long-Lived Transactions의 문제기존 트랜잭션의 한계전통적인 ACID 트랜잭션은 짧은 작업을 전제로 설계되었다:┌───────────────────────────────────────────────────────────..
-
Life Beyond Distributed Transactions: 분산 트랜잭션 없이 살아가기Knowledge Base/Foundations 2025. 12. 21. 18:58
원문: Life Beyond Distributed Transactions: An Apostate's Opinion - Pat Helland (CIDR 2007) 들어가며2007년, Microsoft의 아키텍트 Pat Helland는 분산 시스템 커뮤니티에 "배교자의 의견(An Apostate's Opinion)"이라는 제목의 논문을 발표했다. 그는 수십 년간 분산 트랜잭션의 주도자였지만, 이제 그것이 대규모 시스템에서는 불가능하다고 선언한 것이다.이 논문이 중요한 이유는 현대 마이크로서비스 아키텍처의 이론적 기반을 제공했기 때문이다. "왜 도메인 간 트랜잭션을 피해야 하는가?", "왜 Eventual Consistency를 받아들여야 하는가?"에 대한 근본적인 방향을 제시한다.분산 트랜잭션의 환상2PC의..
-
Domain-Driven Design: Aggregate와 트랜잭션 경계Knowledge Base/Foundations 2025. 12. 21. 18:53
원문: Domain-Driven Design: Tackling Complexity in the Heart of Software - Eric Evans (Addison-Wesley, 2003)참고: Implementing Domain-Driven Design - Vaughn Vernon (2013)들어가며2003년, Eric Evans가 발표한 Domain-Driven Design(DDD)은 소프트웨어 설계의 패러다임을 바꿨다.특히 Aggregate 개념은 마이크로서비스 아키텍처에서 트랜잭션 경계를 결정하는 핵심 원칙이 되었다.Pat Helland가 2007년 논문에서 말한 Entity는 Evans의 Aggregate와 유사한 개념이다.이 문서에서는 DDD의 핵심 개념과 분산 시스템에서의 적용을 다룬다.D..
-
CQRS: Command와 Query의 책임 분리Knowledge Base/Foundations 2025. 12. 21. 18:40
원문: CQRS - Martin Fowler (2011)들어가며2011년, Martin Fowler가 Greg Young의 아이디어를 정리하여 발표한 CQRS(Command Query Responsibility Segregation)는 읽기와 쓰기를 별도의 모델로 분리하는 패턴이다.흥미로운 점은 Fowler 본인이 이 글에서 CQRS의 위험성을 강하게 경고한다는 것이다. 그는 CQRS가 유용한 경우도 있지만, 대부분의 시스템에는 불필요한 복잡성을 추가한다고 강조한다."CQRS is a significant mental leap for all concerned, so shouldn't be tackled unless the benefit is worth the jump." 이 문서에서는 CQRS가 해결하는..