๋ฌธ์ œ ํ•ด๊ฒฐ

๐Ÿ“˜

์ด ๋ฌธ์„œ์— ๋Œ€ํ•˜์—ฌ

์ด ๋ฌธ์„œ๋Š” SDK ์—ฐ๋™ ๊ณผ์ • ์ค‘ ๋น„์ •์ƒ ๋™์ž‘์œผ๋กœ ์˜์‹ฌ๋˜๊ฑฐ๋‚˜, ๊ทธ ์™ธ ๋ฒ„๊ทธ๋กœ ์˜์‹ฌ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์–ด๋– ํ•œ ๊ธฐ๋Šฅ์˜ ์ง€์› ์—ฌ๋ถ€, ๊ตฌํ˜„ ๋…ธํ•˜์šฐ๋‚˜ ์กฐ์–ธ์„ ๊ตฌํ•˜๋Š” ์งˆ๋ฌธ์€ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1. ์‚ฌ์šฉ์ž ์ง€์ • ์‹๋ณ„์ž๋ฅผ ๋„ฃ์–ด variation ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ

Q. JavaScript SDK ์ด์šฉ ์ค‘์ž…๋‹ˆ๋‹ค. variation ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ์ž ์‹๋ณ„์ž์™€ ๊ด€๋ จ๋œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ €ํฌ๊ฐ€ ๋งŒ๋“  ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋ฅผ ๋„˜๊ฒผ๋Š”๋ฐ ์–ด๋–ค ๋ฌธ์ œ์ธ๊ฐ€์š”?

A. JavaScript SDK์ธ ๊ฒฝ์šฐ variation ๋ฉ”์†Œ๋“œ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋„˜๊ธธ ๋•Œ ์˜ค๋ธŒ์ ํŠธ ํ˜•ํƒœ๋กœ ๋„˜๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ ์ฝ”๋“œ์˜ ์ž˜๋ชป๋œ ์‚ฌ๋ก€์ฒ˜๋Ÿผ ๋‹จ์ˆœ string type๋งŒ ๋„˜๊ธด ๊ฒƒ์ด ์•„๋‹Œ์ง€ ํ™•์ธํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

hackleClient.variation(6, "user_id")       // ์ž˜๋ชป๋œ ์‚ฌ๋ก€
hackleClient.variation(6, {id: "user_id"}} // ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ๋ก€

๐Ÿ‘

๊ฐœ๋ฐœ ํ”Œ๋žซํผ ๋ณ„ ์‚ฌ์šฉ์ž ์ง€์ • ์‹๋ณ„์ž ๋„ฃ๋Š” ๋ฐฉ๋ฒ•

SDK ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด์— ์žˆ๋Š” ์‚ฌ์šฉ์ž ์‹๋ณ„์ž ๋ฌธ์„œ์— ์–ธ์–ด ๋ณ„ ์˜ˆ์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์‚ฌ์šฉ์ž ์ง€์ • ์‹๋ณ„์ž ์ „๋‹ฌ ์‹œ ์ง€ํ‘œ ์ด์ƒ

Q. ํ•ตํด SDK๋ฅผ ์—ฐ๋™ํ–ˆ๊ณ  ์ €ํฌ๊ฐ€ ๋งŒ๋“  ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋ฅผ ์ด์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€ํ‘œ ๊ฒฐ๊ณผ๊ฐ€ ์ด์ƒํ•œ๋ฐ ์˜์‹ฌํ•  ํฌ์ธํŠธ๊ฐ€ ์žˆ์„๊นŒ์š”?

A. variation ๋ฉ”์†Œ๋“œ ๋ฐ track ๋ฉ”์†Œ๋“œ ๋‘˜ ๋‹ค ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋‘ ๋ฉ”์†Œ๋“œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋ฅผ ์ „๋‹ฌํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ํ•˜๋‚˜๋„ ์ „๋‹ฌํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

