๋ธ”๋กœ๊ทธ

๐Ÿš€ ์ƒˆ๋กœ์šด Gato GraphQL v2.1๋กœ WordPress ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜์„ธ์š”

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

Gato GraphQL v2.1์ด ์ถœ์‹œ๋˜์—ˆ์Œ์„ ๊ธฐ์˜๊ฒŒ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ด ์ƒˆ ๋ฒ„์ „๊ณผ PRO ํ™•์žฅ ๊ธฐ๋Šฅ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด GraphQL as Automator๋ฅผ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GraphQL ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ WordPress ์‚ฌ์ดํŠธ์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ จ ์ž‘์—…์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์— v2.1์— ์ถ”๊ฐ€๋œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค๏ผˆ๊ฐ„๋žตํ•œ ๋ฒ„์ „์€ GitHub ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๏ผ‰.

๋‚ด๋ถ€ GraphQL ์„œ๋ฒ„ ํ˜ธ์ถœ ์‹œ ์ ์šฉํ•  ์Šคํ‚ค๋งˆ ๊ตฌ์„ฑ ์ง€์ • ์ง€์›

์ด์ œ ๋‚ด๋ถ€ GraphQL ์„œ๋ฒ„๏ผˆ์ฆ‰, ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ  PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๏ผ‰๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ ์šฉํ•  ์Šคํ‚ค๋งˆ ๊ตฌ์„ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ Internal GraphQL Server ํ™•์žฅ ๊ธฐ๋Šฅ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. GraphQLServer ํด๋ž˜์Šค์˜ executeQuery ๋ฐ executeQueryInFile ๋ฉ”์„œ๋“œ์— $schemaConfigurationIDOrSlug ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, executePersistedQuery์—์„œ๋Š” ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ์— ์‚ฌ์šฉ๋œ ์Šคํ‚ค๋งˆ ๊ตฌ์„ฑ์„ ์ด๋ฏธ ์ถ”์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

class GraphQLServer {
  
  public static function executeQuery(
    string $query,
    array $variables = [],
    ?string $operationName = null,
+   // Accept parameter 
+   int|string|null $schemaConfigurationIDOrSlug = null,
  ): Response {
    // ...
  }
 
  public static function executeQueryInFile(
    string $file,
    array $variables = [],
    ?string $operationName = null,
+   // Accept parameter 
+   int|string|null $schemaConfigurationIDOrSlug = null,
  ): Response {
    // ...
  }
 
  public static function executePersistedQuery(
    WP_Post|string|int $persistedQuery,
    array $variables = [],
    ?string $operationName = null,
+   // Schema Configuration is taken directly from the Persisted Query
  ): Response {
    // ...
  }

GraphQL as Automator [PRO]

์œ„ ๊ธฐ๋Šฅ์€ Automation ํ™•์žฅ ๊ธฐ๋Šฅ ์—…๊ทธ๋ ˆ์ด๋“œ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

Automation ํ™•์žฅ ๊ธฐ๋Šฅ์—๋Š” Automation Configurator๋ผ๋Š” ใ€Œ์˜คํ† ๋ฉ”์ดํ„ฐใ€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๏ผˆWordPress ํŽธ์ง‘๊ธฐ์—์„œ ์ง์ ‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ๏ผ‰๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ํ™” ํŠธ๋ฆฌ๊ฑฐ๋Š” WordPress ์•ก์…˜ ํ›…์ด๋ฉฐ, ์‹คํ–‰๋˜๋Š” ์ž‘์—…์€ GraphQL ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์ž๋™ํ™” ๊ทœ์น™ ํŽธ์ง‘๊ธฐ
์ž๋™ํ™” ๊ทœ์น™ ํŽธ์ง‘๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒˆ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•  ๋•Œ ์ž๋™ํ™” ๊ทœ์น™ Add comments block to new post๏ผˆ๋™์ผํ•œ ์ด๋ฆ„์˜ ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ ์‹คํ–‰๏ผ‰๋Š” core/comments ๋ธ”๋ก์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์—†๋‹ค๋ฉด ๊ฒŒ์‹œ๋ฌผ ํ•˜๋‹จ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ใ€Œ์ž„์‹œ ์ €์žฅใ€ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ“๊ธ€ ๋ธ”๋ก์„ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜๋Š” ๋ชจ์Šต
์ƒˆ ใ€Œ์ž„์‹œ ์ €์žฅใ€ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ“๊ธ€ ๋ธ”๋ก์„ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜๋Š” ๋ชจ์Šต

์˜คํ† ๋ฉ”์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

