03. MVP Scope
MVP 단계는 종료되었다. 이 문서는 최초 프로토타입이 다룬 범위의 역사적 기록으로 남겨둔다. 지금 무엇이 구현되어 있는지(현재 상태)는
docs/00-status.md를 참고한다.
목적
최초 프로토타입에서 "무엇을 구현했고, 무엇을 의도적으로 제외했는지"를 명확히 한다.
범위
Java Agent, Collector, Storage, REST API, Console을 end-to-end로 동작하는 수준까지 구현한다.
설계
포함된 것
- Java Agent (
agent/java-agent)-javaagent로 주입, premain 진입점- Servlet 요청(
HttpServlet#service) 단위로 Trace 생성 - Trace ID 생성, Method/URI/Status/소요시간/예외 여부/요청 IP 수집
- 요청/응답 헤더 수집 (옵트인, 민감 헤더 블랙리스트 redaction)
- 내부 Queue + 백그라운드 sender thread + shutdown hook을 통한 비동기 전송
- Collector 장애/타임아웃 시 애플리케이션에 영향 없음 (드롭 정책)
- Collector (
collector)POST /api/v1/ingest/tracesingest API- 요청 검증 (
jakarta.validation) - H2(파일 모드) 저장, Repository/Adapter로 storage 구현 분리
- 조회 API: 서비스 목록, 서비스 요약(트래픽/평균 응답시간/에러율), URI별 통계, Trace 목록/상세
- 예제 애플리케이션 (
examples/example-app)- Agent를 실제로 붙여서 확인할 수 있는 최소 Spring Boot 앱
- Console (
console)- React + TypeScript + Vite, read-only 조회 화면 4종(서비스 목록/요약/URI 통계/Trace 목록·상세)
- MVP에서는 독립 dev 서버로만 실행, Collector REST API를 CORS로 직접 호출
진행 중 (MVP 확장)
- 분산 트레이싱(Span 구조):
common모듈의@ApmxTrace어노테이션을 붙인 메서드만 opt-in으로 계측한다 (자동 전수 계측 아님 - AGENTS.md 13.2 "상용 APM 수준 복잡 기능 금지" 준수). 계측된 메서드는 현재 활성화된 HTTP Trace 아래 자식 Span으로 기록되며, 인자값은 안전한 타입(String/Number/Boolean/Character)만 값으로, 그 외 객체는 클래스명만 기록한다 (docs/04-agent-design.md"메서드 호출 스택(Span) 계측" 참고).
제외된 것 (다음 단계 TODO)
- Console 정적 빌드 배포 (Collector 등에 통합) - MVP는 독립 dev 서버만 지원
- PostgreSQL 실제 연동 검증 (구조만 준비, MVP 기본값은 H2)
- Python/Node.js Agent
- Batch(다건) ingest API - 현재는 Trace 1건당 1 HTTP 요청 (단, 하나의 Trace에 속한 여러 Span은 같은 요청에 함께 포함된다)
- 재시도 로직, Circuit Breaker
예시
로컬 실행 결과 예시
bash
curl http://localhost:8080/api/v1/services
# ["example-app"]
curl http://localhost:8080/api/v1/services/example-app/summary
# {"serviceName":"example-app","totalCount":4,"avgDurationMs":51.25,"errorCount":2,"errorRate":0.5}TODO
- Console 정적 빌드 배포 옵션 검토 (
docs/08-console-design.md) - Batch ingest API 추가 여부 검토
- PostgreSQL 프로파일로 실제 구동 검증