전체 글
-
[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..
-
로깅 파이프라인 구축 및 Observability 통합을 마치고 잠시 잡담잡담 2025. 12. 19. 08:30
MQ 도입 전 Observability 증강을 마쳤다. 작업 기간이 짧아 무난했다고 생각할 순 있지만..이틀동안 LLM과 사전 조사, 데이터 분류, 정책 결정, trace.id 전파 방법, 통합 프로토콜 선정 기타 등등으로 소모한 토큰수가 압도적으로 많았다. 그만큼 일 진행이 정말 빨랐기 때문에 첫날하고 둘째날 쯤 시스템 디버깅하면서 로깅 정합성 맞출 땐 두통 오는 거 같더라.컨텍스트 압축이 잘되어서인지 이번엔 자동으로도 클러스터 디버깅이 잘된 파트가 꽤 됐다.보통 PR 작성은 작업 내용을 기반으로 LLM이 해주지만 latest 앱 파드의 Rolling Update는 수동으로 개입하는 구성이라서 직접하곤 했는데 이번엔 알아서 잘하더라. (gh cli로 commit[pre-commit hook] ->pus..
-
이코에코(Eco²) Observability #6: Log-Trace 연동 및 Kibana 검색 구조이코에코(Eco²)/Observability 2025. 12. 19. 03:10
개요분산 시스템에서 로그와 트레이스를 연결하는 것은 디버깅의 핵심입니다.이 문서에서는 Kibana에서 trace.id로 로그를 검색할 수 있도록 구성한 과정과 현재 구현 상태를 다룹니다.현재 클러스터 상태Trace 커버리지 통계전체 로그1,750,699trace.id 있는 로그125,398커버리지7.16%서비스별 trace.id 분포istio-proxy125,17999.8%chat-api400.03%scan-api340.03%ext-authz110.01%auth-api100.01%image-api4-location-api2-my-api1- istio-proxy (EnvoyFilter)가 대부분의 trace를 생성. 앱 로그는 요청 처리 시에만 trace.id 포함.현재 구현 구조Trace 생성 흐름컴포넌..
-
이코에코(Eco²) Observability #5: 인덱스 전략 및 라이프사이클 관리이코에코(Eco²)/Observability 2025. 12. 19. 03:03
개요마이크로서비스 환경에서 로그 인덱스를 어떻게 설계할지는 운영 효율성과 비용에 직접적인 영향을 미칩니다.이 글에서는 빅테크(Uber, Google)와 CNCF 권장사항을 바탕으로 인덱스 분리 전략을 수립하고, ILM을 통한 라이프사이클 관리를 다룹니다.목표인덱스 분리 전략 선택 (도메인별 vs 앱/인프라 vs 단일)Fluent Bit 라우팅 설정ILM 정책으로 비용 최적화ECS 필드 기반 서비스 구분현재 클러스터 상태인덱스 현황# 2025-12-18 기준kubectl exec -n logging eco2-logs-es-default-0 -- curl -s "http://localhost:9200/_cat/indices/logs-*?v"index docs.count store.si..
-
분산 트레이싱 트러블슈팅: OpenTelemetry 커버리지 확장이코에코(Eco²) Context/Troubleshooting 2025. 12. 19. 03:00
시스템 컴포넌트 OTEL 적용개요시스템 컴포넌트(Istio, ArgoCD)에도 분산 추적을 적용하여 trace.id를 로그에 포함.적용 대상시스템OTEL 지원적용 방법결과Istio (Envoy)✅EnvoyFilterAccess log에 trace.id 포함ArgoCD✅ConfigMapJaeger에 트레이스 전송Calico❌미지원-Kubernetes⚠️제한적-1. Istio Access Log with Trace ID문제: ext-authz 거부/404 요청에 trace.id 없음초기 설정에서 %REQ(X-B3-TRACEID)%를 사용했으나, 클라이언트가 헤더를 보내지 않으면 빈 값:# 문제 상황/api/v1/auth/register → 401 (ext-authz 거부) → trace.id: 없음/api/..
-
분산 트레이싱 트러블슈팅: Log-Trace 연동 및 Kibana 검색 구조이코에코(Eco²) Context/Troubleshooting 2025. 12. 19. 02:47
개요분산 시스템에서 로그와 트레이스를 연결하는 것은 디버깅의 핵심입니다.이 문서에서는 Kibana에서 trace_id로 로그를 검색할 수 없었던 문제를 분석하고 해결한 과정을 다룹니다.문제 상황증상Jaeger에서 확인한 trace_id로 Kibana에서 로그 검색 시 결과 없음.# Kibana 검색 (실패)trace.id:1598486b3c023e05db07590939154b51→ No results match your search criteria기대 동작애플리케이션 로그에 trace.id가 포함되어 있으므로, 해당 값으로 검색 가능해야 함.// 애플리케이션 로그 출력 (kubectl logs){ "@timestamp": "2025-12-18T07:04:51.886+00:00", "message": ..
-
이코에코(Eco²) Observability #4: 분산 트레이싱 통합이코에코(Eco²)/Observability 2025. 12. 19. 02:37
개요마이크로서비스 환경에서 하나의 요청이 여러 서비스를 거치며 처리됩니다. 이 글에서는 Kiali, Jaeger, OpenTelemetry를 활용하여 서비스 간 호출 관계를 시각화하고, E2E 트랜잭션을 추적하는 방법을 다룹니다.2025-12-18 업데이트: Istio Sidecar와 App OTEL SDK 간 트레이스 연결 완료. B3 Propagator를 통해 동일 traceID로 전체 요청 흐름 추적 가능.목표서비스 토폴로지 시각화: Kiali로 서비스 간 관계 파악분산 트레이싱: Jaeger로 요청 흐름 추적자동 계측: OpenTelemetry로 코드 수정 없이 트레이싱외부 서비스 시각화: OAuth, OpenAI, AWS 등 외부 의존성 표시E2E 트레이스 연결: Istio Sidecar ↔ A..