SDK ์—ฐ๋™

๐Ÿ“˜

Hackle PHP SDK๋Š” PHP 7.1.33 ๋ฒ„์ „ ์ด์ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

PHP SDK๋Š” 1.0.0 ๋ฒ„์ „๋ถ€ํ„ฐ ์ ์šฉํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1. SDK ์˜์กด์„ฑ ์ถ”๊ฐ€

SDK ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.

php composer.phar require hackle/hackle-php-sdk:{sdk_version}

//OR
composer require hackle/hackle-php-sdk:{sdk_version}

๊ทธ ๋‹ค์Œ autoload ์‹œํ‚ต๋‹ˆ๋‹ค.

require 'vendor/autoload.php';

2. SDK ์ดˆ๊ธฐํ™”

HackleClient๋Š” SDK ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋“ค์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
SDK ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” HackleClient ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šคํ™”

SDK ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜์—ฌ HackleClient๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•ฉ๋‹ˆ๋‹ค.

HackleClient๋Š” ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์–ป๊ธฐ ์œ„ํ•ด, ํ•ตํด์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • SDK ํ‚ค๋Š” ํ•ตํด ์„œ๋น„์Šค์˜ ๋Œ€์‹œ๋ณด๋“œ ์•ˆ์— ์œ„์น˜ํ•œ SDK ์—ฐ๋™ ์ •๋ณด์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์บ์‹œ ์ •๋ณด๋Š” /tmp/hackle/์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
$client = \Hackle\HackleClients::create("YOUR_SERVER_SDK_KEY");

3. ์ด๋ฒคํŠธ ์ „์†ก

ํ•ตํด SDK๋Š” ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ๋ฅผ ํ•ตํด๋กœ ์ „์†กํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ํ–‰๋™์˜ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์ง€์ ๋งˆ๋‹ค ์ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ํ–‰๋™์— ๋Œ€ํ•œ ์œ ์˜๋ฏธํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ ‡๊ฒŒ ๋ชจ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ํ–‰๋™ ๋ถ„์„์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

track

track() ๋ฉ”์†Œ๋“œ์— ์ด๋ฒคํŠธ ํ‚ค์™€ ์‚ฌ์šฉ์ž๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ ์ „์†ก ์‹œ ์ˆซ์ž ๊ฐ’์„ value์— ๋„ฃ์–ด ํ•จ๊ป˜ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • value๋Š” number ํƒ€์ž…๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ

์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด purchase ๋ผ๋Š” ์ด๋ฒคํŠธ ํ‚ค๋ฅผ ์ •์˜ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋•Œ ๊ตฌ๋งค ์†์„ฑ์ •๋ณด๋ฅผ ๊ฐ™์ด ์ˆ˜์ง‘ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ property์— ๊ตฌ๋งค ์†์„ฑ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<?php
require 'vendor/autoload.php';

$client = \Hackle\HackleClients::create("YOUR_SERVER_SDK_KEY");

$user = \Hackle\Common\HackleUser::builder()
    ->deviceId("ae2182e0")
    ->build();

$event = \Hackle\Common\HackleEvent::builder("purchase")
    ->property("pay_method", "CARD")
    ->property("discount_amount", 800)
    ->property("is_discount", true)
    ->build();

$client->track($event, $user);
?>

์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ ์ „์†ก ํ™•์ธํ•˜๊ธฐ

SDK ์—์„œ ์ „์†กํ•œ ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์ง‘๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์„ธ์š”.
ํ•ตํด ๋Œ€์‹œ๋ณด๋“œ ์•ˆ์˜ [์™ผ์ชฝ ๋ฉ”๋‰ด๋ฐ”] - [์ด๋ฒคํŠธ ๊ด€๋ฆฌ] ๋ฉ”๋‰ด์—์„œ SDK๋กœ ์ „์†กํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฐพ์•„ ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ˆ˜์ง‘ํ˜„ํ™ฉ์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. A/B ํ…Œ์ŠคํŠธ, ๊ธฐ๋Šฅํ”Œ๋ž˜๊ทธ

A/B ํ…Œ์ŠคํŠธ

A/B ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ, ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์„ ๋Œ€์ƒ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋ถ„๋ฐฐํ•˜๊ณ  ๊ฐ ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์— ํ•ด๋‹นํ•˜๋Š” ๋กœ์ง์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉ์ž ๋ถ„๋ฐฐ๋ฅผ ํ•ตํด SDK๋ฅผ ํ†ตํ•ด ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“˜

ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน

ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์€ ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์ด ๋˜๋Š” ๊ธฐ์กด์•ˆ(๋Œ€์กฐ๊ตฐ)๊ณผ ๊ฐœ์„ ์•ˆ(์‹คํ—˜๊ตฐ)์„ ์˜๋ฏธํ•˜๋ฉฐ, ๊ฐœ์„ ์•ˆ์€ 1๊ฐœ ์ด์ƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” A/B ํ…Œ์ŠคํŠธ ์„ค์ • ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