// ์ž˜๋ชป๋œ ์‚ฌ๋ก€
hackleClient.variation(7, { id : "12345"} ) // ์‚ฌ์šฉ์ž ์‹๋ณ„์ž ์ง์ ‘ ์ „๋‹ฌ
hackleClient.track("purchase") // ์‚ฌ์šฉ์ž ์‹๋ณ„์ž ์ „๋‹ฌํ•˜์ง€ ์•Š์Œ

// ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ๋ก€
// (1์•ˆ) ์‚ฌ์šฉ์ž ์ง€์ • ์‹๋ณ„์ž ์‚ฌ์šฉ
hackleClient.variation(7, { id : "12345"}) 
hackleClient.track("purchase", { id : "12345"})

// (2์•ˆ) ๋‚ด๋ถ€์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋””๋ฐ”์ด์Šค ์‹๋ณ„์ž ์‚ฌ์šฉ
hackleClient.variation(7) 
hackleClient.track("purchase")

์ž˜๋ชป๋œ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ variation๊ณผ track์˜ ์‹๋ณ„์ž๊ฐ€ ๋‹ฌ๋ผ์ ธ ์ง€ํ‘œ ๊ณ„์‚ฐ์ด ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ๋ถ„๋ฐฐ์™€ ์ด๋ฒคํŠธ ์ „์†ก ์‹œ ์‚ฌ์šฉ์ž ์‹๋ณ„์ž ์ „๋‹ฌ ๋ฐฉ์‹์„ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ๋™์ผํ•œ ์‚ฌ์šฉ์ž๋กœ ์ธ์‹ํ•˜๊ณ  ์ง€ํ‘œ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ์ž ์‹๋ณ„์ž๋ฅผ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ ๋‘ ๋ฉ”์†Œ๋“œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์‚ผ๋Š” ๊ฒƒ์œผ๋กœ ์ธ์ง€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์‹ค์‹œ๊ฐ„ ๋…ธ์ถœ ํ˜„ํ™ฉ ๊ฒฐ๊ณผ ์ด์ƒ

Q. ๋™์ผํ•œ ์‚ฌ์šฉ์ž๋กœ variation ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ–ˆ๋Š”๋ฐ ์‹ค์‹œ๊ฐ„ ๋…ธ์ถœ ํ˜„ํ™ฉ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜์ธ๊ฐ€์š”?

A. ์ •์ƒ ๋™์ž‘์ž…๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ๋…ธ์ถœ ํ˜„ํ™ฉ์˜ ๊ฒฝ์šฐ variation ํ˜ธ์ถœ ์นด์šดํŠธ(ํ˜ธ์ถœํ•œ ๋…ธ์ถœ ํšŸ์ˆ˜)์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ค‘๋ณต ์ œ๊ฑฐ ์—†๋Š” ์ „์ฒด ๋…ธ์ถœ ์ˆ˜๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด ๋ชฉํ‘œ ๊ณ„์‚ฐ์—์„œ๋Š” ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์—ฌ UV๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋ชฉํ‘œ์—์„œ๋Š” uniqueํ•œ ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

4. A/B ํ…Œ์ŠคํŠธ ์ข…๋ฃŒ ํ›„ ํŠธ๋ž˜ํ”ฝ ์ด์ƒ

Q. A/B ํ…Œ์ŠคํŠธ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  Winner ๊ทธ๋ฃน์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง Winner ๊ทธ๋ฃน์˜ ๋กœ์ง์„ ์ ์šฉํ•˜์ง€๋Š” ์•Š์„ ์ƒ๊ฐ์ธ๋ฐ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์ด Winner ๊ทธ๋ฃน์œผ๋กœ ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

