전체 글
-
Event Sourcing: 상태(state)에서 이벤트로이코에코(Eco²) 제작 문서 및 리포트/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: 분산 시스템을 이해하는 가장 중요한 개념이코에코(Eco²) 제작 문서 및 리포트/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..
-
[Dec.20.2025] 이코에코(Eco²) 백엔드/인프라 디자인 패턴이코에코(Eco²) 2025. 12. 20. 09:16
이코에코 프로젝트에 적용된 설계 패턴을 백엔드/인프라/Observability 레이어별로 정리합니다.핵심 아키텍처 패턴패턴레이어적용 위치핵심 역할Circuit BreakerBackenddomains/character/rpc/my_client.py외부 서비스 장애 시 fail-fast, 시스템 전체 안정성 보장StrategyBackenddomains/character/services/evaluators/리워드 평가 로직 확장성 (OCP 준수)Cache-Aside + Graceful DegradationBackenddomains/character/core/cache.py성능 최적화 + 장애 시에도 서비스 유지Ambassador (ext-authz)Infraworkloads/domains/ext-authz/A..
-
[Dec.19.2025] 이코에코(Eco2) 백엔드/인프라 오픈소스 사용 현황이코에코(Eco²) 2025. 12. 19. 16:24
📱 Application LayerPython Backend (FastAPI)패키지버전용도라이선스FastAPI0.109.0웹 프레임워크MITUvicorn0.27.0ASGI 서버BSD-3Pydantic2.5.3데이터 검증MITSQLAlchemy2.0.25ORMMITAlembic1.13.1DB 마이그레이션MITasyncpg0.29.0PostgreSQL 비동기 드라이버Apache-2.0psycopg2-binary2.9.9PostgreSQL 드라이버LGPLredis5.0.1Redis 클라이언트MIThttpx0.26.0HTTP 클라이언트BSD-3python-jose3.3.0JWT 처리MITpasslib1.7.4비밀번호 해싱BSDgrpcio1.68.1gRPC 클라이언트/서버Apache-2.0protobuf5.29..