๋ธ”๋กœ๊ทธ

๐Ÿค” GraphQL์€ ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋‹ฌ๋ผ์•ผ ํ• ๊นŒ์š”?

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

GraphQL์€ ํŠน์ • ์ถœ์ฒ˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ, GraphQL ์‚ฌ์–‘์€ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค์˜ ์š”๊ฑด์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”๊ฑด์ด ์ถฉ์กฑ๋˜๋Š” ํ•œ, GraphQL์€ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ๊ฐ€๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GraphQL ์„œ๋ฒ„๋Š” JavaScript์˜ Promise๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, Golang ๊ธฐ๋ฐ˜์˜ ๋™์‹œ์„ฑ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, Excel ํŒŒ์ผ์— ๋งคํ•‘ํ•˜๊ฑฐ๋‚˜, ๊ทธ ์™ธ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋ชจ๋“  ๋ฐฉ์‹์ด GraphQL ์‚ฌ์–‘์˜ ์œ ํšจํ•œ ๊ตฌํ˜„์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GraphQL์€ ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ์‚ฌ์ด์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค

์„œ๋ฒ„์˜ ์—”์ง„์ด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”์ง€๋Š” GraphQL ์š”์ฒญ์˜ ์„ฑ๊ณต์ ์ธ ์‹คํ–‰์— ์žˆ์–ด ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์€ ํ•ญ์ƒ ๋™์ผํ•˜๋ฉฐ, ์ •์˜๋œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ GraphQL ์ฟผ๋ฆฌ๋ฅผ ์ œ์ถœํ•˜๊ณ  JSON ํ˜•์‹์œผ๋กœ ํ•ด๋‹น ์‘๋‹ต์„ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ตฌํ˜„์ด ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ๋งํ•  ๋•Œ, ์ด๋Š” API ์‚ฌ์šฉ์ž์˜ ๊ด€์ ์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‹จ์ˆœํžˆ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•  ๋ฟ์ด๋ฉฐ, ๋ฐ˜ํ™˜๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€์—๋Š” ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ API๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ์ƒํ™ฉ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ตฌํ˜„์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. GraphQL API๋ฅผ PHP๋กœ ์ฝ”๋”ฉํ•œ๋‹ค๋ฉด, PHP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ฉด์„œ ๊ฐ€๋Šฅํ•œ ํ•œ ํšจ์œจ์ ์œผ๋กœ API๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ํ•œ ์šฐ์•„ํ•œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ฅผ ๊ฐ–์ถœ ์ˆ˜ ์žˆ๋„๋ก ์ตœ์„ ์„ ๋‹คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PHP vs Java vs JavaScript

์ด๋กœ ์ธํ•ด API๋ฅผ ๋ณดํ˜ธํ•ด์•ผ ํ•˜๋Š” ํ•„์š”์„ฑ๊ณผ, API๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ธฐ๋Œ€ํ•˜๋Š” ๊ธฐ๋Šฅ(์žฌ๊ท€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Šฅ๋ ฅ ๋“ฑ, ๊ธฐ๋ฐ˜ ์–ธ์–ด๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋นผ์•—๊ธฐ๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒƒ) ์‚ฌ์ด์—์„œ ์ดํ•ด๊ด€๊ณ„์˜ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ถฉ๋Œ์€ ์ด์Šˆ #929: Allow recursive references in fragments์—์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด ์ด์Šˆ๋Š” GraphQL์ด fragment์—์„œ์˜ ์žฌ๊ท€๋ฅผ ๊ธˆ์ง€ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.

