Backend

Enterprise Go 시리즈 #8: Observability와 Debugging

2026-01-015 min read

Enterprise Go 시리즈 #8: Observability와 Debugging

다른 생태계 경험자를 위한 매핑

  • Java: Micrometer, Logback, Zipkin
  • Node.js: Winston, prom-client, Jaeger

핵심 질문

프로덕션에서:

  • 장애 발생 시 원인을 어떻게 파악하나?
  • 어떤 메트릭을 수집해야 하나?
  • Grafana 대시보드와 Alert는 어떻게 구성하나?

Observability 3요소


Logging (uber/zap)

구조화된 로깅

패턴JavaGo
구조화 로깅Logback + JSONuber/zap
컨텍스트 전파MDCContext + zap.With

로그 레벨 가이드

레벨사용 시점프로덕션
DEBUG개발/디버깅OFF
INFO정상 흐름 기록ON
WARN복구 가능한 문제ON
ERROR실패, 조치 필요ON + Alert

Request ID 전파

로거 초기화 패턴

패턴방식장단점
ReplaceGlobalszap.ReplaceGlobals(logger)간편, 테스트 어려움
DI 주입Wire로 주입테스트 용이, 명시적

ReplaceGlobals: 빠른 프로토타이핑에 적합

logger, _ := zap.NewProduction()
zap.ReplaceGlobals(logger)
// 이후 어디서든 zap.L().Info(...)

DI (권장): 정식 프로젝트에서는 Wire로 주입

// wire.go
func InitializeServer(logger *zap.Logger) *Server { ... }

테스트 시 Mock 로거 주입 가능, 의존성 명시적


Metrics

수집해야 할 핵심 메트릭

RED Method (Request-driven)

메트릭설명Prometheus 타입
Rate초당 요청 수Counter
Errors에러율Counter
Duration응답 시간 분포Histogram

USE Method (Resource-driven)

메트릭설명예시
Utilization리소스 사용률CPU, Memory
Saturation포화도, 대기열Goroutine 수
Errors리소스 에러Connection 실패

Grafana 대시보드 구성

Alert 설정 예시

Alert 이름조건심각도채널
HighErrorRate에러율 > 5% (5분)CriticalSlack + PagerDuty
HighLatencyP99 > 1s (5분)WarningSlack
PodRestart재시작 > 3회 (1시간)CriticalSlack

Tracing

분산 추적이 필요한 상황

OpenTelemetry 연동

JavaGo
Spring Cloud SleuthOpenTelemetry SDK
Zipkin/Jaeger ExporterOTLP Exporter
@NewSpantracer.Start(ctx, name)

pprof: 성능 프로파일링

프로파일 종류

프로파일분석 대상사용 시점
CPU함수별 CPU 사용높은 CPU 사용률
Heap메모리 할당메모리 증가
Goroutine활성 goroutine누수 의심
Block블로킹 지점동기화 문제

프로덕션 활성화

보안 주의: pprof 엔드포인트는 내부망/VPN에서만 접근


통합 아키텍처


SPoF 방지

단일 장애 지점 식별

메트릭 기반 SPoF 탐지

메트릭임계치의미
의존성별 에러율> 50%해당 의존성 장애
DB 커넥션 풀 사용률> 90%커넥션 고갈 위험
Goroutine 수급격한 증가누수 또는 블로킹

정리

요소도구용도
Logszap → Loki디버깅, 감사
MetricsPrometheus → Grafana모니터링, Alert
TracesOpenTelemetry → Tempo병목 분석
Profilepprof성능 최적화

시리즈 마무리

8편에 걸쳐 엔터프라이즈 Go 개발의 핵심을 다뤘습니다:

주제핵심 요점
1프로젝트 설계Hollow Main, internal/app, 진화 단계
2HTTP 서버미들웨어 순서, run.Group, Graceful Shutdown
3Context타임아웃, 취소 전파, Request ID
4동시성Goroutine 제한, errgroup
5데이터베이스WithTx로 @Transactional 경험
6외부 통신패턴 조합 순서
7테스트Mock, Testcontainers, Ginkgo
8ObservabilityRED/USE, Grafana Alert
9Makefile개발 워크플로우 자동화, Façade

참고 자료

Share

Related Articles

Comments

이 블로그는 제가 알고 있는 것들을 잊지 않기 위해 기록하는 공간입니다.
직접 작성한 글도 있고, AI의 도움을 받아 정리한 글도 있습니다.
정확하지 않은 내용이 있을 수 있으니 참고용으로 봐주세요.

© 2026 Seogyu Kim