신서틱 모니터링(Synthetic Monitoring)

[!tldr] 한줄 요약 가상 사용자의 요청을 전 세계 여러 위치에서 주기적으로 시뮬레이션하여 API 가용성, 사용자 여정, SSL 인증서 등을 능동적으로 감시하고, CI/CD에 통합하여 배포 전 자동 검증 게이트로도 활용한다.

핵심 내용

Synthetic Monitoring이란

코드 없이 API/브라우저/모바일 테스트를 만들어, 가상 사용자 트래픽을 자동 시뮬레이션하는 능동적(Proactive) 모니터링이다. 실제 사용자가 없는 새벽에도 24/7 감시할 수 있다.

RUM과의 비교

RUM이 "실제 사용자를 관측(수동적)"이라면, Synthetic은 "가상 사용자로 테스트(능동적)"이다. 둘은 서로 보완 관계다.

Synthetic MonitoringRUM
방식가상 사용자 시뮬레이션실제 사용자 데이터 수집
시점문제 발생 감지문제 발생 분석
트래픽없어도 24/7 모니터링실제 트래픽 필요
용도가용성/SLO 감시, 배포 검증사용자 경험 분석, 에러 재현
과금테스트 실행 횟수 기반세션 수 기반

[!tip] 함께 쓰면 강력하다 Synthetic으로 성능 기준선(Baseline)을 잡고 조기 경고를 받고, RUM으로 실제 사용자의 다양한 환경에서의 문제를 파악한다.

테스트 종류

Synthetic Tests는 API 테스트, Multistep API 테스트, 브라우저 테스트 세 가지로 나뉜다.

API 테스트 (단일 요청)

8가지 네트워크 레이어에서 단일 요청을 검증한다:

서브타입용도검증 예시
HTTPAPI 엔드포인트 가용성/성능상태 코드, 응답 시간, body 내용
SSL인증서 유효성만료일까지 30일 이상 남았는지
DNS도메인 해석올바른 IP로 해석되는지, 응답 시간
TCP포트 연결특정 포트가 열려있는지
UDPUDP 서비스DNS 서버 등 UDP 기반 서비스
ICMP네트워크 연결ping 응답, 패킷 손실, traceroute
WebSocketWebSocket 연결핸드셰이크 성공, 메시지 응답
gRPCgRPC 서비스health check, unary call 응답

Multistep API 테스트 (체이닝)

여러 API 호출을 순서대로 실행하며, 이전 응답에서 추출한 값을 다음 요청에 전달한다. 인증 → 조회 → 수정 같은 흐름 전체를 검증할 때 사용한다.

브라우저 테스트 (사용자 여정)

Chrome 레코더 확장으로 사용자 행동을 녹화하여 코드 없이 테스트를 만든다. 실제 브라우저(Chrome, Firefox, Edge)와 디바이스(Desktop, Mobile)에서 실행된다.

실행 위치

위치설명용도
Managed LocationsDatadog이 운영하는 전 세계 데이터센터공개 웹사이트/API
Private LocationsDocker 컨테이너로 사내 네트워크에 설치내부 앱, VPN 뒤 시스템

Private Location은 Datadog 서버에서 HTTPS로 테스트 설정을 받아와 실행하고, 결과만 Datadog에 전송한다. 내부 네트워크를 외부에 노출하지 않는다.

CI/CD 연동 (Continuous Testing)

Synthetic 테스트를 배포 파이프라인에 넣어 배포 전 자동 검증 게이트로 활용한다.

지원 CI: GitHub Actions, GitLab, Jenkins, CircleCI, Azure DevOps

# GitHub Actions 예시
- name: Run Datadog Synthetic Tests
  uses: DataDog/synthetics-ci-github-action@v1
  with:
    api_key: ${{ secrets.DD_API_KEY }}
    app_key: ${{ secrets.DD_APP_KEY }}
    test_search_query: 'tag:critical'

tag:critical로 태깅된 핵심 테스트만 실행하여, 결제 플로우 테스트가 실패하면 배포를 막는다.

과금

테스트 타입과금 단위
API 테스트10,000 실행당
브라우저 테스트1,000 실행당

CI/CD에서 병렬 실행 속도를 높이려면 Parallel Testing 슬롯을 추가 구매한다.

예시

API 테스트 — 헬스체크

테스트: HTTP GET https://api.example.com/health
실행 주기: 1분마다
실행 위치: 서울, 도쿄, 버지니아
검증 조건:
  - 상태 코드 = 200
  - 응답 시간 < 500ms
  - body에 {"status": "ok"} 포함
알림: 2회 연속 실패 시 Slack #ops 채널

SSL 인증서 만료 감시

테스트: SSL → api.example.com:443
검증 조건: 인증서 만료까지 30일 이상
알림: 조건 미달 시 이메일 + PagerDuty

Multistep API — 인증 → 조회 흐름

Step 1: POST /auth/login (body: {email, password})
  → 응답에서 access_token 추출

Step 2: GET /api/orders (Header: Bearer {{access_token}})
  → 상태 코드 200, 응답이 배열

Step 3: GET /api/orders/{{orders[0].id}}
  → 주문 상세 조회 성공

브라우저 테스트 — 결제 플로우

Step 1: https://shop.example.com 접속
Step 2: 상품 목록에서 첫 번째 상품 클릭
Step 3: "장바구니 담기" 버튼 클릭
Step 4: 장바구니 아이콘 클릭
Step 5: "결제하기" 버튼 클릭
Step 6: 결제 페이지에 "주문 요약" 텍스트 확인

실행 주기: 15분 / 위치: 서울, 오사카
디바이스: Chrome Desktop, Chrome Mobile

[!example] 실패 시 제공되는 정보

  • 실패한 스텝의 스크린샷
  • 각 스텝의 응답 시간
  • 네트워크 워터폴 (어떤 리소스가 느렸는지)
  • APM 트레이스 연결 (백엔드 원인 확인)

Private Location — 사내 시스템

docker run -d --name dd-synth-worker \
  -e DATADOG_API_KEY=xxx \
  -e DATADOG_ACCESS_KEY=yyy \
  datadog/synthetics-private-location-worker

인터넷에 공개되지 않은 http://internal-admin.corp.local도 모니터링 가능.

참고 자료

관련 노트