GraphQL ์›Œํ‚น ๊ทธ๋ฃน์˜ ๊ณผ๊ฑฐ ๋ฐ‹์—…์—์„œ, ์ด ์ด์Šˆ๋ฅผ ์ œ๊ธฐํ•œ ๊ฐœ๋ฐœ์ž Roman์€ ์‚ฌ์–‘์ด ๋ถ€๊ณผํ•˜๋Š” ์ œํ•œ์— ๋Œ€ํ•œ ๋ฐ˜๋Œ€ ์˜๊ฒฌ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๊ฐœ๋ฐœ์ž์ด๋ฉฐ, ์‚ฌ์–‘์ด ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์‹คํ–‰์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์ด ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š” ๋ฐ˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฌด์—‡์„ ์ „๋‹ฌ๋ฐ›๊ธฐ๋ฅผ ์›ํ•˜๋Š”์ง€์— ์ง‘์ค‘ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹คโ€”โ€”์–ด๋–ป๊ฒŒ๊ฐ€ ์•„๋‹ˆ๋ผ

fragment์—์„œ์˜ ์žฌ๊ท€๋ฅผ ๊ธˆ์ง€ํ•˜๋Š” ๊ทœ์น™์€ ๊ณต๊ฐœ API์˜ ๋ณด์•ˆ์„ ์œ ์ง€ํ•œ๋‹ค๋Š” ์ „์ œ๋กœ ์ •๋‹นํ™”๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ GraphQL์€ Facebook์ด ๊ณต๊ฐœ์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ๊ฒƒ์ด๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ API ์„ค๊ณ„์˜ ๊ฒฐํ•จ์„ ์•…์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

GraphQL ์ฐฝ์‹œ์ž Lee Byron์€ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์šฐ๋ ค ์‚ฌํ•ญ์„ ํ‘œ๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌดํ•œ ์žฌ๊ท€๏ผ›์ œํ•œ์€ ์‚ฌ์–‘๋งŒ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹คโ€”โ€”์–ธ์ œ ์–ด๋–ป๊ฒŒ ์ค‘์ง€ํ•ด์•ผ ํ•˜๋Š”๊ฐ€

๋ฐ์ดํ„ฐ ๊ฒ€์ฆ๏ผ›๋™์ผํ•œ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ์—์„œ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„๋˜๋Š”๊ฐ€. ์ด์ƒ์ ์œผ๋กœ๋Š” ์ˆœํ™˜์„ ๊ฐ์ง€ํ•˜๊ณ  ์ฆ‰์‹œ ์ค‘์ง€ํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ์ผ๋ถ€ ์„œ๋ฒ„๋Š” ์ด๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์ค‘์ง€ํ•˜๊ธฐ ์ „์— ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฃจํ”„๋ฅผ ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์ด๊ฒƒ์„ ๊ฐ–์ง€ ์•Š๋Š” ๊ฒƒ์˜ ๋น„์šฉ์€ ๋ฌด์—‡์ธ๊ฐ€๏ผ›์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ์ •๋‹นํ™”ํ•˜๋Š”๊ฐ€๏ผŸ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค๏ผ›์ฟผ๋ฆฌ์—์„œ ๊นŠ์ด ์ˆ˜์ค€ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹คโ€”โ€”๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค์ƒ GraphQL์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ–ˆ์„ ๊ฒฝ์šฐ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์˜ ํƒˆ์„คํƒ•ํ™” ๋ฒ„์ „์ž…๋‹ˆ๋‹ค

