Chaos Proxy API 발표: CI/CD에서 네트워크 혼란 자동화 🚀

발행: (2025년 12월 21일 오후 11:45 GMT+9)
8 min read
원문: Dev.to

Source: Dev.to

Ilya Ploskovitov

“Localhost” 테스트를 넘어

지금까지 Debuggo는 수동 테스트를 위한 훌륭한 도구였습니다. 프록시를 띄우고, 휴대폰을 연결한 뒤, 앱이 503 오류나 높은 지연 시간을 어떻게 처리하는지 확인할 수 있습니다. 즉석 디버깅에 매우 유용합니다.

하지만 수동 테스트는 규모를 확장할 수 없습니다.

QA 팀에게 모든 Pull Request마다 오프라인 모드 처리를 수동으로 검증하도록 요청할 수 없습니다. 매 배포 전마다 결제 게이트웨이가 더블 클릭을 올바르게 처리하는지 수동으로 확인할 수도 없습니다.

진정으로 탄력적인 앱을 만들려면 Continuous Chaos가 필요합니다.

오늘, 우리는 Chaos Proxy API를 출시합니다. 이제 프록시를 프로그래밍 방식으로 생성하고, 혼돈 규칙을 설정하며, 이를 해제할 수 있습니다—모두 CI/CD 파이프라인(GitHub Actions, GitLab CI, Jenkins) 내에서 가능합니다.

아키텍처: CI에서 작동 방식

API를 사용하면 파이프라인 스크립트에서 Chaos Proxy의 전체 수명 주기를 직접 제어할 수 있습니다:

작업설명
Create요청 시(POST /sessions) 새롭고 격리된 프록시 인스턴스를 즉시 시작합니다.
ConfigureJSON(PUT /rules)을 통해 혼돈 규칙(지연, 오류, 본문 변조)을 적용합니다.
CertifyAndroid 에뮬레이터 또는 iOS 시뮬레이터에 설치할 CA 인증서를 다운로드합니다(GET /certs).
Test프록시를 통해 트래픽을 라우팅하면서 E2E 스위트(Playwright, Appium, Cypress)를 실행합니다.
Destroy테스트가 끝나면 리소스를 정리합니다(DELETE /sessions).

실제 예시: GitHub Actions

아래는 전체 워크플로우 예시입니다. 프록시를 시작하고, 느린 네트워크를 시뮬레이션하기 위해 3초 지연을 주입하며, UI가 “Rage Clicks”(분노 클릭)를 올바르게 처리하는지 확인하기 위해 테스트를 실행하고, 마지막으로 모든 것을 종료합니다.

name: 🧪 Chaos E2E Tests
on: [push]

jobs:
  chaos-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      # 1. Start the Proxy
      - name: 🚀 Start Debuggo Proxy
        id: start_proxy
        run: |
          RESPONSE=$(curl -s -X POST https://chaos-proxy.debuggo.app/api/v1/sessions \
            -H "Authorization: Bearer ${{ secrets.DEBUGGO_API_KEY }}")

          # Extract and save details to ENV
          echo "PROXY_ID=$(echo $RESPONSE | jq -r .id)" >> $GITHUB_ENV
          echo "PROXY_HOST=$(echo $RESPONSE | jq -r .host)" >> $GITHUB_ENV
          echo "PROXY_PORT=$(echo $RESPONSE | jq -r .port)" >> $GITHUB_ENV
          echo "PROXY_AUTH=$(echo $RESPONSE | jq -r .auth)" >> $GITHUB_ENV

      # 2. Configure Chaos (The "Bad 3G" Simulation)
      - name: 💣 Configure Chaos Rules
        run: |
          curl -X PUT https://chaos-proxy.debuggo.app/api/v1/sessions/$PROXY_ID/rules \
            -H "Authorization: Bearer ${{ secrets.DEBUGGO_API_KEY }}" \
            -H "Content-Type: application/json" \
            -d '{
              "rules": [
                {
                  "url_pattern": "*/api/checkout",
                  "delay": 3000,
                  "error_code": null
                }
              ]
            }'

      # 3. Run Tests
      - name: 🧪 Run Playwright Tests
        run: |
          # Route traffic through the authenticated proxy
          export HTTPS_PROXY="http://$PROXY_AUTH@$PROXY_HOST:$PROXY_PORT"
          npx playwright test

      # 4. Cleanup (Always run this, even if tests fail)
      - name: 🧹 Cleanup
        if: always()
        run: |
          curl -X DELETE https://chaos-proxy.debuggo.app/api/v1/sessions/$PROXY_ID \
            -H "Authorization: Bearer ${{ secrets.DEBUGGO_API_KEY }}"

