본문 바로가기
클라우드/쿠버네티스

🔍 분산 추적의 핵심 구성 요소, 스팬(Span) 완벽 정복하기!

by gasbugs 2025. 10. 12.

 

안녕하세요! 오늘은 복잡한 마이크로서비스 아키텍처(MSA) 환경에서 시스템의 동작을 이해하고 문제를 해결하는 데 필수적인 '분산 추적(Distributed Tracing)'의 심장과도 같은 개념, 바로 스팬(Span)에 대해 알아보려고 합니다. 🚀

 


🤔 분산 추적? 그게 왜 필요한가요?

최신 애플리케이션은 여러 개의 작은 서비스들이 서로 통신하며 하나의 큰 서비스를 구성하는 경우가 많습니다. 사용자의 요청 하나가 들어오면, 그 요청을 처리하기 위해 내부적으로 수많은 서비스들이 얽히고설켜 동작하게 되죠.

이런 환경에서 특정 요청이 느려지거나 오류가 발생했을 때, 수많은 서비스 중 정확히 어느 지점에서 문제가 발생했는지 찾아내는 것은 정말 어려운 일입니다. 🕵️‍♂️ 마치 거대한 미로 속에서 길을 잃는 것과 같죠.

이때, 요청의 전체 여정을 처음부터 끝까지 추적하여 각 단계별 성능과 흐름을 시각적으로 보여주는 기술이 바로 '분산 추적'입니다. 그리고 이 위대한 여정을 구성하는 가장 작은 단위가 바로 '스팬(Span)'입니다.

🏗️ 스팬(Span)이란 무엇일까요?

스팬(Span): 추적(Trace) 내의 단일 작업 또는 작업 단위

가장 간단하게 정의하면 위와 같습니다. 조금 더 쉽게 비유를 들어볼까요?

우리가 서울에서 부산까지 여행을 간다고 상상해봅시다. 🗺️ 이 전체 여행 과정이 하나의 '추적(Trace)'입니다.

이 여정은 여러 단계로 이루어져 있죠.

  1. 집에서 서울역까지 버스 타기 🚌
  2. 서울역에서 부산역까지 KTX 타기 🚄
  3. 부산역에서 숙소까지 택시 타기 🚕

여기서 버스 타기, KTX 타기, 택시 타기 등 각각의 개별적인 행동 하나하나가 바로 '스팬(Span)'이 되는 것입니다.

즉, 여러 개의 스팬(Span)이 모여 하나의 완전한 추적(Trace)을 구성하는 것이죠!

💻 스팬의 실제 예시

실제 시스템에서는 스팬이 어떻게 표현될까요? 사용자가 웹사이트에서 버튼을 클릭했을 때 발생하는 요청을 예로 들어보겠습니다.

  1. 클라이언트 요청 시작 (Root Span): 사용자가 브라우저에서 요청을 보냅니다.
  2. API 게이트웨이 호출 (Child Span): 요청이 API 게이트웨이에 도착합니다.
  3. 인증 서비스 호출 (Child Span): 사용자의 권한을 확인합니다.
  4. 주문 서비스 호출 (Child Span): 주문 관련 비즈니스 로직을 처리합니다.
  5. 데이터베이스 쿼리 (Child Span): 주문 정보를 데이터베이스에 저장하거나 조회합니다. 🗄️

이처럼 사용자의 단일 요청을 처리하는 과정에서 발생하는 모든 개별 작업(API 호출, DB 쿼리, 함수 실행 등)이 각각의 스팬으로 기록됩니다.

각 스팬은 다음과 같은 중요한 정보들을 담고 있습니다.

  • 작업 이름: 어떤 작업인지 나타냅니다. (예: HTTP GET /users/{id})
  • 시작 및 종료 시간: 작업이 언제 시작해서 언제 끝났는지 ⏱️
  • 속성(Tags/Attributes): HTTP 메소드, URL, 상태 코드 등 작업에 대한 상세 정보 🏷️
  • 이벤트(Logs): 작업 중간에 발생한 특정 이벤트 기록 📝

이러한 스팬 정보들이 시간 순서대로, 그리고 부모-자식 관계의 계층 구조로 연결되어 하나의 완전한 '추적'을 형성합니다. 개발자들은 이 추적 정보를 통해 전체 요청의 흐름을 한눈에 파악하고, 병목 지점이나 오류 원인을 신속하게 찾아낼 수 있습니다. 💡

✨ 정리하며

복잡한 분산 시스템을 효과적으로 관찰하고 관리하기 위해 '스팬'의 개념을 이해하는 것은 매우 중요합니다.

  • 스팬(Span)은 추적을 구성하는 가장 기본적인 작업 단위입니다.
  • API 호출, DB 쿼리 등 논리적인 일의 단위를 나타냅니다.
  • 여러 스팬이 모여 하나의 완전한 추적(Trace)을 이룹니다.

이제 '스팬'이라는 단어를 들으면, 전체 여행 경로 중 하나의 특정 구간을 떠올려보세요! 훨씬 이해하기 쉬울 거예요. 😉