# 아키텍처 요구 사항

Site [llms.txt](/ko/llms.txt)

---

## 요약 {#summary}

오픈텔레메트리(OpenTelemetry) 커뮤니티 데모 애플리케이션은 경량화된 프로덕션
환경의 클라우드 네이티브 애플리케이션에서 오픈텔레메트리 API, SDK, 도구를
시연하기 위한 것이다. 이 애플리케이션의 전반적인 목표는 오픈텔레메트리
컴포넌트의 표준적인 '데모'를 제공하는 것뿐만 아니라, 최종 사용자, 벤더 및 기타
이해관계자가 추가로 커스터마이징할 수 있는 프레임워크 역할을 하는 것이다.

### 요구 사항 {#requirements}

- [애플리케이션 요구 사항](../application/)
- [오픈텔레메트리 요구 사항](../opentelemetry/)
- [시스템 요구 사항](../system/)

### 애플리케이션 목표 {#application-goals}

- 개발자가 오픈텔레메트리 계측을 학습하는 데 활용할 수 있는 견고한 샘플
  애플리케이션을 제공한다.
- 옵저버빌리티(Observability) 벤더에게 추가로 커스터마이징할 수 있는(또는 별도의
  설정 없이 바로 사용할 수 있는) 지원이 잘 갖춰진 단일 데모 플랫폼을 제공한다.
- OTel API, SDK 및 도구의 기능과 활용 가능성을 보여 주며 지속적으로 발전하는
  예제를 오픈텔레메트리 커뮤니티에 제공한다.
- 오픈텔레메트리 메인테이너와 워킹 그룹(WG)이 '실제 환경에서' 새로운 기능과
  개념을 시연할 수 있는 플랫폼을 제공한다.

다음은 데모 애플리케이션의 논리적 컴포넌트에 대한 전반적인 설명이다.

## 주요 애플리케이션 {#main-application}

데모 앱의 핵심은 전자상거래 사이트처럼 '실제 환경'에서 유용한 작업을 수행하는
독립형 마이크로서비스 기반 애플리케이션이다. 이 애플리케이션은 gRPC와 HTTP를
통해 서로 통신하는 여러 서비스로 구성되며, 쿠버네티스(혹은 로컬 도커)에서
실행된다.

각 서비스는 (적용·지원 가능한 범위에서) 트레이스, 메트릭, 로그를 위해
오픈텔레메트리로 계측해야 한다.

각 서비스는 동일한 비즈니스 로직을 수행하고 동일한 gRPC 엔드포인트를 구현하되,
다른 언어나 방식으로 작성된 서비스로 상호 교체가 가능한 것이 좋다.

각 서비스는 피처 플래그(feature flag) 서비스와 통신하여 장애를 활성화하거나
비활성화할 수 있는 것이 좋다. 이를 통해 텔레메트리가 분산 애플리케이션의 문제
해결에 어떻게 도움이 되는지 보여줄 수 있다.

## 피처 플래그 컴포넌트 {#feature-flag-component}

피처 플래그는 클라우드 네이티브 애플리케이션 개발의 핵심 요소이다. 데모는 CNCF
인큐베이팅 프로젝트인 OpenFeature를 사용하여 피처 플래그를 관리한다.

피처 플래그는 flagd 설정 도구의 사용자 인터페이스를 통해 설정할 수 있다.

## 오케스트레이션 및 배포 {#orchestration-and-deployment}

모든 서비스는 쿠버네티스에서 실행된다. 오픈텔레메트리 컬렉터는 오픈텔레메트리
오퍼레이터를 통해 배포하고, 사이드카 + 게이트웨이 모드로 실행하는 것이 좋다. 각
파드의 텔레메트리는 에이전트에서 게이트웨이로 라우팅하고, 게이트웨이는
기본적으로 오픈 소스 트레이스 및 메트릭 시각화 도구로 텔레메트리를 내보내는 것이
좋다.

로컬 환경이나 쿠버네티스를 사용하지 않는 환경에서는 compose 파일을 통해 컬렉터를
배포하는 것이 좋다. 컬렉터는 애플리케이션의 트레이스와 메트릭뿐만 아니라
`dockerstatsreceiver`를 통해 도커 컨테이너도 모니터링하는 것이 좋다.

이 프로젝트의 설계 목표 중 하나는 클라우드 환경에 자체적으로 배포하기 위한 CI/CD
파이프라인을 포함하는 것이다. 로컬 개발에서는 이를 생략할 수 있다.
