SDK 레퍼런스테스트·관측

테스트·관측

테스트 도구

모든 SDK에는 네트워크와 API Key 없이 SDK를 쓰는 내 코드를 테스트하는 가짜 전송 계층이 있습니다. 실제로 발송하지 않고, 보냈을 요청을 기록하고, 원하는 응답이나 오류를 주입할 수 있습니다.

언어테스트 도구설치
JavaFakeTransporttestImplementation 'io.github.icomm-api:bizgo-sdk-comm-java-testing:1.2.0'
Node.jsFakeFetch패키지에 포함 (@bizgo/bizgo-sdk-comm-js/testing)
PythonFakeTransport패키지에 포함 (bizgo.testing)
Gobizgotest.New()모듈에 포함 (bizgo-sdk-comm-go/bizgotest)
PHPFakeTransport패키지에 포함 (Bizgo\Testing)
C#FakeBizgoHandlerdotnet add package Bizgo.Sdk.Comm.Testing --version 1.2.0
Java
import io.github.icommapi.bizgo.testing.*;

FakeTransport fake = new FakeTransport();
Bizgo client = fake.client(); // 가짜 키, 속도 제한 끔, 네트워크 연결 없음

client.send().sms("01000000000", "01000000000", "hello"); // 기본: 수신자마다 A000 + 가짜 msgKey
RecordedRequest request = fake.lastRequest();
assertEquals("sendOmni", request.getOperationId());

fake.on("sendOmni")
        .thenFail(ErrorLayer.SERVICE, 429, "A020")      // 다음 호출: 속도 제한
        .thenSendResult("A000", "A306");                // 그다음: 두 번째 수신자 거절

// 웹훅 테스트 요청 (서명 방식은 실제와 같음)
WebhookSigner.SignedWebhook hook = WebhookSigner.sign("test-webhook-secret", "{\"msgKey\":\"K001\"}");
ReportWebhookPayload report = new WebhookReceiver("test-webhook-secret").report(hook.headers(), hook.body());
  • 기본 응답: 응답을 지정하지 않으면 성공으로 답합니다. 발송·예약 등록은 수신자마다 A000과 가짜 msgKey를 돌려주고, 그 밖의 API는 빈 결과입니다.
  • 응답 주입: 성공 결과, 서비스·게이트웨이 오류, 네트워크 오류, 타임아웃을 지정할 수 있습니다. 지정한 순서대로 쓰이고 마지막 응답이 반복됩니다.
  • 기록: 요청마다 operation, 메서드, 경로, 쿼리, JSON 본문을 기록합니다. 헤더 값(API Key 포함)은 기록하지 않습니다.

관측 (hooks)

API 호출마다 시작·종료 hook이 불립니다. 재시도를 포함한 한 호출에 한 번씩 불리며(C#은 시도마다), 메트릭이나 로그를 남길 때 씁니다.

hook에는 operationId, 리소스.메서드(예: send.omni), HTTP 메서드, 경로 템플릿(/api/comm/v1/report/inquiry/{msgKey}), 상태 코드, 오류 단계·코드, 시도 횟수, 소요 시간만 넘어갑니다. 본문·쿼리·헤더 값·실제 경로 값·전화번호·API Key는 넘기지 않습니다. hook에서 난 예외는 SDK가 무시하므로 발송 결과에 영향을 주지 않습니다.

Java
Bizgo client = Bizgo.builder()
        .hook(new RequestHook() {
            @Override
            public void onRequestEnd(RequestEvent e) {
                metrics.record(e.getOperationId(), e.getStatus(), e.getErrorCode(), e.getAttempts(), e.getDuration());
            }
        })
        .build();

OpenTelemetry

모든 SDK가 호출마다 CLIENT span 하나를 만들 수 있습니다. span 이름은 bizgo <리소스>.<메서드>(예: bizgo send.omni)이고, 속성은 http.request.method, url.template, http.response.status_code, bizgo.operation_id, bizgo.code, bizgo.layer, bizgo.retry_count, 실패 시 error.type입니다. 비즈고로 trace 헤더를 보내지는 않습니다.

OpenTelemetry 연동은 선택 사항이라, 쓸 때만 아래 패키지를 추가합니다. SDK 본체의 의존성은 늘지 않습니다.

Java
// implementation 'io.github.icomm-api:bizgo-sdk-comm-java-opentelemetry:1.2.0'
Bizgo client = Bizgo.builder().hook(BizgoTracing.create(GlobalOpenTelemetry.get())).build();

C#의 netstandard2.0 빌드(.NET Framework 등)는 의존성을 늘리지 않으려고 span을 만들지 않습니다. 이 경우 hooks로 직접 연결하세요.