๐๐ปโโ๏ธ Gato GraphQL์ด ๋ชจ๋ ธ๋ ํฌ๋ฅผ ํ์๋ก ํ๋ ์ด์ ์ ์ต์ ํ ๋ฐฉ๋ฒ
๋ฉฐ์น ์ , Hosting all your PHP packages together in a monorepo ๋ผ๋ ๊ธ์ ๊ฒ์ํ์ต๋๋ค. ๊ทธ ๊ธ์์๋ PHP ์ฝ๋๋ฒ ์ด์ค ๊ด๋ฆฌ์ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ํ์ฉํ๊ณ ์ถ์ ์ด์ ์, Monorepo Builder๋ฅผ ํตํด ์ด๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ต๋๋ค.
์ฌ๊ธฐ์๋ ๊ทธ ๊ธ์ ๋ณด์ํ๋ ํํ๋ก, GatoGraphQL/GatoGraphQL ์ฝ๋๋ฒ ์ด์ค๏ผGato GraphQL, ๊ทธ ๊ธฐ๋ฐ์ด ๋๋ GraphQL ์์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ๊ตฌ์ถ๋ ์ปดํฌ๋ํธ ๋ชจ๋ธ ์ํคํ
์ฒ๋ฅผ ํธ์คํ
ํ๊ณ ์์ต๋๋ค๏ผ๊ฐ ๋ชจ๋
ธ๋ ํฌ์์ ํธ์คํ
๋์ด์ผ ํ๋ ์ด์ ์, ์ ๊ฐ ์ํํ ์ต์ ํ์ ๋ํด ์ข ๋ ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
Gato GraphQL์ด ๋ชจ๋ ธ๋ ํฌ๋ฅผ ํ์๋ก ํ๋ ์ด์
CMS ๋น์ข ์์ฑ์ ์ง์ํ๊ธฐ ์ํด, Gato GraphQL ๋ฐ ๊ด๋ จ ํ๋ก์ ํธ์ ์ฝ๋๋ฒ ์ด์ค๋ Composer๋ก ๊ด๋ฆฌ๋๋ ์๋ง์ ํจํค์ง๋ก ๋ถ๋ฆฌ๋์์ต๋๋ค. ์ด 100๊ฐ ์ด์์ ํจํค์ง๊ฐ ์์ฑ๋์์ต๋๋ค๏ผ๏ผํ์ฌ๋ 200๊ฐ ์ด์์ ๋๋ค.๏ผ
ํจํค์ง ์๊ฐ ๋ง์๋ Composer๋ก ๋ชจ๋ ์กฐํฉํ๋ ๋ฐ ์ถ๊ฐ์ ์ธ ๋ณต์กํจ์ ์์ต๋๋ค. composer install์ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ ํจํค์ง๊ฐ ๊ฐ๋ณ ์ ์ฅ์์ ์กด์ฌํ๋ฉด ๋ฒ์ ๊ด๋ฆฌ ๋ฌธ์ ๋ก ์ธํด ๊ฐ๋ฐ์ด ์ด๋ ค์์ง๋๋ค.
๊ฐ ํจํค์ง๋ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ฉฐ, ์ด๋ค ํจํค์ง์ ๋ชจ๋ ๋ฒ์ ์ ๋ค๋ฅธ ํจํค์ง์ ํน์ ๋ฒ์ ์ ์์กดํฉ๋๋ค. ์ด๋ ๊ฒ ๋ง์ ํจํค์ง๊ฐ ์์ผ๋ฉด, PR ์์ฑ ์ ๋ชจ๋ ๋ฒ์ ์ด ์๋ก ์ด๋ป๊ฒ ์์กดํ๋์ง ์ค์ ํ๋ ๊ฒ์ ์ ๋ชฝ์ด ๋ ์ ์์ผ๋ฉฐ, ๋ง์น ์คํ๊ฒํฐ ์ฝ๋ ํ ์ ์์ฒ๋ผ ๋ฉด์ ํ์ชฝ ๋์ ๋ณด์ด์ง๋ง ์ด๋์ ๋๋๋์ง๋ ์ ์ ์๋ ์ํ๊ฐ ๋ฉ๋๋ค.