๊ฐ์ž์˜ ์ž…์žฅ์—์„œ ๋ณด๋ฉด Roman๊ณผ Lee ๋ชจ๋‘ ์˜ณ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Lee Byron์€ ๊ณต๊ฐœ GraphQL API์˜ ๋ณด์•ˆ์„ ๊ฑฑ์ •ํ•ฉ๋‹ˆ๋‹ค. ์žฌ๊ท€์ ์ธ fragment๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์€ ์•…์˜์ ์ธ ํ–‰์œ„์ž๊ฐ€ ์ฟผ๋ฆฌ์—์„œ ๋์—†๋Š” ์ˆœํ™˜ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ์ค‘๋‹จ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ํŒ€์ด ์˜๋„์น˜ ์•Š๊ฒŒ ์‹œ์Šคํ…œ์„ ์ค‘๋‹จ์‹œํ‚ค๋Š” ์ฟผ๋ฆฌ๋ฅผ ๊ณต๊ฐœํ•˜๋Š” ใ€Œ์…€ํ”„ DDoSใ€์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์—†์• ๊ธฐ ์œ„ํ•ด ์ •๋‹นํ™”๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด Roman์€ GraphQL API๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ž์‹ ์˜ ๋Šฅ๋ ฅ์— ๋ถ€๊ณผ๋˜๋Š” ์ œํ•œ์„ ์šฐ๋ คํ•ฉ๋‹ˆ๋‹ค. Roman์ด API์˜ ์œ ์ผํ•œ ์†Œ๋น„์ž์ธ ๊ฒฝ์šฐ(์ฆ‰, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š” ํ”„๋ผ์ด๋น— API์ธ ๊ฒฝ์šฐ), ๋˜๋Š” ์„œ๋ฒ„๊ฐ€ ์ˆœํ™˜ ์‚ฌ์ดํด์„ ๊ฐ์ง€ํ•˜๊ณ  ์ค‘์ง€ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ, GraphQL์˜ ์ œํ•œ์€ ํ•ด๋กญ๊ณ  ์ •๋‹นํ™”๋  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋…ผ์˜์˜ ํ•ต์‹ฌ์€ ์žฌ๊ท€์ ์ธ fragment๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ, ๋” ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. GraphQL์˜ ๋Œ€์ƒ์€ ๋ˆ„๊ตฌ์ธ๊ฐ€? ๋‹จ์ผ ๊ทธ๋ฃน์ด ์•„๋‹ˆ๋ผ๋ฉด, ๋‹จ์ผ API ์‚ฌ์–‘์ด ๋ชจ๋“  ๋‹ค์–‘ํ•œ ์ดํ•ด๊ด€๊ณ„์ž๋“ค์˜ ์š”๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ๊ทธ๋ฆฌ๊ณ  ์ถฉ๋Œ์„ ๋ง‰์„ ์ˆ˜ ์—†๋‹ค๋ฉด, ์ ์–ด๋„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

์ด๋Ÿฌํ•œ ์งˆ๋ฌธ๋“ค์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

GraphQL์˜ ๋Œ€์ƒ์€ ๋ˆ„๊ตฌ์ธ๊ฐ€?

GraphQL์€ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ดํ•ด๊ด€๊ณ„์ž๋“ค์— ์˜ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ทธ ์ค‘์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ฃน์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

1. API ์‚ฌ์šฉ์ž: ์–ด๋–ค ์ด์œ ๋กœ๋“  GraphQL ์—”๋“œํฌ์ธํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค. ์˜ˆ๋ฅผ ๋“ค์–ด, GitHub์˜ ๊ณต๊ฐœ GraphQL API์˜ API ์‚ฌ์šฉ์ž๊ฐ€ ๋˜์–ด GitHub ์ €์žฅ์†Œ์— ๊ด€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๊ฐœ๋ฐœ์ž: GraphQL ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ๋“ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Gatsby๋กœ ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์€ GraphQL์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์ดํŠธ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

3. ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž: GraphQL API์˜ ๋ฆฌ์กธ๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ๋“ค.

๋˜ํ•œ, GraphQL API๋Š” ๊ณต๊ฐœ ๋˜๋Š” ๋น„๊ณต๊ฐœ์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณต๊ฐœ API: GraphQL ์—”๋“œํฌ์ธํŠธ์— ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์•…์˜์ ์ธ ํ–‰์œ„์ž์˜ ๊ณต๊ฒฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์•ˆ ์กฐ์น˜๋ฅผ ๊ฐ•๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ API: ์˜๋„๋œ ํ–‰์œ„์ž๋งŒ์ด API์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ณธ์งˆ์ ์ธ ๋ณด์•ˆ ์œ„ํ—˜์ด ์—†์œผ๋ฉฐ, ์…€ํ”„ DDoS๋„ ์ ์ ˆํ•œ ์ฝ”๋”ฉ ๊ด€ํ–‰์œผ๋กœ ์‰ฝ๊ฒŒ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ API ์‚ฌ์–‘์ด ๋ชจ๋“  ์ดํ•ด๊ด€๊ณ„์ž์˜ ์š”๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

