부록 C: 수학적 기초 (심화 학습)
대상 독자: 수학적 배경지식이 있는 엔지니어, 데이터 과학자
이 문서는 메트릭 수집의 수학적 타당성을 증명합니다. 일반 사용자는 부록 A: 메트릭 데이터 수집를 먼저 읽으시길 권장합니다.
개요
이 문서는 FlowKat의 1초 간격 메트릭 수집이 통계적으로 신뢰할 수 있음을 수학적으로 증명합니다.
1. 표본화 이론 (Sampling Theory)
1.1 Nyquist-Shannon 표본화 정리
정리: 나이퀴스트 주파수의 2배 이상의 비율로 표본화하면, 원래 신호를 완전히 재구성할 수 있습니다.
수식:
f_s > 2 × f_max
여기서:
f_s: 샘플링 주파수 (Hz)
f_max: 신호의 최대 주파수 (Hz)
FlowKat 적용:
샘플링 주파수 = 1 Hz (1초당 1회 샘플링)
나이퀴스트 주파수 = 0.5 Hz (측정 가능한 최대 주파수)
조건: 샘플링 주파수 > 2 × 최대 주파수
1.2 시스템 메트릭의 주파수 특성
주파수 분석:
| 메트릭 | 주파수 범위 | 주기 | 설명 |
|---|---|---|---|
| CPU 사용률 | 0.01 ~ 0.1 Hz | 10~100초 | 점진적 변화 |
| 메모리 사용량 | 0.001 ~ 0.05 Hz | 20~1000초 | 완만한 변화 |
| TPS (Transaction Per Second) | 0.1 ~ 1 Hz | 1~10초 | 급격한 변화 가능 |
실무 의미:
1Hz 샘플링률은 대부분의 시스템 메트릭을 충실히 재구성할 수 있습니다.
예시: CPU가 10~100초 주기로 변화한다면,
1초 간격으로 측정해도 모든 변화를 놓치지 않고 포착할 수 있습니다.
1.3 표본화 오차 분석
상대 오차 정의:
상대 오차 = |측정값 - 실제값| / 실제값 × 100%
최대 오차 공식:
최대 오차 = 최대 변화율 × 측정 간격
= 최대 변화율 × 1초
TPS 메트릭 예시:
최대 변화율 ≈ 1000 req/s² (급격한 트래픽 변화)
최대 오차 = 1000 × 1 = 1000 req/s
상대 오차율 (TPS=5000 기준):
상대 오차율 = 1000 / 5000 = 20%
→ 20%의 오차 범위가 있을 수 있음
1.4 상대 오차 완화 전략
전략 1: 최대-최소 유지
Collector에서 1초 간격 내 최대/최소 값 별도 저장
장점: 급격한 변화 포착
단점: 저장 공간 2배 소요
전략 2: 이동 평균
5개 샘플 이동 평균으로 급격한 변화 평활
MA_t = (x_t + x_{t-1} + x_{t-2} + x_{t-3} + x_{t-4}) / 5
장점: 노이즈 감소
단점: 5초 지연 발생
전략 3: 보간
선형 보간으로 1초 미만 세밀도 추정
x(t) = x(t₀) + (x(t₁) - x(t₀)) × (t - t₀) / (t₁ - t₀)
장점: 연속적인 곡선 재구성
단점: 추정값이므로 정확도 떨어질 수 있음
2. 단조 증가 카운터의 유효성
2.1 단조 증가 함수 정의
정의: 시간이 지날수록 값이 같거나 커지는 함수
f(t₁) ≤ f(t₂) for all t₁ < t₂
MeterService 예시:
서비스 처리 건수는 줄어들지 않고 계속 늘어납니다.
count(t₁) = 1000
count(t₂) = 1500 (t₂ > t₁)
count(t₂) - count(t₁) = 500 (새로 처리한 건수)
2.2 델타 계산의 순서 독립성
델타 계산 공식:
Delta = count(t₂) - count(t₁)
속성 1: 비음수성 (Non-negativity)
증명:
t₂ > t₁ 이면, count(t₂) ≥ count(t₁) (단조 증가)
따라서 count(t₂) - count(t₁) ≥ 0
결론: 델타는 항상 0 이상
속성 2: 교환법칙 (Commutativity)
증명:
중간 시점 t₃ (t₁ < t₃ < t₂)를 기준으로 나누어 계산해도 결과는 같음
Delta_total = [count(t₃) - count(t₁)] + [count(t₂) - count(t₃)]
= count(t₂) - count(t₁)
APM 적용: TCP 배치 전송에서 Pack 처리 순서가 바뀌더라도
최종 델타 값은 동일하므로 카운터 정확성이 보장됩니다.
결론: 계산 순서에 무관하게 동일한 결과
2.3 비동기 전송 환경에서의 정확성
문제: TCP 배치 내 Pack 처리 순서가 뒤바뀔 수 있음
해결: 단조 증가 카운터는 순서 무관성 보장
시나리오:
t₁: 패킷 A (count=1000)
t₂: 패킷 B (count=1500)
t₃: 패킷 C (count=1200) ← t₁ < t₃ < t₂ 인데 t₂보다 먼저 도착
수신 순서: A → C → B
델타 계산:
Delta(C→A) = 1200 - 1000 = 200
Delta(B→C) = 1500 - 1200 = 300
Total = 200 + 300 = 500
결론: 패킷 순서가 바뀌어도 정확도 보장됨
3. CounterBasket 집계의 결합성
3.1 결합 법칙 (Associativity) 정의
정의: 연산 순서를 바꿔도 결과가 같은 성질
(A ⊕ B) ⊕ C = A ⊕ (B ⊕ C)
3.2 CounterBasket의 키 기반 집계
데이터 구조:
private Map<Key, PerfCounterPack> table = new HashMap<>();
// Key = (메트릭 이름, 시간 타입)
집계 연산:
put(key, value):
if key exists:
pack = table.get(key)
pack.data.putAll(value.data) // 병합
else:
pack = new PerfCounterPack()
pack.data = value.data
table.put(key, pack)
3.3 결합성 증명
증명:
가정:
- @Counter 메서드 M₁, M₂, M₃가 병렬로 실행
- 각 메서드는 동일한 Key k에 데이터 쓰기
순차적 실행:
step1: M₁ 실행 → pack.data = d₁
step2: M₂ 실행 → pack.data = d₁ ∪ d₂
step3: M₃ 실행 → pack.data = d₁ ∪ d₂ ∪ d₃
병렬 실행 (임의 순서):
case1: M₁ → M₂ → M₃
case2: M₂ → M₁ → M₃
case3: M₃ → M₁ → M₂
...
결과: 모든 경우에서 pack.data = d₁ ∪ d₂ ∪ d₃
실무 의미:
@Counter 메서드가 병렬로 실행되더라도
최종 PerfCounterPack의 정합성이 보장됨을 의미합니다.
4. 시간 윈도우의 무결성
4.1 TimeCounterKey 구조
복합 키 정의:
TimeCounterKey = (objHash, metricName, timeType, timestamp)
필드 설명:
objHash: 객체 해시 (공간 축)metricName: 메트릭 이름 (식별자)timeType: 시간 타입 (REALTIME, ONE_MIN, ...)timestamp: 타임스탬프 (시간 축)
4.2 데이터 무결성 보장
보장 1: 시간 역전 불가
증명:
과거 데이터가 미래 데이터를 덮어쓰려면:
timestamp(과거) > timestamp(미래)
하지만 timestamp는 단조 증가하므로 불가능
결론: 시간 역전 불가
보장 2: 갱신 손실 방지
정책: 동일 시간대 데이터는 마지막 값만 유효
구현:
CounterCache.put(key, value):
if key exists:
old = cache.get(key)
if value.timestamp > old.timestamp:
cache.put(key, value) // 최신값으로 교체
결론: 갱신 손실 방지
보장 3: 시계열 일관성
조건: 시간 순서대로 조회
증명:
timestamp(t₁) < timestamp(t₂) < timestamp(t₃)
→ 조회 시 항상 단조 증가하는 타임스탬프
결론: 시계열 일관성 보장
5. 포아송 과정과 TPS 모델링
5.1 포아송 과정 정의
정의: 특정 시간 동안 발생하는 사건의 수를 모델링하는 확률 분포
확률 질량 함수:
P(N(t) = k) = (λt)^k × e^(-λt) / k!
여기서:
N(t): 시간 t 동안 발생한 사건 수
λ: 도착률 (단위 시간당 평균 사건 수)
k: 발생한 사건 수
5.2 TPS의 통계적 특성
TPS를 포아송 과정으로 모델링:
가정:
- 트랜잭션 도착은 독립적
- 도착률은 일정
- 동시에 2개 이상 도착 확률은 0
결론: TPS는 포아송 과정을 따름
통계적 특성:
기대값: E[N(t)] = λt
분산: Var(N(t)) = λt
표준 편차: σ = √(λt)
변동 계수: CV = σ/μ = √(λt) / (λt) = 1/√(λt)
APM 적용 (t=1초 수집 주기):
CV = 1/√λ (λ = TPS)
TPS=100 → CV=0.1 (10% 변동, 안정적 측정)
TPS=4 → CV=0.5 (50% 변동, 측정 불안정)
→ TPS가 높을수록 1초 수집의 통계적 신뢰도가 높아집니다.
5.3 신뢰 구간 계산
중심극한정리에 의한 근사:
표본 평균: X̄ = (1/n) × Σ X_i
표준 오차: SE = σ / √n = √(λt) / √n
95% 신뢰 구간:
CI = X̄ ± 1.96 × SE
= X̄ ± 1.96 × √(λt) / √n
예시:
조건:
- TPS = 5000 (λ = 5000)
- 샘플 수 = 60 (1분 동안 1초 간격)
계산:
표준 편차 σ = √5000 ≈ 71
표준 오차 SE = 71 / √60 ≈ 9.1
95% 신뢰 구간:
CI = 5000 ± 1.96 × 9.1
= [4822, 5178]
의미: 100번 중 95번은 이 범위 내에 있음
6. 대기행렬 이론 (Queueing Theory) 적용
6.1 M/M/1 대기행렬 모델
정의:
M (Markovian): 도착 과정이 포아송 분포
M (Markovian): 서비스 시간이 지수 분포
1: 서버 1개
모델 파라미터:
λ: 도착률 (TPS)
μ: 서비스율 (처리 용량)
ρ: 시스템 활용도 = λ/μ
안정 조건:
활용도 < 1 (도착률 < 처리 용량)
ρ < 1
ρ ≥ 1이면 대기행렬 무한 증가
6.2 성능 지표 공식
리틀의 법칙 (Little's Law):
L = λ × W
여기서:
L: 시스템 내 평균 고객 수
W: 평균 체류 시간
응답 시간:
E[T] = 1 / (μ - λ)
조건: ρ < 1
평균 대기 시간:
E[W_q] = λ / (μ(μ - λ))
조건: ρ < 1
6.3 FlowKat 메트릭과의 매핑
메트릭 매핑:
WAS_ELAPSED_TIME ↔ 평균 응답 시간 (E[T])
WAS_TPS ↔ 도착률 (λ)
WAS_ACTIVE_SERVICE ↔ 시스템 내 작업 수 (L)
활용도 계산:
활용도 = 응답시간 × TPS / 1000
예시 (응답시간 50ms, TPS=1000):
활용도 = 50 × 1000 / 1000 = 0.5 (50% 활용도)
6.4 병목 현상 분석
활용도별 시스템 상태:
| 활용도 (ρ) | 상태 | 설명 |
|---|---|---|
| 0 ~ 0.5 | 여유 | 대기 시간 무시 가능 |
| 0.5 ~ 0.7 | 적정 | 효율적 운영 |
| 0.7 ~ 0.9 | 주의 | 대기 시간 증가 |
| 0.9 ~ 0.95 | 위험 | 응답 시간 급증 |
| 0.95 ~ 1.0 | 한계 | 시스템 불안정 |
응답 시간 급증 예측:
ρ = 0.9: E[T] = 1 / (μ - 0.9μ) = 10 / μ
ρ = 0.95: E[T] = 1 / (μ - 0.95μ) = 20 / μ
ρ = 0.99: E[T] = 1 / (μ - 0.99μ) = 100 / μ
활용도 90% → 95%로 증가 시 응답 시간 2배
활용도 90% → 99%로 증가 시 응답 시간 10배
7. 측도론 (Measure Theory) 기초
7.1 확률 공간 정의
세 가지 요소:
(Ω, ℱ, P)
Ω: 표본 공간 (Sample Space)
ℱ: 시그마 대수 (Sigma-Algebra)
P: 확률 측도 (Probability Measure)
7.2 시그마 대수 (Sigma-Algebra)
정의:
ℱ ⊆ 2^Ω (Ω의 멱집합 부분 집합)
조건:
1. Ω ∈ ℱ (전체 공간 포함)
2. A ∈ ℱ → A^c ∈ ℱ (여집합 포함)
3. A₁, A₂, ... ∈ ℱ → ∪A_i ∈ ℱ (가산 합집합 포함)
7.3 확률 측도 (Probability Measure)
정의:
P: ℱ → [0, 1]
조건:
1. P(Ω) = 1 (전체 확률 1)
2. 가산 서로소 집합 {A_i}에 대해:
P(∪A_i) = Σ P(A_i) (시그마 가산성)
7.4 메트릭 수집의 확률 모델
표본 공간:
Ω = \{모든 가능한 메트릭 값\}
= { (cpu, mem, tps, ...) | cpu ∈ [0, 100], mem ∈ [0, 100], ... }
시그마 대수:
ℱ = Borel 집합 (Borel Sets)
= 열린 구간들의 가산 합/교/차집합으로 생성된 집합족
확률 측도:
P(A) = Prob(Metric ∈ A)
예시:
P(cpu > 90) = 0.05 (CPU 90% 초과 확률 5%)
8. 정보 이론 (Information Theory) 기초
8.1 엔트로피 (Entropy) 정의
샤논 엔트로피:
H(X) = -Σ p(x) × log₂ p(x)
여기서:
X: 확률 변수
p(x): 확률 질량 함수
8.2 메트릭 데이터의 엔트로피
CPU 사용률 예시:
확률 분포:
P(cpu = 10%) = 0.3
P(cpu = 50%) = 0.5
P(cpu = 90%) = 0.2
엔트로피 계산:
H(CPU) = -[0.3×log₂0.3 + 0.5×log₂0.5 + 0.2×log₂0.2]
≈ 1.485 bits
8.3 상호 정보량 (Mutual Information)
정의:
I(X; Y) = H(X) - H(X|Y)
= H(Y) - H(Y|X)
= H(X) + H(Y) - H(X,Y)
메트릭 간 상관관계:
I(CPU; Memory): CPU와 메모리 사용률의 상관관계
I(TPS; Response Time): TPS와 응답 시간의 상관관계
8.4 데이터 압축 이론
무손실 압축 한계:
H(X) ≤ 압축된 길이 ≤ H(X) + 1
의미: 엔트로피가 압축의 이론적 하한
FlowKat 적용:
메트릭 데이터 압축 시 엔트로피 고려:
- 반복 패턴 활용 (Run-Length Encoding)
- 델타 인코딩 (Delta Encoding)
- 허프만 코딩 (Huffman Coding)
9. 통계적 품질 관리
9.1 관리도 (Control Chart)
셰어하트 관리도 (Shewhart Control Chart):
UCL = μ + 3σ (상한 관리선)
CL = μ (중심선)
LCL = μ - 3σ (하한 관리선)
메트릭 모니터링 적용:
CPU 사용률:
μ = 50%, σ = 10%
UCL = 50% + 3×10% = 80%
LCL = 50% - 3×10% = 20%
규칙:
1. 점이 UCL/LCL 밖에 있으면 이상
2. 7개 연속 점이 한쪽에 있으면 이상
9.2 공정 능력 (Process Capability)
Cp 지수:
Cp = (USL - LSL) / (6σ)
여기서:
USL: 상한 사양
LSL: 하한 사양
σ: 표준 편차
메트릭 목표 설정:
응답 시간 SLA 예시:
USL (상한) = 500ms, LSL (하한) = 0ms
σ (표준편차) = 50ms
Cp = (USL - LSL) / (6σ) = (500 - 0) / (6 × 50) = 500 / 300 ≈ 1.67
해석 (APM 알람 기준 설정 시 참고):
Cp ≥ 1.33: 우수 — SLA 여유 충분, 알람 임계값 유지
1.0 ≤ Cp < 1.33: 적정 — SLA 근접, 모니터링 강화 권장
Cp < 1.0: 부족 — SLA 위반 빈발 예상, 성능 튜닝 필요