전체 글
-
Enterprise Integration Patterns: 메시징 시스템의 설계 원칙Knowledge Base/Foundations 2025. 12. 21. 10:06
원문: Enterprise Integration Patterns - Gregor Hohpe, Bobby Woolf (2003)들어가며2003년에 출간된 이 책은 메시징 기반 시스템 통합 기반이 수록되어 있다.20년이 지난 지금도 RabbitMQ, Kafka, AWS SQS/SNS 등 모든 현대 메시징 시스템의 설계에 영향을 미치고 있다.이 책이 중요한 이유는 65개의 패턴을 정의하여 메시징 설계에 대한 공통 언어를 제공했기 때문이다."Dead Letter Queue", "Pub/Sub", "Competing Consumers" 같은 용어들이 바로 이 책에서 나왔다.모든 패턴을 다 알 필요는 없다. 실무에서 가장 자주 마주치는 핵심 패턴들을 중심으로 살펴보자.특수한 경우일 수 있지만, 만 0개월차부터 일부..
-
Uber DOMA: 마이크로서비스 관리 방법론Knowledge Base/Foundations 2025. 12. 21. 08:58
원문: Introducing Domain-Oriented Microservice Architecture - Uber Engineering (2020)들어가며2018에서 2020년, Uber는 2,200개 이상의 마이크로서비스를 운영하고 있었다. 그리고 위 포스팅에서 그 혼란과 해결책을 공유했다.마이크로서비스는 모놀리스의 문제를 해결하기 위해 도입됐지만, 규모가 커지면서 새로운 종류의 복잡성을 만들어냈다.Uber의 DOMA(Domain-Oriented Microservice Architecture)는 이 복잡성을 관리하기 위한 아키텍처 원칙이다.DOMA는 마이크로서비스를 부정하는 게 아닌 마이크로서비스를 조직화하는 방법론이다.Uber의 여정: 모놀리스에서 카오스까지2012년: 모놀리스 시절Uber는 단일 ..
-
Event Sourcing: 상태(state)에서 이벤트로Knowledge Base/Foundations 2025. 12. 21. 08:49
원문: Event Sourcing - Martin Fowler들어가며 우리가 만드는 대부분의 애플리케이션은 현재 상태(state)를 저장한다.사용자의 잔액이 10만원이면, 데이터베이스에 balance = 100000이라고 저장한다. 간단하고 직관적이다.하지만 이 방식에는 한계가 있다: "왜 잔액이 10만원인가?"라는 질문에 답할 수 없다.처음에 50만원이 있었는데 40만원을 출금해서? 아니면 0원에서 10만원을 입금해서? 알 수 없다.Event Sourcing은 이 문제를 해결하는 패턴이다. 현재 상태 대신 상태를 변경한 모든 이벤트를 저장한다.그러면 "왜?"라는 질문에 언제든 답할 수 있다.핵심 아이디어상태가 아닌 이벤트를 저장일반적인 CRUD 방식과 Event Sourcing의 차이를 은행 계좌로 비..
-
The Log: 분산 시스템을 이해하는 가장 중요한 개념Knowledge Base/Foundations 2025. 12. 21. 08:46
원문: The Log: What every software engineer should know about real-time data's unifying abstraction - Jay Kreps (LinkedIn Engineering, 2013) 들어가며 2013년, LinkedIn의 엔지니어 Jay Kreps가 작성한 이 글은 분산 시스템을 이해하는 데 있어 주요 아이디어로 꼽힌다.Jay Kreps는 이후 Apache Kafka를 만들고 Confluent를 창업한 인물로, 이 글에서 그가 설명하는 "로그"의 개념은 Kafka의 핵심 설계 철학이 되었다."로그(Log)"라고 하면 대부분 애플리케이션 로그(console.log, logger.info)를 떠올리지만, 이 글에서 말하는 로그는 데이터 구조로..
-
이코에코(Eco²) MQ 도입 전, 코드 품질 개선: Chat API 리팩토링이코에코(Eco²) 2025. 12. 21. 08:31
Chat API는 재활용 분리배출 관련 질문에 답변하는 AI 어시스턴트 서비스입니다.사용자가 텍스트 질문 또는 이미지를 보내면 GPT 기반 파이프라인이 분류 → 규칙 매칭 → 답변 생성 과정을 거쳐 자연어 응답을 반환합니다.Chat API 시퀀스 다이어그램리팩토링 전 문제점Dead Code: 미사용 모듈 (core/answer.py, core/redis.py, services/session_store.py)테스트 부재: 단위 테스트 0개, 커버리지 측정 불가메트릭 미비: Prometheus 커스텀 메트릭 없음에러 핸들링: 일반 Exception만 사용, 폴백 로직 불명확하드코딩: CORS origins, 메시지 상수가 코드에 직접 기입타입 힌트 부족: FastAPI 의존성 주입 패턴 미적용1차 개선 (D..
-
이코에코(Eco²) MQ 도입 전, 코드 품질 개선: My API 리팩토링이코에코(Eco²) 2025. 12. 20. 12:58
My API는 사용자 프로필과 보유한 캐릭터 인벤토리를 관리하는 서비스입니다.Character 도메인에서 gRPC로 캐릭터 지급 요청을 받아 처리합니다.도메인 간 통신 흐름 (/user/me/charcter)리팩토링 전 문제점Race Condition: gRPC GrantCharacter에서 SELECT→INSERT 패턴gRPC 설정 하드코딩: os.getenv 직접 사용테스트 부족: placeholder 테스트 1개만 존재리소스 누수 가능성: gRPC 채널 close 미보장실제 가치 있는 개선항목판정이유Race Condition✅ 필수Character→My gRPC 호출은 빈번, 동시성 이슈 가능테스트 추가✅ 필수핵심 비즈니스 로직 검증 필요과잉 엔지니어링 주의항목판정이유Circuit Breaker⚠️..
-
이코에코(Eco²) MQ 도입 전, 코드 품질 개선: Character API 리팩토링이코에코(Eco²) 2025. 12. 20. 11:08
Character API는 재활용 스캔 리워드 시스템의 핵심 서비스입니다.사용자가 재활용품을 스캔하면 해당 분류에 맞는 캐릭터를 리워드로 지급합니다.캐릭터를 결과와 매칭, 지급, 관리, 기록하는 도메인이며 Scan(폐기물 이미지 분석), My(유저 정보)와 연동됩니다.Character API에서 진행한 품질 개선 기준과 절차를 전 도메인에 적용합니다. (ext-authz[Go] 제외, 점검 결과 코드 품질 우수)리워드 지급 흐름 리팩토링 전 문제점Race Condition: 동시 요청 시 중복 캐릭터 지급Dead Code: 미사용 메서드 및 예외 핸들러하드코딩: 일부 설정값이 코드에 직접 기입테스트 부족: 단위 테스트 미비Observability 부재: gRPC 분산 추적 미지원1차 개선 (P0-P5)우..
-
이코에코(Eco²) 백엔드/인프라 코드 품질 분석기 도입이코에코(Eco²) 2025. 12. 20. 10:59
코드 품질을 객관적으로 측정하고 지속적으로 모니터링하기 위해 자동 정적 분석 도구들을 도입했습니다.LLM이 생성하는 코드의 품질을 검수하기 위한 핵심 지표로 활용됩니다.주요 지표인 단위 테스트 커버리지는 80%+를 준수하도록 가이드라인을 설정했습니다. 도구 선정 기준기준설명비용무료 또는 오픈소스 Public repo 무료Python 지원Python 3.11 호환CI 연동GitHub Actions 통합 가능선언적 설정코드베이스에서 설정 관리도입 도구도구용도비용RadonCyclomatic Complexity, Maintainability Index무료 (로컬 CLI)SonarCloud종합 코드 품질, 보안 취약점Public repo 무료Radon 설정 및 사용설치pip install radon설정 (pypr..