테스트·관측
테스트 도구
모든 SDK에는 네트워크와 API Key 없이 SDK를 쓰는 내 코드를 테스트하는 가짜 전송 계층이 있습니다. 실제로 발송하지 않고, 보냈을 요청을 기록하고, 원하는 응답이나 오류를 주입할 수 있습니다.
| 언어 | 테스트 도구 | 설치 |
|---|---|---|
| Java | FakeTransport | testImplementation 'io.github.icomm-api:bizgo-sdk-comm-java-testing:1.2.0' |
| Node.js | FakeFetch | 패키지에 포함 (@bizgo/bizgo-sdk-comm-js/testing) |
| Python | FakeTransport | 패키지에 포함 (bizgo.testing) |
| Go | bizgotest.New() | 모듈에 포함 (bizgo-sdk-comm-go/bizgotest) |
| PHP | FakeTransport | 패키지에 포함 (Bizgo\Testing) |
| C# | FakeBizgoHandler | dotnet add package Bizgo.Sdk.Comm.Testing --version 1.2.0 |
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가 무시하므로 발송 결과에 영향을 주지 않습니다.
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 본체의 의존성은 늘지 않습니다.
// 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로 직접 연결하세요.