For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.
실험 Go SDK
Amplitude Experiment의 서버측 Go SDK 구현에 대한 공식 문서입니다.
이 문서는 원격 및 로컬 평가를 위해 두 섹션으로 나뉘어져 있습니다.
원격 평가
원격 평가를 통해 사용자를 위해 변형을 가져오는 것을 구현합니다.
설치
go get를 사용하여 Go Server SDK를 설치하십시오.
go get github.com/amplitude/experiment-go-server
빠른 시작
// (1) Initialize the local evaluation client with a server deployment key.
client := remote.Initialize("<DEPLOYMENT_KEY>", nil)
// (2) Fetch variants for a user
user := &experiment.User{
UserId: "user@company.com",
DeviceId: "abcdefg",
UserProperties: map[string]interface{}{
"premium": true,
},
}
variants, err := client.Fetch(user)
if err != nil {
// Handle error
}
// (3) Access a flag's variant
variant := variants["<FLAG_KEY>"]
if variant.Value == "on" {
// Flag is on
} else {
// Flag is off
}
초기화
서버 시작 시 서버에서 SDK 클라이언트를 초기화합니다.apiKey 매개변수에 전달하는 배포 키 인수는 분석 이벤트를 전송하는 프로젝트와 동일한 프로젝트 내에 있어야 합니다.
func Initialize(apiKey string, config *Config) *Client
client := remote.Initialize("<DEPLOYMENT_KEY>", nil)
구성
초기화 시 SDK 클라이언트를 구성합니다.
EU 데이터 센터
Amplitude의 EU 데이터 센터를 사용하는 경우, 초기화 시 ServerZone 옵션을 구성하십시오.
| 이름 | 설명 | 기본값 |
|---|---|---|
Debug | 디버그 로깅을 활성화하려면 true로 설정하십시오. | false |
LogLevel | 출력할 최소 로그 수준입니다. 옵션: Verbose, Debug, Info, Warn, Error, Disable. 사용자 지정 로깅으로 이동합니다. | Error |
LoggerProvider | 맞춤형 로거 구현. 사용자의 LoggerProvider 로깅 솔루션과 통합할 수 있는 인터페이스를 구현하십시오. 사용자 지정 로깅으로 이동합니다. | defaultLoggerProvider 명령어는 stdout에 출력합니다 |
ServerZone | 사용할 Amplitude 데이터 센터입니다. USServerZone 또는 EUServerZone. | USServerZone |
ServerUrl | 플래그 구성을 가져올 호스트입니다. | https://api.lab.amplitude.com |
FlagConfigPollingInterval | 변형을 가져오는 데 필요한 시간 초과(밀리초)입니다. 이 시간 초과는 초기 요청에만 적용되며 후속 재시도에는 적용되지 않습니다 | 500 * time.Millisecond |
RetryBackoff.FetchRetries | 변형 가져오기 요청이 실패할 경우 시도할 재시도 횟수입니다. | 1 |
RetryBackoff.FetchRetryBackoffMin | 변형 가져오기 요청이 실패한 이후의 최소한(초기) 백오프입니다. SDK는 RetryBackoff.FetchRetryBackoffScalar에 따라 이 지연을 조정합니다. | 0 |
RetryBackoff.FetchRetryBackoffMax | 재시도 간의 최대 백오프입니다. 스케일링된 백오프가 최대값보다 커지면 SDK는 모든 후속 요청에 대해 최대값을 사용합니다. | 10 * time.Second |
RetryBackoff.FetchRetryBackoffScalar | 최소 백오프를 기하급수적으로 확장합니다. | 1 |
RetryBackoff.FetchRetryTimeout | 변형 가져오기를 재시도하기 위한 요청 시간 초과입니다. | 500 * time.Millisecond |
가져오기
사용자의 변형을 가져오고 결과를 반환합니다. 원격으로 평가 함수는 SDK 클라이언트를 초기화하는 데 사용된 배포와 관련된 플래그에 대해 사용자를 평가합니다.
func (c *Client) Fetch(user *experiment.User) (map[string]experiment.Variant, error)
| 매개 변수 | 요구 사항 | 설명 |
|---|---|---|
user | 필수 | 변형을 가져올 대상 사용자입니다. |
user := &experiment.User{
UserId: "user@company.com",
DeviceId: "abcdefg",
UserProperties: map[string]interface{}{
"premium": true,
},
}
variants, err := client.Fetch(user)
if err != nil {
// Handle error
}
사용자의 변형을 가져온 후에는 특정 플래그의 변형에 액세스할 수도 있습니다.
variant := variants["<FLAG_KEY>"]
if variant.Value == "on" {
// Flag is on
} else {
// Flag is off
}
옵션과 함께 V2 가져오기
옵션이 있는 사용자의 변형을 가져오고 결과를 반환합니다. 원격으로 평가 함수는 SDK 클라이언트를 초기화하는 데 사용된 배포와 관련된 플래그에 대해 사용자를 평가합니다.
func (c *Client) FetchV2WithOptions(user *experiment.User, fetchOptions *experiment.FetchOptions) (map[string]experiment.Variant, error)
user := &experiment.User{
UserId: "user@company.com",
DeviceId: "abcdefg",
UserProperties: map[string]interface{}{
"premium": true,
},
}
variants, err := client.FetchV2WithOptions(user, &experiment.FetchOptions{
TracksAssignment: true,
TracksExposure: true,
})
if err != nil {
// Handle error
}
FetchOptions
| 이름 | 설명 | 기본값 |
|---|---|---|
TracksExposure | true인 경우 SDK는 가져온 변형에 대한 노출 이벤트를 추적합니다. | false |
TracksAssignment | true인 경우 SDK는 가져온 변형에 대한 할당 이벤트를 추적합니다. | true |
지역 평가
로컬 평가를 통해 사용자에 대한 변형 평가를 구현합니다. 로컬 평가를 사용하려는 경우 트레이드오프를 이해해야 합니다.
설치
go get를 사용하여 Go Server SDK를 설치하십시오.
go get github.com/amplitude/experiment-go-server
빠른 시작
// (1) Initialize the local evaluation client with a server deployment key.
client := local.Initialize("<DEPLOYMENT_KEY>", &local.Config{
// (Recommended) Enable local evaluation cohort targeting.
CohortSyncConfig: &local.CohortSyncConfig {
ApiKey: "<API_KEY>",
SecretKey: "<SECRET_KEY>"
}
})
// (2) Start the local evaluation client.
err := client.Start()
if err != nil {
panic(err)
}
// (3) Evaluate a user.
user := &experiment.User{DeviceId: "abcdefg"}
variants, err := client.EvaluateV2(user, nil)
if err != nil {
panic(err)
}
초기화
로컬 평가 클라이언트를 초기화합니다.
func Initialize(apiKey string, config *Config) *Client
구성
초기화 시 SDK 클라이언트를 구성합니다.
EU 데이터 센터
Amplitude의 EU 데이터 센터를 사용하는 경우, 초기화 시 ServerZone 옵션을 구성하십시오.
구성
| 이름 | 설명 | 기본값 |
|---|---|---|
Debug | 디버그 로깅을 활성화하려면 true로 설정하십시오. | false |
LogLevel | 출력할 최소 로그 수준입니다. 옵션: Verbose, Debug, Info, Warn, Error, Disable. 사용자 지정 로깅으로 이동합니다. | Error |
LoggerProvider | 맞춤형 로거 구현. 사용자의 LoggerProvider 로깅 솔루션과 통합할 수 있는 인터페이스를 구현하십시오. 사용자 지정 로깅으로 이동합니다. | defaultLoggerProvider 명령어는 stdout에 출력합니다 |
ServerZone | 사용할 Amplitude 데이터 센터입니다. USServerZone 또는 EUServerZone. | USServerZone |
ServerUrl | 플래그 구성을 가져올 호스트입니다. | https://api.lab.amplitude.com |
FlagConfigPollingInterval | Start() 호출 후 업데이트된 플래그 구성을 폴링하는 간격 | 30 * time.Second |
FlagConfigPollerRequestTimeout | 플래그 구성 폴러에 의해 생성된 요청에 대한 시간 초과 | 10 * time.Second |
AssignmentConfig | 더 이상 사용되지 않습니다. 평가 후 할당 이벤트를 자동으로 추적하기 위한 구성입니다. | nil |
ExposureConfig | 평가 후 노출 이벤트를 추적하기 위한 구성입니다. | nil |
StreamUpdates | 스트리밍을 활성화하여 플래그 구성 업데이트를 수신하기 위한 폴링을 대체합니다. 매 초마다 폴링하는 대신, Amplitude 서버는 업데이트를 SDK에 푸시합니다. 일반적으로 1초 이내입니다. 어떤 이유로든 스트림이 실패할 경우 자동으로 폴링으로 되돌아가며 일정 간격을 두고 스트리밍을 재시도합니다. | false |
StreamServerUrl | 스트림 서버의 URL입니다. | https://stream.lab.amplitude.com |
StreamFlagConnTimeout | 유효한 플래그 구성 스트림을 설정하기 위한 시간 초과입니다. 여기에는 스트림 서버와의 연결을 설정하는 시간과 초기 플래그 설정을 수신하는 시간이 포함됩니다. | 1500 |
CohortSyncConfig | 로컬 평가 코호트 타겟팅을 위해 코호트 다운로드를 활성화하는 구성입니다. | nil |
할당설정
| 이름 | 설명 | 기본값 |
|---|---|---|
CacheCapacity | 할당 캐시에 저장되는 할당의 최대 수 | 524288 |
Config | 할당 이벤트를 추적하는 데 사용되는 기본 Amplitude 애널리틱스 SDK를 구성하는 옵션 |
ExposureConfig
| 이름 | 설명 | 기본값 |
|---|---|---|
CacheCapacity | 노출 캐시에 저장되는 최대 노출 수 | 524288 |
Config | 노출 이벤트를 추적하는 데 사용되는 기본 Amplitude 애널리틱스 SDK를 구성하는 옵션 |
CohortSyncConfig
| 이름 | 설명 | 기본값 |
|---|---|---|
ApiKey | 분석 API 키이며 실험 배포 키가 아닙니다. | 필수 |
SecretKey | 분석 비밀 키 | 필수 |
MaxCohortSize | SDK가 다운로드할 수 있는 코호트의 최대 크기입니다. 이 크기보다 큰 코호트는 다운로드되지 않습니다. | 2147483647 |
CohortPollingIntervalMillis | 코호트 업데이트를 위해 Amplitude를 폴링하는 간격(밀리초 단위)입니다(최소 60000). | 60000 |
CohortServerUrl | 코호트 데이터를 가져올 원본인 코호트 서버 엔드포인트입니다. EU 데이터 센터를 사용하려면 ServerZone로EUServerZone 설정하십시오. 이 값을 설정하면 ServerZone 기본값보다 우선하여 적용됩니다. | https://cohort-v2.lab.amplitude.com |
시작
로컬 평가 클라이언트를 시작하여 평가를 위한 로컬 평가 모드 플래그 구성을 미리 가져오고 구성된 간격에 따라 플래그 구성 폴러를 시작합니다.
func (c *Client) Start() error
Evaluate()를 호출하기 전에 플래그 구성이 준비되었는지 확인하려면 Start()의 결과를 기다려야 합니다
err := client.Start()
if err != nil {
panic(err)
}
평가
Start()에서 미리 가져온 플래그를 사용하여 평가 로직을 실행합니다. evaluate에 사용자 객체 인수를 지정해야 합니다. 플래그 변형의 특정 하위 집합만 필요한 경우 선택적으로 플래그 키 배열을 전달할 수 있습니다.
노출 추적
노출 추적을 활성화하려면 ExposureConfig을 설정하십시오. 그런 다음 EvaluateV2WithOptions()을 호출할 때 EvaluateOptions의 TracksExposure을 true(으)로 설정하십시오.
func (c *Client) EvaluateV2(user *experiment.User, flagKeys []string) (map[string]experiment.Variant, error)
| 매개 변수 | 요구 사항 | 설명 |
|---|---|---|
user | 필수 | 평가할 사용자입니다. |
flagKeys | 선택 사항 | 평가할 특정 플래그 또는 실험. nil 또는 비어 있으면 SDK는 모든 플래그와 실험을 평가합니다. |
// The user to evaluate
user := &experiment.User{DeviceId: "abcdefg"}
// Evaluate all flag variants
allVariants, err := client.EvaluateV2(user, nil)
if err != nil {
// Handle Error
}
// Evaluate a specific subset of flag variants
specificVariants, err := client.EvaluateV2(user, []string{
"<FLAG_KEY_1>",
"<FLAG_KEY_2>",
})
// Access a variant
variant := allVariants["<FLAG_KEY>"]
if variant.Value == "on" {
// Flag is on
} else {
// Flag is off
}
옵션을 사용하여 V2 평가
Start()에서 미리 가져온 플래그를 사용하여 평가 로직을 실행합니다. evaluate에 사용자 객체 인수를 지정해야 합니다. 플래그 변형의 특정 하위 집합만 필요한 경우 선택적으로 플래그 키 배열을 전달할 수 있습니다.
func (c *Client) EvaluateV2WithOptions(user *experiment.User, options *EvaluateOptions) (map[string]experiment.Variant, error)
user := &experiment.User{DeviceId: "abcdefg"}
variants, err := client.EvaluateV2WithOptions(user, &local.EvaluateOptions{
FlagKeys: []string{"flag-key-1", "flag-key-2"},
TracksExposure: true,
})
if err != nil {
// Handle Error
}
평가 옵션
| 이름 | 설명 | 기본값 |
|---|---|---|
FlagKeys | 평가할 특정 플래그 또는 실험. nil 또는 비어 있으면 SDK는 모든 플래그와 실험을 평가합니다. | nil |
TracksExposure | true인 경우 SDK는 평가된 변형에 대한 노출 이벤트를 추적합니다. | false |
로컬 평가 코호트 타겟팅
버전 1.7.0부터 로컬 평가 SDK 클라이언트는 로컬 평가 타겟팅을 위한 코호트 다운로드를 지원합니다. 이 지원을 활성화하려면 초기화 시 ApiKey 및 SecretKey 분석과 함께 CohortSyncConfig 옵션을 구성하십시오.
client := local.Initialize("<DEPLOYMENT_KEY>", &local.Config{
// (Recommended) Enable local evaluation cohort targeting.
CohortSyncConfig: &local.CohortSyncConfig {
ApiKey: "<API_KEY>",
SecretKey: "<SECRET_KEY>"
}
})
사용자 지정 로깅
LogLevel 구성을 통해 로그 세부 정보를 제어하거나 LoggerProvider 인터페이스를 구현하여 자체 로거를 통합하십시오.
로그 수준
SDK는 다음과 같은 로그 수준을 지원합니다.
Verbose: 심층 디버깅을 위한 상세한 로깅Debug: 개발 및 문제 해결을 위한 로깅Info: 일반 정보 메시지Warn: 경고 메시지Error: 오류 메시지(기본값)Disable: 로깅 없음
사용자 지정 로거
LoggerProvider 인터페이스를 구현하여 로깅 솔루션을 통합하십시오.
import "github.com/amplitude/experiment-go-server/logger"
type MyCustomLogger struct {
// Your logger implementation
}
func (l *MyCustomLogger) Verbose(message string, args ...interface{}) {
// Implement verbose logging
}
func (l *MyCustomLogger) Debug(message string, args ...interface{}) {
// Implement debug logging
}
func (l *MyCustomLogger) Info(message string, args ...interface{}) {
// Implement info logging
}
func (l *MyCustomLogger) Warn(message string, args ...interface{}) {
// Implement warn logging
}
func (l *MyCustomLogger) Error(message string, args ...interface{}) {
// Implement error logging
}
// Initialize with custom logger
client := local.Initialize("<DEPLOYMENT_KEY>", &local.Config{
LogLevel: logger.Debug,
LoggerProvider: &MyCustomLogger{},
})
이전 버전과의 호환성
Debug 구성 필드는 여전히 지원됩니다. true로 설정된 경우 LogLevel를 Debug로 재정의합니다.
이 내용이 도움이 되었나요?