0Pricing
React Academy · 강의

프런트엔드와 백엔드 추적 정보 연계

fetch 요청을 통해 추적 컨텍스트를 전달해 백엔드 스팬이 이를 유발한 UI 동작과 동일한 추적 정보 아래에 표시되도록 합니다.

프런트엔드와 백엔드 추적 정보 연계은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

분산 트레이스의 목표

프런트엔드 관측성의 궁극적인 목표는 React에서 사용자가 클릭한 순간부터 네트워크, API 처리기, 서비스 호출을 거쳐 느린 응답을 일으킨 데이터베이스 쿼리까지 연결하는 하나의 트레이스를 만드는 것입니다. 이러한 종단 간 트레이스를 사용하면 근본 원인을 즉시 분석할 수 있습니다.

W3C TraceContext 표준

W3C TraceContext 사양은 traceparent 헤더 형식을 정의합니다: version-traceId-parentSpanId-flags. 예시 값은 다음과 같습니다: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01. 트레이스 ID는 전체 분산 트레이스에서 공유되며, 부모 스팬 ID는 각 홉마다 변경됩니다.

헤더 자동 주입

OpenTelemetry fetch 계측은 모든 발신 fetch 요청에 traceparent 헤더를 자동으로 주입합니다. 이 헤더에는 현재 트레이스 ID와 프런트엔드 fetch 스팬의 스팬 ID가 부모로 포함되므로 백엔드에서 프런트엔드 스팬에 연결된 자식 스팬을 만들 수 있습니다.

백엔드 트레이스 연속성

서버에서는 Node.js/Express용 OpenTelemetry HTTP 계측이 수신된 traceparent 헤더를 읽고 프런트엔드 fetch 스팬의 자식인 스팬을 생성합니다. 트레이스 ID가 유지되므로 Jaeger 또는 Grafana Tempo에서 전체 연결인 브라우저 스팬 → Express 스팬 → 데이터베이스 스팬을 하나의 워터폴 보기로 표시할 수 있습니다.

Jaeger 또는 Grafana Tempo에서 트레이스 확인하기

프런트엔드와 백엔드 모두에 계측을 적용한 후 Jaeger 또는 Grafana Tempo를 열고 트레이스 ID를 검색하십시오. 상단의 React 컴포넌트 스팬, 그 아래의 fetch 스팬, 이어서 Express 라우트 처리기 스팬과 데이터베이스 쿼리 스팬으로 이어지는 전체 워터폴을 각 지속 시간 및 속성과 함께 확인할 수 있습니다.

사용자별 상관관계 분석

span.setAttribute('user.id', userId)를 사용하여 React 앱의 모든 스팬에 user.id를 속성으로 설정하십시오. 백엔드에서도 동일하게 설정합니다. 이제 관측성 백엔드에서 특정 사용자 ID의 모든 트레이스를 필터링하여 표시할 수 있으므로 특정 고객이 보고한 문제를 진단할 수 있습니다.

세션별 상관관계 분석

페이지를 로드할 때 고유한 세션 ID를 생성하고 모든 프런트엔드 스팬에서 session.id로 설정하십시오. 요청 헤더에 이를 포함하여 백엔드에서도 백엔드 스팬에 추가하도록 하십시오. 세션 상관관계를 사용하면 하나의 세션에서 사용자가 수행한 전체 작업 순서를 재구성할 수 있습니다.

RUM 세션을 트레이스에 연결하기

Datadog과 같은 상용 도구는 RUM 세션을 APM 트레이스와 기본적으로 통합합니다. Datadog RUM SDK는 fetch 요청에 특정 헤더(X-Datadog-Trace-Id)를 주입하고, 백엔드의 Datadog APM SDK는 이 헤더를 읽어 RUM 세션 재생을 분산 트레이스에 연결합니다. 따라서 세션 재생을 보면서 동시에 트레이스를 확인할 수 있습니다.

상관관계 분석의 효과

한 사용자가 결제가 느리다고 불평한다고 가정해 보십시오. 상관관계가 설정된 트레이스를 사용하면 관측성 백엔드에서 user.id로 검색하여 결제 트레이스를 찾고, 두 개의 큰 테이블을 조인하는 900ms의 데이터베이스 쿼리가 지연의 원인이었다는 사실을 즉시 확인할 수 있습니다. 이는 프런트엔드 메트릭만으로는 보이지 않는 문제입니다.

프록시로서의 OpenTelemetry Collector

브라우저는 CORS 제한과 자격 증명 노출 때문에 Jaeger 또는 다른 백엔드로 트레이스를 직접 보낼 수 없습니다. 대신 OpenTelemetry Collector를 프록시로 실행하십시오. OTLPTraceExporter가 Collector 엔드포인트로 전송하도록 구성하면 Collector가 Jaeger, Grafana Tempo 또는 다른 백엔드로 데이터를 분배합니다.

개인정보 보호 고려 사항

프런트엔드 트레이스에는 URL의 양식 필드 값, 스팬 속성의 PII, 헤더의 세션 토큰과 같은 민감한 데이터가 실수로 포함될 수 있습니다. 스팬 속성에 민감한 데이터가 포함되지 않도록 계측을 검토하십시오. span.setAttribute는 신중하게 사용하고 기록하기 전에 URL 쿼리 매개변수를 정제하십시오.

traceparent 헤더 형식

W3C TraceContext traceparent 헤더의 형식은 무엇입니까?

학습 내용 정리

프런트엔드와 백엔드 트레이스를 상관관계로 연결하면 사용자의 전체 요청 여정에 대한 종단 간 가시성이 확보됩니다. W3C TraceContext traceparent 헤더는 OpenTelemetry 계측을 통해 브라우저 fetch 스팬과 백엔드 스팬을 자동으로 연결합니다. 대상이 분명한 디버깅을 위해 모든 스팬을 user.id와 session.id로 보강하십시오. CORS 문제와 자격 증명 노출을 방지하려면 OpenTelemetry Collector를 브라우저와 백엔드 사이의 프록시로 사용하십시오.

자주 묻는 질문

“프런트엔드와 백엔드 추적 정보 연계” 강의는 무료인가요?

네 — “프런트엔드와 백엔드 추적 정보 연계” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“프런트엔드와 백엔드 추적 정보 연계”에서 뭘 배우나요?

fetch 요청을 통해 추적 컨텍스트를 전달해 백엔드 스팬이 이를 유발한 UI 동작과 동일한 추적 정보 아래에 표시되도록 합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“프런트엔드와 백엔드 추적 정보 연계” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 프런트엔드 관측 가능성: 무엇이며 왜 필요한가
  2. 브라우저에서 수집하는 OpenTelemetry 추적
  3. 실사용자 모니터링과 웹 바이털
  4. 프런트엔드와 백엔드 추적 정보 연계
← React Academy(으)로 돌아가기