프론트엔드

Sentry 를 알아보자 - (1) Trace, Transaction, Span 이란?

CodeBoyEd 2024. 2. 4. 23:28

Sentry Docs - Distributed Tracing 을 요약한 내용입니다.

Trace 란?

Trace 는 추적한다는 의미를 갖고 있는데요, 무엇을 추적한다는 의미일까요?

 

애플리케이션은 여러가지 서비스로 구성됩니다. 네트워크를 단위로 분리해보면 다음과 같은 서비스들이 있습니다.

  • Frontend (Single-Page Application)
  • Backend (REST API)
  • Task Queue
  • Database Server
  • Cron Job Scheduler

이 서비스들은 다른 언어로 다른 플랫폼들에서 운영됩니다.

Sentry SDK를 설치하더라도 개별적으로 운영되기 때문에 전반적인 흐름을 알기에는 어려움이 있습니다.

Tracing은 이러한 데이터들을 모아서 전체 흐름을 추적한다는 의미입니다.

 

만약, PageLoad 시에 위에서 나열한 것과같이 여러 서비스에서 작업(서버 요청, DB 요청 등)이 필요한 경우, 모든 작업을 추적하는 것을 Trace 라고 합니다.

이런 경우 추적해야할 목록들이 여러 서비스에 분배되어 있기 때문에 Disributed Tracing 이라고 합니다.

 Transaction, Span 이란?

Trace는 하나 이상의 Transaction으로 구성된 tree 구조입니다. 이때, 트리구조에서 Transaction을 포함한 하위 노드들을 Span이라고 부릅니다.

출저: https://docs.sentry.io/product/sentry-basics/concepts/tracing/distributed-tracing/

 

 

트리구조를 이룬다는 말은 부모-자식 관계로 표현될 수 있습니다. 하나의 함수가 여러 개의 다른 작은 함수를 호출할 수 있습니다.

이런 경우에 부모-자식 스팬을 형성할 수 있습니다. 모든 트리에는 하나의 루트가 있어야하는데 최상위 스팬은 트랜잭션 자체를 나타냅니다.

출저: https://docs.sentry.io/product/sentry-basics/concepts/tracing/distributed-tracing/

 

예시를 들어보겠습니다. 

 

Pageload 과정에서 트랜잭션과 스팬은 다음과 같은 예시가 있을 수 있습니다.

  • Transaction
    • 1 browser transaction (for page load)
  • Browser Page-load Transaction: 7 spans
    • 1 root span representing the entire page load
    • 1 span each (3 total) for the HTML, CSS, and JS requests
    • 1 span for the rendering task, which itself contains
      • 2 child spans, one for each JSON request

 

지금까지 Trace, Transaction, Span 의 개념에 대해 알아보았습니다. 페이지 로딩 속도가 느릴 경우, Trace 정보를 통해 어떤 Transaction, Span에서 발생한 문제인지 확인하고, 성능 개선을 위한 대응책을 수립할 수 있습니다.