์ค์ ๋ก, ๊ด๋ จ๋ ๋ชจ๋ ์ ์ฅ์์ ์ฌ๋ฌ ๋ธ๋์น์ ๊ฑธ์น ๋ฒ์ ์ ๋ชจ๋ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๋๋ฌด ์ด๋ ค์์ ธ์, ์ด ๊ณผ์ ์ ์์ ํ ๊ฑด๋๋ฐ๊ณ ๊ฐ ์ ์ฅ์์ master ๋ธ๋์น์ ์ฝ๋๋ฅผ ์ง์ ํธ์ํ๊ณ ๊ฐ๊ฐ์์ dev-master ๋ฒ์ ์ ์์กดํ๊ฒ ๋์์ต๋๋ค.
์ด๋ ์ ์ ํ์ง ์์์ต๋๋ค. ๋ชจ๋ ์ฝ๋๋ฅผ GatoGraphQL/GatoGraphQL์ ํธ์คํ
ํ๋ ๋ชจ๋
ธ๋ ํฌ ๋ชจ๋ธ๋ก ์ ํํจ์ผ๋ก์จ, ๊ทธ ๋ฌธ์ ๊ฐ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐ๋์์ต๋๋ค.
ํ์ํ ๋งํ ๋ถ์์ฉ: ๊ธฐ์ฌ์ ์ง์ ์ฅ๋ฒฝ ๋ฎ์ถ๊ธฐ
๊ธ์์๋ ์ธ๊ธํ๋ฏ์ด, ํ๋ก์ ํธ๊ฐ ํจํค์ง๋ง๋ค ํ๋์ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ์์ , ํ ๊ธฐ์ฌ์๊ฐ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ ์คํจํ์ฌ ์ฐธ์ฌํ๊ธฐ๋ ์ ์ ํ๋ก์ ํธ๋ฅผ ๋ ๋ ์ผ์ด ์์์ต๋๋ค.
๋ชจ๋ ธ๋ ํฌ๋ก ์ ํํ๊ธฐ ์ ์๋ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ด ๋งค์ฐ ์ด๋ ค์ ์ต๋๋ค. ์ ๋ ์์ฑ์์๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ์ ์ฅ์๋ฅผ ํด๋ก ํ๊ณ ๋จ์ผ VSCode ์ํฌ์คํ์ด์ค์ ๋ชจ๋ ์ถ๊ฐํ์ฌ ์ด๋ป๊ฒ๋ ์๋์ํฌ ์ ์์์ต๋๋ค.
์ ์ฌ์ ์ธ ๊ธฐ์ฌ์๋ค์ด ๋์ผํ ํ๊ฒฝ์ ์ค์ ํ๊ธฐ ์ฝ๋๋ก ์ด bash ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์๋ํ์ต๋๋ค. ํ์ง๋ง ์์งํ, ๊ทธ๊ฒ์ ์ฒ์๋ถํฐ ๋ถ๊ฐ๋ฅํ ์ผ์ด์๊ณ , ์๋ฌด๋ ํ๋ก์ ํธ์ ๊ธฐ์ฌ๋ฅผ ์์ํ ์ ์์์ต๋๋ค.
๋ชจ๋ ธ๋ ํฌ ๋๋ถ์, ๋๊ตฐ๊ฐ๊ฐ ์ฐธ์ฌํ๊ณ ์ถ์ ๋ ๋ถํฉ๋ฆฌํ ๊ด๋ฃ์ฃผ์๋ก ๊ธฐ์ฌ์๋ฅผ ๊ฑฐ๋ถํ์ง ์์ ๊ฒ์ด๋ผ๋ ํ์ ์ ๊ฐ์ง๊ณ ๋ฐค์ ํธ์ํ ์ ๋ค ์ ์๊ฒ ๋์์ต๋๋ค.
๋ชจ๋ ธ๋ ํฌ ์ต์ ํ
๊ธ์์ ์ธ๊ธํ๋ฏ์ด, ๋์๋ค๊ณผ ๋น๊ตํ์ฌ Monorepo Builder ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฅ์ ์ PHP๋ก ๊ตฌ์ถ๋์ด ์์ด ํ์ฅ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด, master์ ํธ์ํ๊ณ ๋ชจ๋
ธ๋ ํฌ๋ฅผ ๋ถํ ํ ๋, GitHub Action์ ๋งคํธ๋ฆญ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ํจํค์ง์ ๋ํด ํ๋์ ๋ฌ๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ํด๋น ์ฝ๋๋ฅผ ์์ฒด ์ ์ฅ์์ ๋๊ธฐํํฉ๋๋ค๏ผPackagist๋ฅผ ํตํ ๋ฐฐํฌ๋ฅผ ์ํด๏ผ.
GatoGraphQL/GatoGraphQL์๋ 200๊ฐ ์ด์์ ํจํค์ง๊ฐ ํฌํจ๋์ด ์์ด, 200๊ฐ ์ด์์ ๋ฌ๋ ์ธ์คํด์ค๊ฐ ์คํ๋๊ณ ์์์ต๋๋ค.