A. ํŠน์ • ๊ทธ๋ฃน์œผ๋กœ Winner๋ฅผ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น A/B ํ…Œ์ŠคํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ Winner ๊ทธ๋ฃน์œผ๋กœ ํ–ฅํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ A/B ํ…Œ์ŠคํŠธ ์ข…๋ฃŒ ์‹œ ์•„๋ž˜์˜ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  1. ํ•ตํด ๋Œ€์‹œ๋ณด๋“œ์—์„œ A/B ํ…Œ์ŠคํŠธ ์ข…๋ฃŒ ๋ฐ Winner ๊ทธ๋ฃน ์„ ํƒ
  2. ์šด์˜ ํ™˜๊ฒฝ(Production)์—์„œ A/B ํ…Œ์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ ์‚ญ์ œ
  3. ํ•ตํด ๋Œ€์‹œ๋ณด๋“œ์—์„œ 1๋ฒˆ์˜ A/B ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ๋ณด๊ด€์ฒ˜๋ฆฌ ํด๋ฆญํ•˜์—ฌ ๋ณด๊ด€ ์ƒํƒœ๋กœ ์ „ํ™˜

5. JavaScript SDK์—์„œ ์ˆ˜๋™ ํ• ๋‹น ๋ฏธ๋™์ž‘

Q. JavaScript SDK ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ํŠน์ • ์‚ฌ์šฉ์ž ๋Œ€์ƒ์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ธฐ๊ธฐ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์ง€์ •ํ•œ ๋Œ€๋กœ ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์— ๋ถ„๋ฐฐ๋œ ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

A. JavaScript SDK์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž latency๋ฅผ ์œ„ํ•ด์„œ ์„ค์ • ๊ฐ’์„ cacheํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ œ๋Œ€๋กœ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐ•๋ ฅ ์ƒˆ๋กœ๊ณ ์นจ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์ด ๋ฐฉ๋ฒ•๋„ ํ†ตํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ด๊ณ  ์ƒˆ๋กœ๊ณ ์นจ ๋ฒ„ํŠผ์—์„œ ์˜ค๋ฅธ์ชฝ ํด๋ฆญ ํ›„ ์บ์‹œ ๋น„์šฐ๊ธฐ ๋ฐ ๊ฐ•๋ ฅ ์ƒˆ๋กœ๊ณ ์นจ์„ ํด๋ฆญํ•˜์—ฌ ๋‹ค์‹œ ์‹œ๋„ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

868

ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์˜ ์บ์‹œ ๋น„์šฐ๊ธฐ ๋ฐ ๊ฐ•๋ ฅ ์ƒˆ๋กœ๊ณ ์นจ

6. ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน A์— ์ ๋ฆฌ๋Š” ํ˜„์ƒ

Q. ์‹ค์‹œ๊ฐ„ ๋…ธ์ถœ ํ˜„ํ™ฉ์„ ํ†ตํ•ด ๋ถ„๋ฐฐ๋œ ๊ทธ๋ฃน์„ ๋ณด๊ณ  ์žˆ๋Š”๋ฐ ์œ ๋… ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน A์—๋งŒ ๋ชฐ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

A. A/B ํ…Œ์ŠคํŠธ์— ํ• ๋‹น๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ˆ˜๋™ ํ• ๋‹น ๋Œ€์ƒ์ธ ๊ฒฝ์šฐ, ์—๋Ÿฌ ๋ฐœ์ƒ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ๊ธฐ๋ณธ ๊ทธ๋ฃน์ธ ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน A์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน ๋ถ„๋ฐฐ์™€ ์ƒ๊ด€ ์—†์ด ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน A๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ๋Š” ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน ๋ถ„๋ฐฐ ๊ณผ์ • ๋ฐ ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน ๋ถ„๋ฐฐ ์›๋ฆฌ ๋ฌธ์„œ์—์„œ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

SDK์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์›์ธ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. variationDetail ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” SDK์˜ ๊ฒฝ์šฐ ํŠน์ • ๊ทธ๋ฃน์œผ๋กœ ๋ถ„๋ฐฐ๋œ ์‚ฌ์œ ๋ฅผ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์ ๊ทน ํ™œ์šฉํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.