Roman์ด ์ œ๊ธฐํ•œ ์ด์Šˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "๋‚ด GraphQL API๊ฐ€ ๋น„๊ณต๊ฐœ์ด๊ณ , ๋‚ด๊ฐ€ ํ•˜๋Š” ์ผ์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด(์ฝ”๋“œ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ์‹คํ–‰์ด ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” 100%์˜ ํ™•์‹ ์ด ์žˆ๋‹ค๋ฉด), ์™œ fragment์—์„œ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š”๊ฐ€?"

Recursions @ xkcd

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์˜ ์˜ˆ๋Š” ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด GraphQL ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ(Gatsby, Next.js ๋˜๋Š” RedwoodJS ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. GraphQL API๋Š” ์ข…์ข… ๋น„๊ณต๊ฐœ์ด๋ฉฐ, ์‹ค์ˆ˜๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ DDoSํ•˜์—ฌ ๋ถˆ์ด์ต์„ ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์ตœ์•…์˜ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋˜๋Š” ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์—์„œ ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๋ฟ์ž…๋‹ˆ๋‹ค).

์œ„ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด, GraphQL ์‚ฌ์–‘์ด ์ž์‹ ๋“ค์˜ ์„ค์ •์—๋Š” ์•„๋ฌด๋Ÿฐ ๋ถ€์ •์ ์ธ ๊ฒฐ๊ณผ๊ฐ€ ์—†๋Š” ์œ ์ตํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๊ธˆ์ง€ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์˜์•„ํ•˜๊ฒŒ ์—ฌ๊ธฐ๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ์žฌ๊ท€์ ์ธ fragment๋ฅผ ๊ธˆ์ง€ํ•จ์œผ๋กœ์จ GraphQL ์‚ฌ์–‘์€ GraphQL์˜ ๋ชจ๋“  ์ž ์žฌ์  ์šฉ๋„ ์ค‘ ์ผ๋ถ€์—๋งŒ ์ ์šฉ๋˜๋Š” ๋ณด์•ˆ ์กฐ์น˜๋ฅผ ์•ˆ์ „์„ ์œ„ํ•ด ๋ถ€๊ณผํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ์šฉ๋„์— ์ ์šฉ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

GraphQL ์‚ฌ์–‘์€ ๋ชจ๋“  ์ดํ•ด๊ด€๊ณ„์ž๋ฅผ ๋” ์ž˜ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”๊ฐ€?

์„œ๋กœ ๋‹ค๋ฅธ ์ดํ•ด๊ด€๊ณ„์ž๋“ค์ด ์„œ๋กœ ๋‹ค๋ฅธ ์š”๊ฑด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, GraphQL ์‚ฌ์–‘์€ ์–ด๋–ป๊ฒŒ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ์š”? (์‚ฌ์–‘์„ ํฌํฌํ•˜์—ฌ ํŠน์ • ๋Œ€์ƒ์„ ์œ„ํ•œ ๋งž์ถคํ˜• ๋ฒ„์ „์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ํ”ผํ•˜๊ณ ์ž ํ•˜๋Š” ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.)

๋‘ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์‚ฌ์–‘ ๊ธฐ์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜์ง€๋งŒ, ๋‘ ๋ฒˆ์งธ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

GraphQL ์‚ฌ์–‘ ์ˆ˜์ค€์—์„œ์˜ feature-toggle

์ทจํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์‚ฌ์–‘์ด ๊ทœ์น™์„ ใ€Œ๊ฐ•์ œใ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ใ€Œ์ œ์•ˆใ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, fragment์—์„œ์˜ ์žฌ๊ท€๋ฅผ ๊ธˆ์ง€ํ•˜๋Š” ๊ทœ์น™์€ ๊ฐ•๋ ฅํžˆ ๊ถŒ๊ณ ๋˜์ง€๋งŒ, ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ์—ฌ์ „ํžˆ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด ํ•ด๊ฒฐ์ฑ…์€ ์žฌ๊ท€์ ์ธ fragment์˜ ๊ธฐ๋ณธ ์ƒํƒœ๋ฅผ ใ€Œํ•„์ˆ˜ใ€์—์„œ ใ€Œ์„ ํƒใ€์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์–ด, ๋‘ ๊ฐ€์ง€ ๋ถ€์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

  • API๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(Lee Byron์ด ํ”ผํ•˜๊ณ  ์‹ถ์€ ์‹œ๋‚˜๋ฆฌ์˜ค)
  • ๊ธˆ์ง€๋˜์—ˆ๋˜ ์ฟผ๋ฆฌ๊ฐ€ ํ—ˆ์šฉ๋˜๋ฏ€๋กœ ํ˜ธํ™˜์„ฑ ํŒŒ๊ดด ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค

