๋ธ”๋กœ๊ทธ

๐ŸŽฏ Gato GraphQL์˜ AppSumo ์บ ํŽ˜์ธ์„ Gato GraphQL๊ณผ Lemon Squeezy๋กœ ์šด์˜ํ•˜๊ธฐ

Leonardo Losoviz
์ž‘์„ฑ์ž: Leonardo Losoviz ยท

Gato GraphQL์ด ์˜ค๋Š˜ AppSumo์— ๋ก ์นญํ–ˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ™Œ

์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ, Gato GraphQL ํŒ€์€ AppSumo์— 10,000๊ฐœ์˜ ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์ „์†กํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋“ค์€ AppSumo(์‚ฌ์šฉ์ž๊ฐ€ ์ œํ’ˆ ๊ฒฐ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ณณ)์™€ Gato GraphQL(์‚ฌ์šฉ์ž๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ณณ) ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•ด gatographql.com์„ ๋ฐฉ๋ฌธํ•˜๋ฉด, ํ•ด๋‹น ใ€Œ100% ํ• ์ธ ์ฝ”๋“œใ€(์ผํšŒ์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํŠน์ • ์ œํ’ˆ์—๋งŒ ์ ์šฉ)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ํ• ์ธ ์ฝ”๋“œ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ใ€Œ๊ตฌ๋งคใ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

AppSumo ์ฝ”๋“œ๋กœ Gato GraphQL ์ธ์ฆํ•˜๊ธฐ - 100% ํ• ์ธ ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค

์ˆ˜์ฒœ ๊ฐœ์˜ ํ• ์ธ ์ฝ”๋“œ๋Š” ์‚ฌ์ „์— ์ƒ์„ฑํ•˜์—ฌ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์ œ๊ณต์—…์ฒด์ธ Lemon Squeezy์— ์ €์žฅํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Lemon Squeezy๋Š” API๋ฅผ ํ†ตํ•ด ํ• ์ธ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Gato GraphQL์—๋Š” HTTP Client๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, Lemon Squeezy API์— ์—ฐ๊ฒฐํ•˜์—ฌ ์ˆ˜์ฒœ ๊ฐœ์˜ ํ• ์ธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” GraphQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. (๋‹ค์‹œ ๋งํ•ด, Gato GraphQL์ด ์ž์ฒด AppSumo ์บ ํŽ˜์ธ์„ ์ง์ ‘ ๊ตฌ๋™ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ˜†)

AppSumo์šฉ 10,000๊ฐœ์˜ ์ธ์ฆ ์ฝ”๋“œ๋Š” ๋‹ค์Œ GraphQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค:

ํ•ด๋‹น ํ• ์ธ ์ฝ”๋“œ๋“ค์€ ๋‹ค์Œ GraphQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค:

์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋Š” ๋‹ค์†Œ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ• ์ธ ์ฝ”๋“œ ์ƒ์„ฑํ•˜๊ธฐ

GraphQL ์ฟผ๋ฆฌ๋Š” ํ•„๋“œ _generateRandomString์„ ์‚ฌ์šฉํ•˜์—ฌ ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ๋ฌธ์ž๋ฅผ ํ™œ์šฉํ•œ ๋ฌด์ž‘์œ„ ๋ฌธ์ž์—ด๋กœ ํ• ์ธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ์—๋Š” ํŠน์ • ์ œํ’ˆ ๋ฐ ํ‹ฐ์–ด์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋„ ์•ž์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค($codePrefix ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด).

์˜ˆ๋ฅผ ๋“ค์–ด, ๋„ค์ž„์ŠคํŽ˜์ด์Šค APSMV1T1์€ ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:

  • AppSumo ์บ ํŽ˜์ธ
  • Variation 1 ์ œํ’ˆ
  • Tier 1

๋ชจ๋“  ํ• ์ธ ์ฝ”๋“œ์—๋Š” Lemon Squeezy ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์œ ํ•œ ์„ค๋ช…์  ์ด๋ฆ„์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค:

  • Appsumo campaign #1
  • Appsumo campaign #2
  • Appsumo campaign #3
  • ...
  • Appsumo campaign #{recordNumber}

๊ทธ๋Ÿฐ ๋‹ค์Œ Appsumo campaign #์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์ฝ”๋“œ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Lemon Squeezy์—์„œ ์ƒ์„ฑ๋œ ํ• ์ธ ์ฝ”๋“œ
Lemon Squeezy์—์„œ ์ƒ์„ฑ๋œ ํ• ์ธ ์ฝ”๋“œ

๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋‹จ์ผ ์ œํ’ˆ ๋ฐ ๋ณ€ํ˜•์— ์ ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Lemon Squeezy์˜ ํ• ์ธ ์ฝ”๋“œ
Lemon Squeezy์˜ ํ• ์ธ ์ฝ”๋“œ

bash ์Šคํฌ๋ฆฝํŠธ๋กœ ์ฟผ๋ฆฌ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•˜๊ธฐ