์ฌ๊ธฐ์ ๋ฌธ์ ๋ GitHub๊ฐ ๋ณ๋ ฌ๋ก ์คํ ๊ฐ๋ฅํ ์์ ์๋ฅผ 20๊ฐ๋ก ์ ํํ๊ณ ์๋ค๋ ์ ์ ๋๋ค. ๋ชจ๋ ์ก์ ์ด ํ์ ๋ฐฐ์น๋๋ฏ๋ก, ๋ค๋ฅธ ์ก์ ์ ๊ณ์ ์คํํ๋ ค๋ฉด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ์ต๋๋ค.
๊ฒ๋ค๊ฐ, GitHub๊ฐ ๋ฌ๋๋ฅผ ์ฆ์ ํ๋ก๋น์ ๋ํ์ง ์๊ณ ๋์ค์ผ๋ก ๋ฏธ๋ฃจ๋ ๊ฒฝ์ฐ๋ ์ข ์ข ์์์ต๋๋ค:

์ด ๋ชจ๋ ๊ฒ์ด ๋๊ธฐ ์๊ฐ์ผ๋ก ์ด์ด์ง๋๋ค. 200๊ฐ ์ด์์ ํจํค์ง๊ฐ ์์ผ๋ฉด, ๋จ ํ๋์ PR์ ๋ณํฉํ๋ ๋ฐ ์ต๋ 1์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์์ต๋๋ค๏ผ ์ด๋ ํด๊ฒฐ์ด ํ์ํ ๋ฌธ์ ์์ต๋๋ค.
์ปค์คํ ๋ช ๋ น์ผ๋ก ๋ชจ๋ ธ๋ ํฌ๋ฅผ ํ์ฅํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
Monorepo Builder ํ์ฅํ๊ธฐ
์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋ช ๋ น์ ์คํํ๋ฉด ์ ์ฅ์์ ๋ชจ๋ ํจํค์ง ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค:
vendor/bin/monorepo-builder packages-json
๊ทธ๋ฐ๋ฐ ์ด๋ฐ ์๊ฐ์ด ๋ค์์ต๋๋ค: ๋ชจ๋ ํจํค์ง๋ฅผ ๋๊ธฐํํ ํ์๋ ์๊ณ , PR์์ ๋ณ๊ฒฝ๋ ์ฝ๋๊ฐ ํฌํจ๋ ํจํค์ง๋ง ๋๊ธฐํํ๋ฉด ๋๋ค๊ณ ์.
๋ณ๊ฒฝ๋ ํ์ผ ๋ชฉ๋ก์ ํ์
ํ ์ ์๋ค๋ฉด, ํด๋น ํ์ผ์ ํฌํจํ๋ ๋ณ๊ฒฝ๋ ํจํค์ง๋ฅผ ํน์ ํ ์ ์์ต๋๋ค. ์ฆ, git diff๋ฅผ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ filter ์
๋ ฅ์ผ๋ก packages-json ๋ช
๋ น์ ์ ๋ฌํ๋ ๊ฒ์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ด:
vendor/bin/monorepo-builder packages-json --filter=modified_file_1 --filter=modified_file_2 --filter=...๊ทธ๋ฐ๋ฐ Monorepo Builder์ ํฌํจ๋ packages-json ๋ช
๋ น์ filter ์
๋ ฅ์ ์ง์ํ์ง ์์ต๋๋ค. ๋ฐ๋ก ์ด ๋ถ๋ถ์ด ์ปค์คํ
๋ช
๋ น์ผ๋ก ํ์ฅํด์ผ ํ๋ ๊ณณ์
๋๋ค.
Monorepo Builder๋ Symfony์ DependencyInjection์ ์ฌ์ฉํ๋ฏ๋ก, ์ปจํ
์ด๋์ ์ ์๋น์ค๋ฅผ ์ฃผ์
ํ์ฌ ํ์ฅํ ์ ์์ต๋๋ค. ์ค์ ๋ก, ์ค์ ํ์ผ monorepo-builder.php๋ ์ด๋ฏธ ์๋น์ค ์ปจํผ๊ท๋ ์ดํฐ์
๋๋ค.
๊ทธ๋์ ์ ๋ filter ์
๋ ฅ์ ์ง์ํ๋ package-entries-json์ด๋ผ๋ ์ ๋ช
๋ น์ผ๋ก Monorepo Builder๋ฅผ ํ์ฅํ์ต๋๋ค:
final class PackageEntriesJsonCommand extends AbstractSymplifyCommand
{
private PackageEntriesJsonProvider $packageEntriesJsonProvider;
public function __construct(PackageEntriesJsonProvider $packageEntriesJsonProvider)
{
$this->packageEntriesJsonProvider = $packageEntriesJsonProvider;
parent::__construct();
}
protected function configure(): void
{
$this->setDescription('Provides package entries in json format. Useful for GitHub Actions Workflow');
$this->addOption(
Option::FILTER,
null,
InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
'Filter the packages to those from the list of files. Useful to split monorepo on modified packages only',
[]
);
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
/** @var string[] $fileFilter */
$fileFilter = $input->getOption(Option::FILTER);
$packageEntries = $this->packageEntriesJsonProvider->providePackageEntries($fileFilter);
// must be without spaces, otherwise it breaks GitHub Actions json
$json = Json::encode($packageEntries);
$this->symfonyStyle->writeln($json);
return ShellCode::SUCCESS;
}
}์๋น์ค ์ปจํ ์ด๋์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ ๋ฉ๋๋ค:
return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();
$services->defaults()->autowire()->autoconfigure();
$services->set(PackageEntriesJsonCommand::class);
}์ด์ package-entries-json์ด๋ผ๋ ์ ๋ช
๋ น์ GitHub Action ์ํฌํ๋ก์์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
GitHub Action์์ ๋ณ๊ฒฝ๋ ํ์ผ ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ
์ด์ ์ํฌํ๋ก๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ ๋ ํธ๋ฆฌํ๊ฒ๋ technote-space/get-diff-action ์ก์
์ ์ฌ์ฉํฉ๋๋ค. ์ด ์ก์
์ PR์์ ๋ณ๊ฒฝ๋ ๋ชจ๋ ํ์ผ์ git diff๋ฅผ ์ ๊ณตํฉ๋๋ค:
# git diff to generate matrix with modified packages only
- uses: technote-space/get-diff-action@v4
with:
PATTERNS: layers/*/*/*/**์ด ๊ฒฐ๊ณผ๏ผ${{ env.GIT_DIFF }}์ ์ ์ฅ๋ฉ๋๋ค๏ผ๋ก๋ถํฐ ์ปค์คํ
๋ช
๋ น package-entries-json ํธ์ถ์ ์์ฑํ๊ณ , ์ถ๋ ฅ์ผ๋ก ์ค์ ํฉ๋๋ค:
- id: output_data
name: Calculate matrix for packages
run: |
quote=\'
clean_diff="$(echo "${{ env.GIT_DIFF }}" | sed -e s/$quote//g)"
packages_in_diff="$(echo $clean_diff | grep -E -o 'layers/[A-Za-z0-9_\-]*/[A-Za-z0-9_\-]*/[A-Za-z0-9_\-]*/' | sort -u)"
echo "[Packages in diff] $(echo $packages_in_diff | tr '\n' ' ')"
filter_arg="--filter=$(echo $packages_in_diff | sed -e 's/ / --filter=/g')"
echo "::set-output name=matrix::$(vendor/bin/monorepo-builder package-entries-json $(echo $filter_arg))"๊ฒฐ๊ณผ๋ก ์ป์ ํจํค์ง๋ ๋งคํธ๋ฆญ์ค ์์ฑ์ ์ฌ์ฉ๋ฉ๋๋ค:
outputs:
matrix: ${{ steps.output_data.outputs.matrix }}์ ๋ง ์ ์๋ํฉ๋๋ค๏ผ ์ด ์์์์๋ ๋ณ๊ฒฝ๋ ํจํค์ง๊ฐ 2๊ฐ๋ฟ์ด์๊ธฐ ๋๋ฌธ์, ๋งคํธ๋ฆญ์ค์์ ์คํ๋ ์ธ์คํด์ค๋ 2๊ฐ๋ฟ์ด์์ต๋๋ค:

์ด์ PR ๋ณํฉ์ด 1์๊ฐ์์ ๋จ ๋ช ๋ถ์ผ๋ก ์ค์ด๋ค์ด, ๋ค์ ํ๋ณตํ ๊ฐ๋ฐ์๊ฐ ๋์์ต๋๋ค.
์ถ๊ฐ ์ต์ ํ ๋ฐ ๊ณผ์
GitHub Action์์ ์๊ฐ์ ์ค์ผ ์ ์๋ ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค: PHPUnit ํ ์คํธ ์คํ ์์ ๋๋ค.
ํ์ฌ๋ ์ ์ฝ๋๊ฐ ์ ๋ก๋๋ ๋๋ง๋ค ๋ชจ๋ ํจํค์ง์ ์ ์ฒด ํ ์คํธ ๋ฐฐํฐ๋ฆฌ๊ฐ ์คํ๋ฉ๋๋ค. ํ์ง๋ง ์ด ์ญ์ ์ต์ ํํ ์ ์์ต๋๋ค.
๋ชจ๋ ธ๋ ํฌ์ A, B, C ์ธ ๊ฐ์ ํจํค์ง๊ฐ ์๊ณ , B๊ฐ A์ ์์กดํ๋ฉฐ C๊ฐ B์ ์์กดํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
์ด ๊ฒฝ์ฐ, ๋จ์ผ ํจํค์ง์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์คํ์ด ํ์ํ ํ ์คํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ฌ๋ผ์ง๋๋ค:
- A์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ: A, B, C๋ฅผ ํ ์คํธํด์ผ ํฉ๋๋ค
- B์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ: B์ C๋ฅผ ํ ์คํธํด์ผ ํฉ๋๋ค
- C์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ: C๋ง ํ ์คํธํด์ผ ํฉ๋๋ค
์ต์ ํ๋ ๋ณ๊ฒฝ๋ ํจํค์ง ๋ชฉ๋ก๏ผ์์ ์ต์ ํ์ ๋์ผ๏ผ์ ๊ฐ์ ธ์์, ํด๋น ํจํค์ง๋ค๊ณผ ๊ทธ๊ฒ๋ค์ ์์กดํ๋ ๋ชจ๋ ํจํค์ง์ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ๋ฌ๋ ค ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ํ์ฌ ์ ๋ ๋ชจ๋ ธ๋ ํฌ ๋ด ๊ฐ ํจํค์ง๊ฐ ์๋ก ์ด๋ป๊ฒ ์์กดํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค.
๋ฃจํธ composer.json์๋ ๋ชจ๋ ๋ก์ปฌ ํจํค์ง๊ฐ ํฌํจ๋์ด ์์ง๋ง, require๊ฐ ์๋ replace ์น์
์ ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์ composer info ${ package_name }์ ์คํํ์ฌ Composer๋ฅผ ํตํด ์์กด์ฑ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๋์์ผ๋ก, ๊ฐ ํจํค์ง์ ์๋ธํด๋๋ก ์ด๋ํ์ฌ composer install์ ์คํํ ํ composer info๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค. ํ์ง๋ง composer install์ 200๋ฒ ์ด์ ์คํํ๋ ๊ฒ์ ์์ ํ ๋นํ์ค์ ์
๋๋ค.
๋ฐ๋ผ์ ์ด ์๋๋ฆฌ์ค๋ ์์ง ์ต์ ํํ์ง ๋ชปํ์ต๋๋ค. ์ง๊ธ๊น์ง ์ด์๋ฅผ ์์ฑํด ๋์์ผ๋ฉฐ, ์ธ์ ๊ฐ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ธฐ๋ฅผ ๋ฐ๋ผ๊ณ ์์ต๋๋ค.
๋ง์น๋ฉฐ
Monorepo Builder๋ฅผ ๋ฐ๊ฒฌํ ๊ฒ์ด ์ ๋ง ๊ธฐ์ฉ๋๋ค. ์ด๊ฒ ์์ด๋ Gato GraphQL์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ ์ ์์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ชจ๋ ํ๋ก์ ํธ๊ฐ ์ด๊ฒ์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. ํ์ง๋ง ์ ์ฒ๋ผ 200๊ฐ ์ด์์ ํจํค์ง๊ฐ ์๊ฑฐ๋, ์๋ง๋ 20๊ฐ ์ด์์ธ ๊ฒฝ์ฐ๋ผ๋ฉด, ๋ถ๋ช ํ ์ถ์ด ํจ์ฌ ํธํด์ง๋๋ค.
๋ชจ๋ ธ๋ ํฌ ๊ด๋ฆฌ์๋ ์ค์ ๊ณผ ์ ์ง์ ์ฝ๊ฐ์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํ์ง๋ง, ์ผ์์ ์ธ ๊ฐ๋ฐ๋ง์ผ๋ก๋ ๊ทธ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ๋ช ๋ฐฐ๋ก ๋๋ ค๋ฐ์ ์ ์์ต๋๋ค.