๋”ฐ๋ผ์„œ ์˜ต์…˜์„ ๋ฐ˜์ „์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋” ๋‚ซ์Šต๋‹ˆ๋‹ค. fragment์—์„œ์˜ ์žฌ๊ท€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ์ „ํžˆ ๊ธˆ์ง€๋˜์ง€๋งŒ, ์ด ๋™์ž‘์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” feature-flag๋ฅผ ์ „ํ™˜ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ž์‹ ์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ด€๋ฆฌ์ž๋งŒ์ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ํŠน์ • ์„ค์ • ํ•˜์—์„œ ๊ฐ€์žฅ ๊ฐ€์น˜ ์žˆ์œผ๋ฏ€๋กœ, GraphQL ์„œ๋ฒ„์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์„ค์ •์„ ์ œ๊ณตํ• ์ง€ ์—ฌ๋ถ€, ์–ด๋–ป๊ฒŒ, ์–ธ์ œ ์ œ๊ณตํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Gatsby๋Š” ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ UI๋ฅผ ํ†ตํ•ด ์˜ต์…˜์„ ๋ˆˆ์— ๋„๊ฒŒ ํ‘œ์‹œํ•˜๊ณ , ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์•„์ด๋””์–ด๋Š” GraphQL ์‚ฌ์–‘์ด ใ€Œํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€๋งŒ ์„ ํƒ์ ์ธ ๊ธฐ๋Šฅใ€์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์€ ์„ค์ •์„ ํ†ตํ•ด ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ๋ณธ ์ƒํƒœ๋Š” ์‚ฌ์–‘์—์„œ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์žฌ๊ท€์ ์ธ fragment ๊ธˆ์ง€๊ฐ€ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ, Map ํƒ€์ž…๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค๋„ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Map ํƒ€์ž…์€ Lee Byron์— ์˜ํ•ด ์‚ฌ์–‘์— ์ˆ˜์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š”:

Map ํƒ€์ž…๊ณผ ํ‚ค/๊ฐ’ ์Œ์˜ ๋ฆฌ์ŠคํŠธ ์‚ฌ์ด์—๋Š” ์ƒ๋‹นํ•œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” ์ปฌ๋ ‰์…˜์˜ ํŽ˜์ด์ง€๋„ค์ด์…˜์ž…๋‹ˆ๋‹ค. ๊ฐ’์˜ ๋ฆฌ์ŠคํŠธ๋Š” ๋ช…ํ™•ํ•œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ทœ์น™์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ˆœ์„œ๊ฐ€ ์—†๋Š” ํ‚ค-๊ฐ’ ์Œ์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ Map์€ ํŽ˜์ด์ง€๋„ค์ด์…˜์ด ํ›จ์”ฌ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ Map์€ ๊ฐ’์˜ ํ•œ ํ•„๋“œ๊ฐ€ ์ธ๋ฑ์‹ฑ๋˜๋Š” API์—์„œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์ œ ์ƒ๊ฐ์—๋Š” ์ธ๋ฑ์‹ฑ์€ ์Šคํ† ๋ฆฌ์ง€์˜ ๋ฌธ์ œ์ด์ž ํด๋ผ์ด์–ธํŠธ ์บ์‹ฑ์˜ ๋ฌธ์ œ์ด์ง€ ์ „์†ก์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ API ์•ˆํ‹ฐํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด ์•ˆํ‹ฐํŒจํ„ด์ด ์šฐ๋ ค๋ฉ๋‹ˆ๋‹ค. API์—์„œ Map์˜ ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋„ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ด ์ด๋Ÿฌํ•œ ์•ˆํ‹ฐํŒจํ„ด์„ ์œ„ํ•œ ๊ฒƒ์ด ๋ ๊นŒ๋ด ๊ฑฑ์ •๋˜๋ฏ€๋กœ ์‹ ์ค‘ํ•˜๊ฒŒ ์ง„ํ–‰ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

