본문으로 건너뛰기

부록 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 Hz10~100초점진적 변화
메모리 사용량0.001 ~ 0.05 Hz20~1000초완만한 변화
TPS (Transaction Per Second)0.1 ~ 1 Hz1~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 위반 빈발 예상, 성능 튜닝 필요