[Zipkin] 사용법 가이드 - MSA 요청추적 (springboot/ sleuth/ grpc/ http)
tracing이 필요한 이유
Monolithic 시스템의 경우 클라이언트의 요청을 받으면 하나의 스레드에서 모든 요청을 실행하므로 로그를 확인하기 쉽다는 장점이 있습니다.
그에 반해 MSA의 경우에는 각 서비스의 복잡도가 낮아지고 역할 분담이 용이하지만 클라이언트의 요청을 받았을 때 여러 개의 마이크로 서비스 간에 통신이 발생해 로그를 확인하기 어려운 문제가 있습니다.
이를 해결하기 위한 어플리케이션 간 분산 추적을 위한 표준이 OpenTracing이며, 대표적은 구현체는 zipkin과 jaeger가 있습니다.
클라이언트가 서버로 호출한 하나의 호출을 Trace라고 했을 때, 서비스 컴포넌트간의 호출을 Span이라고 한다.각 서비스 컴포넌트들은 하나의 클라이언트 호출을 추적하기 위해서 같은 Trace Id를 사용하고,
각 서비스간의 호출은 각각 다른 SpanId를 사용합니다. 이렇게 함으로써 전체 트렌젝션 시간을 Trace로 추적이 가능하고, 각 서비스별 구간 시간은 Span으로 추적할 수 있습니다.