Lee Byron์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์•ˆํ‹ฐํŒจํ„ด์œผ๋กœ ์‚ฌ์šฉ๋  ๊ฒƒ์— ๋Œ€ํ•œ ์šฐ๋ ค๋ฅผ ํ‘œ๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์Šˆ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋งŽ์€ ์ง€์ง€๋ฅผ ๋ฐ›์€ ๊ฒƒ์„ ๊ฐ์•ˆํ•˜์—ฌ(150๊ฐœ ์ด์ƒ์˜ ๐Ÿ‘), ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ Map ํƒ€์ž…์„ ์Šคํ‚ค๋งˆ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GraphQL ์„œ๋ฒ„์— ์˜ํ•œ feature-toggle

์œ„์˜ ์ œ์•ˆ์ด GraphQL ์‚ฌ์–‘์— ๋„ˆ๋ฌด ์œ„ํ—˜ํ•˜๋‹ค๋Š” ์ด์œ ๋กœ ์ง€์ง€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ๋Œ€์•ˆ์€ GraphQL ์„œ๋ฒ„ ์ˆ˜์ค€์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. GraphQL ์„œ๋ฒ„๋Š” fragment์—์„œ์˜ ์žฌ๊ท€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์ปค์Šคํ…€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๋ฅผ ์ผ๋ฐ˜ํ™”ํ•˜๋ฉด, GraphQL ์„œ๋ฒ„๋Š” ์‚ฌ์–‘์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ , ์‚ฌ์–‘์— ์—†๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋™์ž‘์ด ๋†€๋ผ์›€์„ ์ฃผ์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด, ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ ์ƒํƒœ๊ฐ€ ์‚ฌ์–‘์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ž„์„ ํ™•์ธํ•˜๊ณ , API ๊ด€๋ฆฌ์ž๋Š” ๊ธฐ๋Šฅ์„ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถฉ๋ถ„ํžˆ ์ธ์‹ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์ด๊ฒƒ์ด Gato GraphQL์ด ใ€Œinnovative featuresใ€๋ฅผ ์œ„ํ•ด ์ฑ„ํƒํ•œ ์ „๋žต์ž…๋‹ˆ๋‹ค.)

๋งˆ๋ฌด๋ฆฌ

GraphQL์ด ์ ์  ๋” ์ธ๊ธฐ๋ฅผ ์–ป์œผ๋ฉด์„œ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์ด๋ฅผ ์Šคํƒ์˜ ์ผ๋ถ€๋กœ ์‚ผ์•˜์œผ๋ฉฐ, ์ƒˆ๋กœ์šด ์ดํ•ด๊ด€๊ณ„์ž๋“ค(๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์˜ ์ƒˆ๋กœ์šด ์œ ํ˜•๋“ค)์ด ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์›๋ž˜ Facebook์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ์‚ฌ์–‘์€ ์ ์  ๋” ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€์‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ท€์ ์ธ fragment์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ, ํ•œ ์ดํ•ด๊ด€๊ณ„์ž ๊ทธ๋ฃน์ด ๋‹ค๋ฅธ ์ดํ•ด๊ด€๊ณ„์ž๋“ค์—๊ฒŒ๋Š” ์—ญํšจ๊ณผ๋ฅผ ๋‚ด๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด ํ•ด๋กœ์šด ๊ธฐ๋Šฅ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•˜๊ณ , ๋ถˆ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์ดํ•ด๊ด€๊ณ„์ž๋“ค์ด GraphQL์— ์‹ค๋งํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

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


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

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