  • AI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ฒŒ์‹œ๋ฌผ์˜ ๋Œ€ํ‘œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ๏ผˆ๋ฐ ์ตœ์ ํ™”๏ผ‰ํ•˜๊ธฐ
  • ๊ฒŒ์‹œ๋ฌผ์ด ๊ณต๊ฐœ๋  ๋•Œ ํ•„์ˆ˜ ๋ธ”๋ก ์ถ”๊ฐ€ํ•˜๊ธฐ
  • ๊ฒŒ์‹œ๋ฌผ์ด ์—…๋ฐ์ดํŠธ๋  ๋•Œ ๋ชจ๋“  ์ด๋ฏธ์ง€ ์†Œ์Šค์™€ ๋งํฌ์˜ http๋ฅผ https๋กœ ๊ต์ฒดํ•˜๊ธฐ
  • ์ƒˆ ๊ฒŒ์‹œ๋ฌผ์ด ์žˆ์„ ๋•Œ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์ด๋ฉ”์ผ ๋ฐœ์†กํ•˜๊ธฐ
  • ๋Œ“๊ธ€์— ์ƒˆ ๋‹ต๊ธ€์ด ๋‹ฌ๋ฆฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฉ”์ผ ๋ฐœ์†กํ•˜๊ธฐ
  • [๋ฉ€ํ‹ฐ์‚ฌ์ดํŠธ] ์ƒˆ ๊ฒŒ์‹œ๋ฌผ์„ ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ๋ฒˆ์—ญ๋œ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ ์‚ฌ์ดํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ
  • ์™ธ๋ถ€ ์„œ๋น„์Šค์—์„œ ์ž‘์—… ์‹คํ–‰ํ•˜๊ธฐ๏ผˆ์˜ˆ: ์ƒˆ ๊ฒŒ์‹œ๋ฌผ์„ Facebook์— ์ž๋™์œผ๋กœ ๊ณต์œ ํ•˜๊ธฐ๏ผ‰

GraphQL ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ์™€ ์ž๋™ํ™” ๊ทœ์น™์„ wp-admin ๋‚ด์—์„œ ์ง์ ‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ•„์š”์— ๋งž๊ฒŒ ๊ณ ๋„๋กœ ๋งž์ถคํ™”๋œ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์„ ์ฆ‰์‹œ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ์— ์ œ์•ฝ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—๏ผˆGraphQL ์ฟผ๋ฆฌ๋Š” WordPress ๋‚ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์„œ๋น„์Šค์—๋„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๏ผ‰, ์š”๊ตฌ ์‚ฌํ•ญ์˜ 100%๋ฅผ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๏ผˆ์˜คํ† ๋ฉ”์ดํ„ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”์˜ 95%๋ฅผ ์ถฉ์กฑํ•˜์ง€๋งŒ, ํ•„์š”ํ•œ ์ž…๋ ฅ์ด ๋งคํ•‘๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ์ข…์ข… ๋งˆ์ฃผ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹คใ€‚๏ผ‰

ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” ์ด๋ฏธ ๋ช‡ ๊ฐ€์ง€ ์ž๋™ํ™” ๊ทœ์น™์ด ์ƒ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค๏ผˆ์ƒํƒœ๊ฐ€ draft์ด๋ฏ€๋กœ ์ ์šฉํ•˜๋ ค๋ฉด publish๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค๏ผ‰. ์ด ๊ทœ์น™๋“ค์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ์ž๋™ํ™”๋ฅผ ๋งŒ๋“ค ๋•Œ ์ฐธ๊ณ  ์˜ˆ์‹œ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๏ผˆ์ด ๋ชฉ๋ก์€ ์ดํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ๊ณ„์† ํ™•์žฅ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค๏ผ‰.

