๐ค GraphQL์ ์ฌ์ฉ์๋ง๋ค ๋ฌ๋ผ์ผ ํ ๊น์?
GraphQL์ ํน์ ์ถ์ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ์ธํฐํ์ด์ค์ด๋ฉฐ, GraphQL ์ฌ์์ ํด๋น ์ธํฐํ์ด์ค์ ์๊ฑด์ ์ ์ํฉ๋๋ค. ์ด๋ฌํ ์๊ฑด์ด ์ถฉ์กฑ๋๋ ํ, GraphQL์ ๊ตฌํ ๋ฐฉ์์ ๊ฐ๋ฆฌ์ง ์์ต๋๋ค. GraphQL ์๋ฒ๋ JavaScript์ Promise๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, Golang ๊ธฐ๋ฐ์ ๋์์ฑ ์ํคํ ์ฒ๋ฅผ ํ์ฉํ๊ฑฐ๋, Excel ํ์ผ์ ๋งคํํ๊ฑฐ๋, ๊ทธ ์ธ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋ ์ ์์ผ๋ฉฐ, ์ด ๋ชจ๋ ๋ฐฉ์์ด GraphQL ์ฌ์์ ์ ํจํ ๊ตฌํ์ด ๋ ์ ์์ต๋๋ค.

์๋ฒ์ ์์ง์ด ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง๋ GraphQL ์์ฒญ์ ์ฑ๊ณต์ ์ธ ์คํ์ ์์ด ์ค์ํ์ง ์์ต๋๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ํธ์์ฉ์ ํญ์ ๋์ผํ๋ฉฐ, ์ ์๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ GraphQL ์ฟผ๋ฆฌ๋ฅผ ์ ์ถํ๊ณ JSON ํ์์ผ๋ก ํด๋น ์๋ต์ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
์ฌ๊ธฐ์ ๊ตฌํ์ด ์ค์ํ์ง ์๋ค๊ณ ๋งํ ๋, ์ด๋ API ์ฌ์ฉ์์ ๊ด์ ์์ ์ด์ผ๊ธฐํ๋ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์๋ ๋จ์ํ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํ ๋ฟ์ด๋ฉฐ, ๋ฐํ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ์์ฑ๋์๋์ง์๋ ๊ด์ฌ์ด ์์ต๋๋ค.
ํ์ง๋ง API๋ฅผ ๋ด๋นํ๋ ์๋ฒ ์ฌ์ด๋ ๊ฐ๋ฐ์์๊ฒ๋ ์ํฉ์ด ๋ฌ๋ผ์ง๋๋ค. ๊ตฌํ์ ์ธ๋ถ ์ฌํญ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. GraphQL API๋ฅผ PHP๋ก ์ฝ๋ฉํ๋ค๋ฉด, PHP๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ต๋ํ ํ์ฉํ๋ฉด์ ๊ฐ๋ฅํ ํ ํจ์จ์ ์ผ๋ก API๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๊ฐ๋ฅํ ํ ์ฐ์ํ ์ํคํ ์ฒ ์ค๊ณ๋ฅผ ๊ฐ์ถ ์ ์๋๋ก ์ต์ ์ ๋คํ ๊ฒ์ ๋๋ค.

์ด๋ก ์ธํด 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์์ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ ์ ์๋๊ฐ?"

์ด๋ฌํ ์ํฉ์ ์๋ ์ ์ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด 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 ์๋ฒ๊ฐ ์ปค์คํ ๊ธฐ๋ฅ์ ํตํด ์ด ๋์์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ช ์์ ์ผ๋ก ํ์ฑํ๋์ด์ผ ํฉ๋๋ค.