Graphql.md
GraphQL์ Graph Query Language๋ก, ํ์ด์ค๋ถ์์ ๋ง๋ ์ฟผ๋ฆฌ ์ธ์ด์ ๋๋ค.
๐ GraphQL์ด๋?
GraphQL์ sql๊ณผ ๊ฐ์ด ์ฟผ๋ฆฌ ์ธ์ด์ ๋๋ค. ํ์ง๋ง ๋์ ํ์ฉ ๋ชฉ์ ์์ ํฐ ์ฐจ์ด์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
SQl๊ณผ GraphQL์ ๋ชฉ์
SQL
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ
GraphQL
Web Client๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก๋ถํฐ ํจ์จ์ ์ผ๋ก ๊ฐ์ ธ์ค๋๊ฒ
๊ธฐ์กด์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ๋ฐฉ์์ผ๋ก๋, sql์ ๋ฌธ์ฅ์ ์ฃผ๋ก ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฑํ๊ณ ํธ์ถํฉ๋๋ค. ํ์ง๋ง GraphQL์ ๋ฌธ์ฅ์ ์ฃผ๋ก ํด๋ผ์ด์ธํธ ์์คํ ์์ ์์ฑํ๊ณ ํธ์ถํฉ๋๋ค.
Sql Query ์์
GraphQL Query ์์
โ
GraphQL์ ํน์ง
1๏ธโฃ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋ซํผ์ ์ข
์์ ์ด์ง ์๋ค.
HTTP API๊ฐ ํน์ ํ๋ซํผ์ ์ข ์์ ์ด์ง ์์ ๊ฒ์ฒ๋ผ GraphQL๋ ํน์ ํ๋ซํผ์ ์ข ์์ ์ด์ง ์์ต๋๋ค.
์ฌ์ง์ด ๋คํธ์ํฌ ๋ฐฉ์์๋ ์ข ์์ ์ด์ง ์์ต๋๋ค.
GraphQL์ ์ฃผ๋ก ๋คํธ์ํฌ ๋ ์ด์ด L7์ HTTP POST๋ฉ์๋์ ์น์์ผ ํ๋กํ ์ฝ์ ํ์ฉํฉ๋๋ค. ํ์ง๋ง ํ์์ ๋ฐ๋ผ TCP/UDP, ์ด๋๋ทํ๋ ์์ ํ์ฉ ํ ์๋ ์์ต๋๋ค.
GraphQL Pipeline
GraphQL Query๊ฐ ๋ค์ด์ค๊ฒ ๋๋ฉด Parse, Validate์ ๊ฐ์ ์ฒ๋ฆฌ๊ณผ์ ์ ๊ฑฐ์นํ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ตฌํํ GraphQL Resolver๋ฅผ ํตํด DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ด๊ฒ์ JSON ํํ๋ก ๋ฐํํฉ๋๋ค.
2๏ธโฃ REST API์ ๋ฌธ์ ์ ํด๊ฒฐ
GraphQL์ ๋ง๋ Facebook์ ๋ธ๋ก๊ทธ์์๋
RESTful API๋ก๋ ๋ค์ํ ๊ธฐ์ข ์์ ํ์ํ ์ ๋ณด๋ค์ ์ผ์ผํ ๊ตฌํํ๋ ๊ฒ์ด ํ๋ค๋ค.
๋ผ๊ณ ๋งํฉ๋๋ค. ๋ฐ๋ผ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ์ธก์์ ์ํ๋ ๋๋ก ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ณ , ๋ณด๋ค ํธํ๊ฒ ์ ๋ณด๋ฅผ ์์ ํ ์ ์๋๋ก ํ๋ ํ์คํ๋ ์ฟผ๋ฆฌ ์ธ์ด๊ฐ ๋ฐ๋ก GraphQL์ ๋๋ค.
โ
GraphQL์ ๊ตฌ์กฐ
Query/Mutation
GraphQL์ ์์ฒญํ๋ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์๋ต ๋ด์ฉ์ ๊ตฌ์กฐ๋ ๊ฑฐ์ ์ผ์นํฉ๋๋ค.
request Query
response
์คํค๋ง/ํ์
(schema/type)
์ค๋ธ์ ํธ ํ์ ๊ณผ ํ๋
์ค๋ธ์ ํธ ํ์ : Character
ํ๋: name, appearsIn
์ค์นผ๋ผ ํ์ : String, ID, Int ๋ฑ
๋๋ํ(!): ํ์ ๊ฐ์ ์๋ฏธ(non-nullable)
๋๊ดํธ([,]): ๋ฐฐ์ด์ ์๋ฏธ
๋ฆฌ์กธ๋ฒ(resolver)
GraphQL ์ฟผ๋ฆฌ๋ฌธ ํ์ฑ์ ๋๋ถ๋ถ์ GrahpQL๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฒ๋ฆฌํ์ง๋ง, GraphQL์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ตฌ์ฒด์ ์ธ ๊ณผ์ ์ resolver์์ ๋ด๋นํ๊ณ ์ด๋ฅผ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌํํด์ผํฉ๋๋ค.
QraphQL์ฟผ๋ฆฌ์์๋ ๊ฐ๊ฐ์ ํ๋๋ง๋ค ํจ์๊ฐ ํ๋์ฉ ์กด์ฌ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฌํ ๊ฐ๊ฐ์ ํจ์๋ฅผ ๋ฆฌ์กธ๋ฒ(resolver)๋ผ๊ณ ํฉ๋๋ค. ๋ฆฌ์กธ๋ฒ๋ ๋ค์ ํ์ ์ ๋ฐํํฉ๋๋ค.
๋ง์ฝ ํ๋๊ฐ ์ค์นผ๋ผ ๊ฐ์ด๋ผ๋ฉด ์คํ์ด ์ข ๋ฃ๋์ง๋ง, ํ๋์ ํ์ ์ด ์ค์นผ๋ผ ํ์ ์ด ์๋ ์ฐ๋ฆฌ๊ฐ ์ ์ํ ํ์ ์ด๋ผ๋ฉด ํด๋น ํ์ ์ ๋ฆฌ์กธ๋ฒ๋ฅผ ํธ์ถํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฆฌ์กธ๋ฒ์ ํธ์ถ์ DFS๋ก ๊ตฌํ๋์์๊ฑฐ๋ผ ์ถ์ธก๋ฉ๋๋ค. ์ด๊ฒ์์ Graph๋ผ๋ ๋จ์ด๋ฅผ ์ด ์ด์ ๊ฐ ์์ ๊ฒ์ด๋ผ ์๊ฐํฉ๋๋ค.
์ฐ์ ๋ฆฌ์กธ๋ฒ ํธ์ถ์ DBMS๊ฐ์ ๊ด๊ณ์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ๋งค์ฐ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ ํ ์ ์์ต๋๋ค.
์ธํธ๋ก์คํ์
(introspection)
Apollo Server ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฉ ์น IDEํ๋ฉด
๊ธฐ์กด ์๋ฒ-ํด๋ผ์ด์ธํธ ํ์ ๋ฐฉ์์์๋ API ๋ช ์ธ์๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ ์ฐจ๊ฐ ๋ฐ๋์ ํ์ํฉ๋๋ค.
GraphQL์์๋ RSETAPI ๋ช ์ธ์ ๊ณต์ ์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ๋ฐ๋ก ์ธํธ๋ก์คํ์ ๊ธฐ๋ฅ์ ๋๋ค.
GraphQL์ ์ธํธ๋ก์คํ์ ์ ์๋ฒ ์์ฒด์ ํ์ฌ ์๋ฒ์ ์ ์๋ ์คํค๋ง์ ์ค์๊ฐ ์ ๋ณด๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
GraphQL ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ ๋ฆฌ
GrahpQL์ ๊ธฐ์กด REST API์ ๋จ์ ์ ๋ณด์ํ๋ ์ฑ๋ฅ์ ์ธ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ํ RESTAPI์์๋ Swagger์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ API ๋ช ์ธ์๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ์ต์ ์ด์์ง๋ง GraphQL์์๋ ์ด๋ฅผ ์ธํธ๋ก์คํ์ ์ผ๋ก ๋์ฒดํ์ฌ ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ํ์ ์ด ๋ ์ฌ์์ง ๊ฒ์ผ๋ก ์๊ฐ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋น๊ต์ ํ๋ก ํธ์๋์ชฝ์ ํ ์ผ์ด ๋ง์์ง๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Last updated