Source:

API 레퍼런스

Chaos Proxy를 사용자 정의 스크립트에 통합하려면 다음 엔드포인트를 사용하세요.

인증

모든 요청은 Authorization 헤더에 API 키를 포함해야 합니다. 대시보드 설정에서 키를 생성하세요.

Authorization: Bearer dbg_ci_YOUR_KEY

프록시 세션 시작

새로운 격리된 프록시 컨테이너를 생성합니다. 호스트, 포트 및 인증 정보를 반환합니다.

엔드포인트: POST /api/v1/sessions

응답 예시:

{
  "id": "sess_abc123",
  "host": "proxy-us-east.debuggo.app",
  "port": 10245,
  "auth": "user:pass"
}

규칙 구성

실시간으로 혼돈 로직을 업데이트합니다. 테스트 중에 규칙을 변경할 수 있습니다(예: 먼저 성공 테스트를 수행하고, 그 다음에 실패를 주입).

엔드포인트: PUT /api/v1/sessions/{session_id}/rules

본문 예시:

{
  "rules": [
    {
      "url_pattern": "*/api/v1/checkout",
      "failure_rate": 100,
      "error_code": 503,
      "delay": 0
    },
    {
      "url_pattern": "*/api/v1/search",
      "delay": 2000
    }
  ]
}

CA 인증서 다운로드

Root CA 인증서를 가져옵니다. CI 환경에서 Android 에뮬레이터 또는 iOS 시뮬레이터를 자동으로 설정할 때 필수입니다.

엔드포인트: GET /api/v1/certs/ca.pem

사용 예시:

curl -O https://chaos-proxy.debuggo.app/api/v1/certs/ca.pem
# 그런 다음 adb 등으로 설치합니다.

세션 중지

프록시를 종료하고 포트를 해제합니다.

엔드포인트: DELETE /api/v1/sessions/{session_id}

왜 혼돈(Chaos)을 자동화할까요?

“불행한 경로”에서 회귀를 포착합니다.
개발자는 종종 정상 흐름에만 집중하다가 오류 처리 로직을 깨뜨립니다. 자동화된 혼돈 테스트는 엣지 케이스 실패를 조기에 잡아내어, 프로덕션에서 애플리케이션이 회복력을 유지하도록 합니다.

로컬에서는 오류를 거의 보지 못합니다. 500 오류 테스트를 자동화하면 “뭔가 잘못되었습니다” 화면이 절대 깨지지 않도록 보장합니다.

멱등성(Idempotency) 검증
CI 중에 결제 엔드포인트에 지연을 주입함으로써, 백엔드가 중복 요청(레이지 클릭)을 프로덕션에 도달하기 전에 올바르게 처리하는지 확인할 수 있습니다.

네이티브 모바일 테스트
Playwright의 내장 page.route(브라우저 컨텍스트에서만 작동)와 달리, Debuggo는 시스템 수준에서 동작합니다. 이를 통해 CI 파이프라인 내 에뮬레이터에서 실행되는 네이티브 Android 및 iOS 앱을 테스트할 수 있습니다.

목적을 가지고 빌드를 깨뜨릴 준비가 되셨나요? API 키 받기.

Back to Blog

관련 글

더 보기 »