πŸ” 앱은 정상 μž‘λ™ν•˜μ§€λ§Œ λ‚΄λΆ€μ—μ„œ 무슨 일이 μΌμ–΄λ‚˜λŠ”μ§€ λͺ¨λ₯΄μ‹œλ‚˜μš”?

λ°œν–‰: (2026λ…„ 2μ›” 23일 μ˜€ν›„ 12:06 GMT+9)
6 λΆ„ μ†Œμš”
원문: Dev.to

Source: Dev.to

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 느리게 μ‘λ‹΅ν•˜λŠ”λ° μ •ν™•νžˆ μ–΄λ””κ°€ λ¬Έμ œμΈμ§€ λͺ¨λ₯Έ 적 μžˆλ‚˜μš”?
μ»¨νŠΈλ‘€λŸ¬λŠ” μ‘λ‹΅ν•˜μ§€λ§Œ μ„œλΉ„μŠ€κ°€ μ–Όλ§ˆλ‚˜ κ±Έλ ΈλŠ”μ§€ λͺ¨λ₯Ό λ•Œ?
λ°μ΄ν„°λ² μ΄μŠ€κ°€ 느린 건지 둜직이 원인인지?
λͺ¨λ“  것이 λ‘œμ»¬μ—μ„œλŠ” 잘 λ™μž‘ν•˜μ§€λ§Œ λ‚΄λΆ€μ μœΌλ‘œ 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€ μ΄ν•΄ν•˜μ§€ λͺ»ν•  λ•Œ?

λ°”λ‘œ μ—¬κΈ°μ„œ ν˜„λŒ€μ μΈ κ΄€μΈ‘μ„±(observability)이 λ“±μž₯ν•©λ‹ˆλ‹€.

이 κΈ€μ—μ„œλŠ” μ‹€μš©μ μ΄κ³  깊이 있게 λ‹€μŒμ„ μ΄ν•΄ν•˜κ²Œ λ©λ‹ˆλ‹€:

  • 관츑성이 μ‹€μ œλ‘œ 무엇인지
  • λΆ„μ‚° νŠΈλ ˆμ΄μŠ€κ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€
  • OpenTelemetryκ°€ λ‚΄λΆ€μ μœΌλ‘œ 무엇을 ν•˜λŠ”μ§€
  • Collectorκ°€ μ–΄λ–€ μš©λ„λ‘œ μ“°μ΄λŠ”μ§€
  • Jaegerκ°€ 전체λ₯Ό μ–΄λ–»κ²Œ μ‹œκ°ν™”ν•˜λŠ”μ§€
  • Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μžλ™μœΌλ‘œ κ³„μΈ‘ν•˜λŠ” 방법

λͺ¨λ‘ 전톡적이고 κ°„λ‹¨ν•œ μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ μš©λ©λ‹ˆλ‹€.
그리고 κ°€μž₯ 쒋은 점: 이 μ €μž₯μ†Œμ—μ„œ 직접 μ‹€ν–‰ν•΄ λ³Ό 수 μžˆλ‹€λŠ” 것!

πŸ‘‰

🧠 1. κ΄€μΈ‘μ„±

관츑성은 μ„Έ κ°€μ§€ 핡심 κΈ°λ‘₯에 κΈ°λ°˜ν•©λ‹ˆλ‹€:

  • Logs β†’ 무슨 일이 μΌμ–΄λ‚¬λŠ”μ§€
  • Metrics β†’ μ–Όλ§ˆλ‚˜ μΌμ–΄λ‚¬λŠ”μ§€
  • Traces β†’ μ–΄λ–»κ²Œ μΌμ–΄λ‚¬λŠ”μ§€

νŠΈλ ˆμ΄μŠ€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄ μš”μ²­μ˜ 전체 경둜λ₯Ό μž¬κ΅¬μ„±ν•  수 있게 ν•΄μ€λ‹ˆλ‹€. 앱이 μž‘λ‹€κ³  ν•΄μ„œ νŠΈλ ˆμ΄μŠ€κ°€ ν•„μš” μ—†μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€; λ‚΄λΆ€ λ™μž‘μ„ μ΄ν•΄ν•˜λ €λ©΄ νŠΈλ ˆμ΄μŠ€κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

πŸ”Ž 2. νŠΈλ ˆμ΄μŠ€λž€?

νŠΈλ ˆμ΄μŠ€λŠ” μš”μ²­μ˜ 전체 흐름을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€:

ν΄λΌμ΄μ–ΈνŠΈ β†’ 컨트둀러 β†’ μ„œλΉ„μŠ€ β†’ λ ˆν¬μ§€ν† λ¦¬ β†’ λ°μ΄ν„°λ² μ΄μŠ€

각 뢀뢄은 Span μž…λ‹ˆλ‹€. νŠΈλ ˆμ΄μŠ€μ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ©λ‹ˆλ‹€:

  • Trace ID
  • Span ID
  • λΆ€λͺ¨β€‘μžμ‹ 관계
  • 속성(attribute)
  • 이벀트(event)
  • 지속 μ‹œκ°„(duration)

πŸ— 3. κ΅¬ν˜„λœ μ•„ν‚€ν…μ²˜

Spring Boot
   ↓
