# SDK 레이턴시

핵클 SDK는 **네트워크 호출 없이** 동작하도록 구현되어있습니다. 따라서 웹사이트, 앱, 서버의 속도 저하 없이 A/B 테스트 분배, 기능 플래그 결정, 원격 구성 확인, 이벤트 전송을 처리할 수 있습니다.

SDK는 초기화 과정에서 핵클 서버로부터 A/B 테스트, 기능 플래그 등의 설정 정보를 받아와 내부에 저장합니다. 이후, 설정에 따른 분배는 저장된 정보를 기반으로 처리됩니다. 네트워크 호출이 필요 없으므로 분배 로직은 빠르게 처리됩니다.

또한, SDK를 통해 수집되는 이벤트 데이터는 즉시 서버로 전송되지 않습니다. 대신, SDK 내부에 임시 저장되었다가 정해진 주기마다 비동기 방식으로 서버로 일괄 전송됩니다. 이벤트 전송`track()` 과정에서 네트워크 호출이 발생하지 않으므로 속도 저하 없이 데이터 처리가 가능합니다.

클라이언트, 서버 SDK는 각 환경의 특성에 맞춰 설계되었으며, 이에 따라 동작 로직에 미세한 차이가 있습니다.

### Client-side SDK

![](/files/CTrIXJbOUwT2WXryVyxK)

1. SDK 초기화시 대시보드에 설정된 정보를 SDK로 가져와서 저장합니다. 주기적으로 가져오게 하거나, 직접 가져올 수도 있습니다
2. A/B 테스트, 기능플래그, 원격구성 호출시 네트워크 호출 없이 SDK 내부에 저장된 설정정보만 가지고 처리가 됩니다. 이벤트 전송 호출시 서버로 즉시 전송하지 않고 내부 저장소에만 저장해 놓습니다.
3. 주기적으로 백그라운드 작업을 통해 수집된 이벤트들을 핵클 서버로 비동기로 전송합니다. 앱이 종료되거나 웹사이트가 닫힐 때 남아있는 이벤트를 핵클 서버로 전송합니다.

### Server-side SDK

![](/files/70eGY5Xgy7dGusvLEBRb)

1. SDK 초기화시 대시보드에 설정된 정보를 SDK로 가져와서 저장합니다. 이후 10초마다 최신 설정 정보를 가져옵니다
2. A/B 테스트, 기능플래그, 원격구성 호출시 네트워크 호출 없이 SDK 내부에 저장된 설정정보만 가지고 처리가 됩니다. 이벤트 전송 호출시 서버로 즉시 전송하지 않고 내부 저장소에만 저장해 놓습니다.
3. 주기적으로 백그라운드 작업을 통해 수집된 이벤트들을 핵클 서버로 비동기로 전송합니다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.hackle.io/development-guide/sdk/sdk-latency.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
