๐ฏ Gato GraphQL์ AppSumo ์บ ํ์ธ์ Gato GraphQL๊ณผ Lemon Squeezy๋ก ์ด์ํ๊ธฐ
Gato GraphQL์ด ์ค๋ AppSumo์ ๋ก ์นญํ์ต๋๋ค! ๐
์๊ตฌ ์ฌํญ์ผ๋ก, Gato GraphQL ํ์ AppSumo์ 10,000๊ฐ์ ์ธ์ฆ ์ฝ๋๋ฅผ ์ ์กํด์ผ ํ์ต๋๋ค. ์ด ์ฝ๋๋ค์ AppSumo(์ฌ์ฉ์๊ฐ ์ ํ ๊ฒฐ์ ๋ฅผ ์งํํ๋ ๊ณณ)์ Gato GraphQL(์ฌ์ฉ์๊ฐ ํ๋ฌ๊ทธ์ธ์ ๋ค์ด๋ก๋ํ๋ ๊ณณ) ์ฌ์ด์ ์ฐ๊ฒฐ ๊ณ ๋ฆฌ ์ญํ ์ ํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ์ฝ๋๋ฅผ ์ธ์ฆํ๊ธฐ ์ํด gatographql.com์ ๋ฐฉ๋ฌธํ๋ฉด, ํด๋น ใ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 #1Appsumo campaign #2Appsumo campaign #3- ...
Appsumo campaign #{recordNumber}
๊ทธ๋ฐ ๋ค์ Appsumo campaign #์ผ๋ก ๊ฒ์ํ๋ฉด ์ฝ๋ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค:

๊ทธ ์ค ํ๋๋ฅผ ํด๋ฆญํ๋ฉด ๋จ์ผ ์ ํ ๋ฐ ๋ณํ์ ์ ์ฉ๋๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค:

bash ์คํฌ๋ฆฝํธ๋ก ์ฟผ๋ฆฌ ์ฌ๋ฌ ๋ฒ ์คํํ๊ธฐ
์ด ์ฟผ๋ฆฌ๋ (๊ธฐ๋ณธ๊ฐ์ผ๋ก) LemonSqueezy API์ ๋ํด 100๊ฐ์ ๋น๋๊ธฐ HTTP ์์ฒญ์ ์คํํ๋ฉฐ, ๊ฐ ์์ฒญ์ด ๋จ์ผ ํ ์ธ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด 100๊ฐ์ ํ ์ธ ์ฝ๋๊ฐ ์์ฑ๋ฉ๋๋ค.
10,000๊ฐ์ ์์ฒญ์ ํ ๋ฒ์ ์คํํ์ง ์๋ ์ด์ ๋, ์ด๋ ์์ (500ํ ํธ์ถ ์ ํ์คํ)์์ LemonSqueezy API๊ฐ ใToo many requestsใ ์ค๋ฅ๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋์ ์ฟผ๋ฆฌ ์คํ์ 100๊ฐ ์์ฒญ์ฉ ๋ฐฐ์น๋ก ๋ถํ ํ๊ณ ๊ทธ ์ฌ์ด์ ์ง์ฐ์ ๋ก๋๋ค.
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ WordPress ์ฌ์ดํธ์ 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 ์บ ํ์ธ์ ์ํ ์ค๋น๊ฐ ์๋ฃ๋์์ต๋๋ค.
ํ์ด์ ๋น์ด์ฃผ์ธ์ ๐