OpenTelemetry Java Agent
   ↓
OTLP
   ↓
OpenTelemetry Collector
   ↓
Jaeger
   ↓
Jaeger UI

🐳 4. μΈν”„λΌμŠ€νŠΈλŸ­μ²˜

Docker Composeλ₯Ό μ‚¬μš©ν•΄ λ‹€μŒμ„ λ„μ›λ‹ˆλ‹€:

  • Jaeger All‑in‑One
  • OpenTelemetry Collector

Jaeger UIλŠ” λ‹€μŒμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

βš™οΈ 5. Collector μ„€μ •

CollectorλŠ”:

  • OTLP μˆ˜μ‹ 
  • 데이터 처리(resource + batch)
  • Jaeger둜 내보내기

resource ν”„λ‘œμ„Έμ„œλŠ” λ‹€μŒμ„ μΆ”κ°€ν•©λ‹ˆλ‹€:

  • service.name
  • deployment.environment

β˜• 6. μ• ν”Œλ¦¬μΌ€μ΄μ…˜

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ©λ‹ˆλ‹€:

  • REST 컨트둀러
  • μ„œλΉ„μŠ€
  • JPA λ ˆν¬μ§€ν† λ¦¬
  • 인메λͺ¨λ¦¬ H2 λ°μ΄ν„°λ² μ΄μŠ€

μ—”λ“œν¬μΈνŠΈ:

  • POST /user
  • GET /user

🎯 7. μžλ™ 계츑

ν™˜κ²½ λ³€μˆ˜:

export OTEL_PROTOCOL="grpc"
export OTEL_EXPORTER_OTLP_ENDPOINT="http://127.0.0.1:4318"
export OTEL_METRICS_EXPORTER=none

μ‹€ν–‰ 방법:

java -javaagent:opentelemetry-javaagent.jar -jar demo-0.0.1-SNAPSHOT.jar

πŸ‘€ 8. λ‚΄λΆ€ 흐름

  1. HTTP μš”μ²­μ΄ κ°€λ‘œμ±„μ§‘λ‹ˆλ‹€.
  2. 루트 슀팬이 μƒμ„±λ©λ‹ˆλ‹€.
  3. 컨트둀러, μ„œλΉ„μŠ€, JDBCκ°€ κ³„μΈ‘λ©λ‹ˆλ‹€.
  4. OTLPλ₯Ό 톡해 λ‚΄λ³΄λ‚΄μ§‘λ‹ˆλ‹€.
  5. Collectorκ°€ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  6. Jaegerκ°€ μ‹œκ°ν™”ν•©λ‹ˆλ‹€.

πŸš€ 9. ν˜œνƒ

  • 병λͺ© ν˜„μƒ 감지
  • μ •ν™•ν•œ μ§€μ—° μ‹œκ°„ νŒŒμ•…
  • μ‹€μ œ μ‹€ν–‰ 흐름 이해
  • ν‘œμ€€ κ΄€μΈ‘μ„± 확보
  • 벀더 쒅속성(vendor lock‑in) λ°©μ§€

이 λͺ¨λ“  것이 κ°„λ‹¨ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλ„ κ°€λŠ₯ν•©λ‹ˆλ‹€. 20개의 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€κ°€ 없어도 관츑성이 ν•„μš”ν•©λ‹ˆλ‹€.

🏁 결둠

관츑성은 λ³΅μž‘ν•œ μ•„ν‚€ν…μ²˜μ—λ§Œ ν•„μš”ν•œ 것이 μ•„λ‹™λ‹ˆλ‹€. 전톡적인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λΌλ„ λ‚΄λΆ€μ—μ„œ 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€ μ΄ν•΄ν•˜λ©΄ 큰 이점을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. OpenTelemetry와 Jaegerλ₯Ό μ‚¬μš©ν•˜λ©΄ β€œλ¬΄μŠ¨ 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€ λͺ¨λ₯Έλ‹€β€λŠ” μƒνƒœμ—μ„œ λͺ‡ λΆ„ μ•ˆμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 전체λ₯Ό μ™„μ „νžˆ κ°€μ‹œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•œ 번 λ‚΄λΆ€ 흐름을 μ΄ν•΄ν•˜λ©΄ λ‹€μ‹œλŠ” λŒμ•„κ°€κ³  μ‹Άμ§€ μ•Šμ„ κ²λ‹ˆλ‹€.

μ§€κΈˆ λ°”λ‘œ μ‹œν—˜ν•΄ 보고 μ‹Άλ‹€λ©΄:

πŸ‘‰

0 쑰회
Back to Blog

κ΄€λ ¨ κΈ€

더 보기 Β»

Spring CRUD Generator v1.3.0 μΆœμ‹œ πŸš€

MariaDB 지원 + REST μ‘λ‹΅μ—μ„œ 선택적 Null μ œμ™Έ 방금 Spring CRUD Generator v1.3.0을 μΆœμ‹œν–ˆμŠ΅λ‹ˆλ‹€ πŸŽ‰ Spring CRUD GeneratorλŠ” μ˜€ν”ˆ μ†ŒμŠ€ Maven ν”ŒλŸ¬κ·ΈμΈμž…λ‹ˆλ‹€.