  • Add comments block to new post
  • Insert block in new post
  • Send notification email to admin when there is a new post
  • Generate a post's featured image using AI (and optimize it) if a new post has none
์ž๋™ํ™” ๊ทœ์น™
์ž๋™ํ™” ๊ทœ์น™

์‚ฌ์ „ ์ •์˜๋œ ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ ใ€ŒInsert block in postใ€

์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ํผ์‹œ์Šคํ‹ฐ๋“œ GraphQL ์ฟผ๋ฆฌ ใ€ŒInsert block in postใ€๋Š” ๊ฒŒ์‹œ๋ฌผ์— ๋ธ”๋ก์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๋ฌผ ๋‚ด์—์„œ ์ง€์ •ํ•œ ์œ ํ˜•๏ผˆ๊ธฐ๋ณธ๊ฐ’: wp:paragraph๏ผ‰์˜ n๋ฒˆ์งธ ๋ธ”๋ก์„ ์ฐพ์•„, ์ œ๊ณต๋œ ์ปค์Šคํ…€ ๋ธ”๋ก์˜ HTML ์ฝ˜ํ…์ธ ๋ฅผ ๊ทธ ๋ฐ”๋กœ ๋’ค์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

Automation ํ™•์žฅ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด, ์ด ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ ๊ณต๊ฐœ๋œ ๊ฒŒ์‹œ๋ฌผ์— ํ•„์ˆ˜ ๋ธ”๋ก์„ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๏ผˆ์˜ˆ: ์ง„ํ–‰ ์ค‘์ธ ์บ ํŽ˜์ธ์„ ํ™๋ณดํ•˜๋Š” CTA ๋ธ”๋ก๏ผ‰.

๊ฐœ์„  ์‚ฌํ•ญ

  • ์บ์‹œ์—์„œ ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”์— ์‹คํŒจํ•  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ PHP ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํด๋ฐฑ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ (#2638)
  • ์‚ฌ์ „ ์ •์˜๋œ ๋ชจ๋“  ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ์— ๊ณ ์œ ํ•œ operationName ๋ถ€์—ฌ (#2644)
  • ๊ฒŒ์‹œ๋ฌผ์—์„œ ๋ธ”๋ก์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋ธ”๋ก ์ฝ˜ํ…์ธ ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ๊ฐœ์„ 
  • Automation ํ™•์žฅ ๊ธฐ๋Šฅ ๋ฌธ์„œ ์™„์„ฑ (#2651)
  • ์‚ฌ์ „ ์ •์˜๋œ ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ ใ€ŒGenerate a post's featured image using AI and optimize itใ€์—์„œ ๊ฒŒ์‹œ๋ฌผ ์ œ๋ชฉ์ด ๋น„์–ด ์žˆ์ง€ ์•Š์„ ๋•Œ๋งŒ ๋กœ์ง์ด ์‹คํ–‰๋˜๋„๋ก ์ˆ˜์ • (#ec931dd)

์ˆ˜์ • ์‚ฌํ•ญ

  • ํ™•์žฅ ๊ธฐ๋Šฅ๏ผˆAccess Control, Cache Control, Field Deprecation๏ผ‰์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ€ํ‹ฐ ์ปจํŠธ๋กค JS ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์Šคํ‚ค๋งˆ ๊ตฌ์„ฑ์˜ ๋ธ”๋ก์— ใ€Œundefinedใ€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฒ„๊ทธ (#2639)
  • ์‚ฌ์ „ ์ •์˜๋œ ํผ์‹œ์Šคํ‹ฐ๋“œ ์ฟผ๋ฆฌ์˜ ์ •๊ทœ์‹ ์น˜ํ™˜ ๋ฒ„๊ทธ (#2649)
  • ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋น„ํ™œ์„ฑํ™”ยท์žฌํ™œ์„ฑํ™”ํ•  ๋•Œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์žฌ์„ค์น˜๋˜์ง€ ์•Š๋„๋ก ์ˆ˜์ • (#2641)
  • ๋‚ด๋ถ€ GraphQL ์„œ๋ฒ„์— GraphQL ๋ณ€์ˆ˜๋กœ WP_Post๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ (#2652)

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

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