์ด ์ฟผ๋ฆฌ๋Š” (๊ธฐ๋ณธ๊ฐ’์œผ๋กœ) LemonSqueezy API์— ๋Œ€ํ•ด 100๊ฐœ์˜ ๋น„๋™๊ธฐ HTTP ์š”์ฒญ์„ ์‹คํ–‰ํ•˜๋ฉฐ, ๊ฐ ์š”์ฒญ์ด ๋‹จ์ผ ํ• ์ธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด 100๊ฐœ์˜ ํ• ์ธ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

10,000๊ฐœ์˜ ์š”์ฒญ์„ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š”, ์–ด๋А ์‹œ์ (500ํšŒ ํ˜ธ์ถœ ์‹œ ํ™•์‹คํžˆ)์—์„œ LemonSqueezy API๊ฐ€ ใ€ŒToo many requestsใ€ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ฟผ๋ฆฌ ์‹คํ–‰์„ 100๊ฐœ ์š”์ฒญ์”ฉ ๋ฐฐ์น˜๋กœ ๋ถ„ํ• ํ•˜๊ณ  ๊ทธ ์‚ฌ์ด์— ์ง€์—ฐ์„ ๋‘ก๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” WordPress ์‚ฌ์ดํŠธ์— persisted query๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ฟผ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์€ ๋‹ค์Œ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค:

Persisted query
Persisted query

๊ฒŒ์‹œ ํ›„์—๋Š” curl์„ ์‚ฌ์šฉํ•˜์—ฌ bash ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ ์–ธ์ œ๋“ ์ง€ persisted query๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, GraphQL ๋ณ€์ˆ˜๋ฅผ persisted query URL์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ๋Š” persisted query๋ฅผ 100๋ฒˆ ์‹คํ–‰ํ•˜๊ณ (100 ร— 100 = 10,000), ๊ฐ ์š”์ฒญ์— ์ ์ ˆํ•œ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ, 30์ดˆ ๊ฐ„๊ฒฉ์„ ๋‘ก๋‹ˆ๋‹ค(์ฒ˜์Œ 300๊ฐœ ํ• ์ธ ์ฝ”๋“œ์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค):

curl --user "{username}:{applicationPassword}" "https://my-wp-site.com/graphql-query/create-redemption-codes-for-appsumo-in-lemonsqueezy/?codePrefix=APSMV1T1&storeID={storeId}&variantIDs[]={productVariantId}&lemonSqueezyAccessToken={accessToken}&postId={postId}"
sleep 30
curl --user "{username}:{applicationPassword}" "https://my-wp-site.com/graphql-query/create-redemption-codes-for-appsumo-in-lemonsqueezy/?firstRecordNumber=101&codePrefix=APSMV1T1&storeID={storeId}&variantIDs[]={productVariantId}&lemonSqueezyAccessToken={accessToken}&postId={postId}"
sleep 30
curl --user "{username}:{applicationPassword}" "https://my-wp-site.com/graphql-query/create-redemption-codes-for-appsumo-in-lemonsqueezy/?firstRecordNumber=201&codePrefix=APSMV1T1&storeID={storeId}&variantIDs[]={productVariantId}&lemonSqueezyAccessToken={accessToken}&postId={postId}"
# ...

์ƒ์„ฑ๋œ ๋ชจ๋“  ์ฝ”๋“œ ์ˆ˜์ง‘ํ•˜๊ธฐ

WordPress ์‚ฌ์ดํŠธ์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๋ชจ๋“  ํ• ์ธ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•œ ํฌ์ŠคํŠธ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$postId ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋ฉด, ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด 100๊ฐœ์˜ ์ฝ”๋“œ๊ฐ€ ํ•ด๋‹น ํฌ์ŠคํŠธ์˜ ๋์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ธ์ฆ ์ฝ”๋“œ ์ˆ˜์ง‘ํ•˜๊ธฐ
์ธ์ฆ ์ฝ”๋“œ ์ˆ˜์ง‘ํ•˜๊ธฐ

bash ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด, ํฌ์ŠคํŠธ์—๋Š” ๋ชจ๋“  10,000๊ฐœ์˜ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ž‘์—… ์™„๋ฃŒ

์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , 10,000๊ฐœ์˜ ๋ฌด์ž‘์œ„ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ codes.csv ํŒŒ์ผ์— ๋ถ™์—ฌ๋„ฃ์€ ํ›„ AppSumo์— ์ „์†กํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , 10,000๊ฐœ์˜ ํ• ์ธ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์— ๋ถ™์—ฌ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

Gato GraphQL์€ AppSumo ์บ ํŽ˜์ธ์„ ์œ„ํ•œ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ–‰์šด์„ ๋นŒ์–ด์ฃผ์„ธ์š” ๐Ÿ™


๋‰ด์Šค๋ ˆํ„ฐ ๊ตฌ๋…ํ•˜๊ธฐ

Gato GraphQL์˜ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋ฅผ ๋†“์น˜์ง€ ๋งˆ์„ธ์š”.