variation

variation() ๋ฉ”์†Œ๋“œ์— ์‹คํ—˜ ํ‚ค์™€ ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์‚ฌ์šฉ์ž๋ฅผ ๋ถ„๋ฐฐํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน ๋ณ„ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
์‹คํ—˜ ํ‚ค๋Š” ๊ฐ A/B ํ…Œ์ŠคํŠธ๋ณ„๋กœ ๊ฐ–๊ฒŒ ๋˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ์ด๋ฉฐ, ํ•ตํด ์„œ๋น„์Šค ๋‚ด์˜ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ๋Š” ์‹คํ—˜ ํ‚ค 42๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋Š” "ae2182e0" ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์€ A์™€ B ๋‘ ๊ฐœ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

<?php
  
require 'vendor/autoload.php';

$client = \Hackle\HackleClients::create("YOUR_SERVER_SDK_KEY");

$user = \Hackle\Common\HackleUser::builder()
    ->deviceId("ae2182e0")
    ->build();

$variation = $client->variation(42, $user);

if ($variation === "A") {
    //๊ทธ๋ฃน A ๋กœ์ง
} elseif ($variation === "B") {
    //๊ทธ๋ฃน B ๋กœ์ง
}

?>

๊ธฐ๋Šฅํ”Œ๋ž˜๊ทธ

๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋Š” ์ผœ์ง(on) ์ƒํƒœ์™€ ๊บผ์ง(off) ์ƒํƒœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์„ค์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ ์šฉํ•œ ๊ธฐ๋Šฅ์— ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ์ผœ์ง ํ˜น์€ ๊บผ์ง ์ƒํƒœ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ƒํƒœ ๊ฒฐ์ •์„ ํ•ตํด SDK๋ฅผ ํ†ตํ•ด ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

isFeatureOn

isFeatureOn() ๋ฉ”์†Œ๋“œ์— ๊ธฐ๋Šฅ ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ƒํƒœ ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ ํ‚ค๋Š” ๊ฐ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ณ„๋กœ ๊ฐ–๊ฒŒ ๋˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ์ด๋ฉฐ ํ•ตํด ์„œ๋น„์Šค ๋‚ด์˜ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ๋Š” ๊ธฐ๋Šฅ ํ‚ค 42๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ƒํƒœ๋ฅผ ๋ฐ›์„ ์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋Š” "ae03e1adf" ์ž…๋‹ˆ๋‹ค.

<?php
  
require 'vendor/autoload.php';

$client = \Hackle\HackleClients::create("YOUR_SERVER_SDK_KEY");

$user = \Hackle\Common\HackleUser::builder()
    ->deviceId("ae2182e0")
    ->build();

$isFeatureOn = $client->isFeatureOn(42, $user);

if ($isFeatureOn) {
    // ON ๊ธฐ๋Šฅ
} else {
    // OFF ๊ธฐ๋Šฅ
}

?>

๋ถ„๋ฐฐ๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ

ํ•ตํด ๋Œ€์‹œ๋ณด๋“œ ์•ˆ์˜ [์™ผ์ชฝ ๋ฉ”๋‰ด๋ฐ”] - ๋˜๋Š” ๊ธฐ๋Šฅํ”Œ๋ž˜๊ทธ] ํ™”๋ฉด์—์„œ ๋…ธ์ถœ ํ™”๋ฉด์—์„œ ๋…ธ์ถœ๋˜๋Š” A/Bํ…Œ์ŠคํŠธ ๋˜๋Š” ๊ธฐ๋Šฅํ”Œ๋ž˜๊ทธ ๋ฆฌ์ŠคํŠธ ์ค‘ ์—ฐ๋™ํ•œ ๋Œ€์ƒ์„ ์ฐพ์•„ ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ ํ•œ ํ›„ ํ™”๋ฉด ์ค‘๊ฐ„์— [์‹ค์‹œ๊ฐ„ ๋…ธ์ถœ ํ˜„ํ™ฉ] ํƒญ์„ ํด๋ฆญํ•˜๋ฉด SDK๋กœ ์—ฐ๋™ ๋œ ๋ถ„๋ฐฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.