- Published on
GraphQL ์์ํ๊ธฐ ๐ฅ
- Authors
- Name
- Haneul
GraphQL
GraphQL ์ด๋ ?
Graph QL(์ดํ gql)์ Structed Query Language(์ดํ sql)์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฟผ๋ฆฌ ์ธ์ด์ ๋๋ค. ํ์ง๋ง gql๊ณผ sql์ ์ธ์ด์ ๊ตฌ์กฐ ์ฐจ์ด๋ ๋งค์ฐ ํฝ๋๋ค. ๋ํ gql๊ณผ sql์ด ์ค์ ์์ ์ฐ์ด๋ ๋ฐฉ์์ ์ฐจ์ด๋ ๋งค์ฐ ํฝ๋๋ค. gql๊ณผ sql์ ์ธ์ด์ ๊ตฌ์กฐ ์ฐจ์ด๊ฐ ํ์ฉ ์ธก๋ฉด์์์ ์ฐจ์ด๋ฅผ ๊ฐ์ ธ์์ต๋๋ค. ์ด ๋์ ์ ์ด์ ํ์ ์๊ธฐ๋ ๋ค๋ฅด๊ณ ๋ฐฐ๊ฒฝ๋ ๋ค๋ฆ ๋๋ค. sql์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๋ชฉ์ ์ด๊ณ , gql์ ์น ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ถํฐ ํจ์จ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๋ชฉ์ ์ ๋๋ค. sql์ ๋ฌธ์ฅ(statement)์ ์ฃผ๋ก ๋ฐฑ์ค๋ ์์คํ ์์ ์์ฑํ๊ณ ํธ์ถ ํ๋ ๋ฐ๋ฉด, gql์ ๋ฌธ์ฅ์ ์ฃผ๋ก ํด๋ผ์ด์ธํธ ์์คํ ์์ ์์ฑํ๊ณ ํธ์ถ ํฉ๋๋ค.
์ค์น
npm init
npm install graphql --save
์ฌ์ฉ
query
- ๋ฐ์ดํฐ ์กฐํ. ์ฟผ๋ฆฌ๋ฅผ ํตํ์ฌ ๋ฑ ํ์ํ ๋ฐ์ดํฐ๋ง fetching ์ ํ๊ธฐ ๋๋ฌธ์ overfetch ํน์ underfetch ๋ฅผ ํ ๊ฑฑ์ ์ ํ ํ์๊ฐ ์์ต๋๋ค.
Overfetching : ๋ถํ์ํ ๋ฐ์ดํฐ๊น์ง ๋ค ๋ฐ์์ค๋ ๊ฒ Underfetching : endpoint๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฐ์์์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ๋ ๋ฆฌ๋ ๊ฒ
query {
getOrders(input: {
status: Pending
}) {
ok
}
}
mutation
- ๋ฐ์ดํฐ ์กฐ์. ์ฟผ๋ฆฌ ํ๋๋ ๋ณ๋ ฌ๋ก ์คํ๋์ง๋ง ๋ฎคํ ์ด์ ํ๋๋ ํ๋์ฉ ์ฐจ๋ก๋๋ก ์คํ๋๋ค.
mutation {
createOrder(input: {
restaurantId: 2,
items:[
{
dishId:9
options: [
{
name: "spicy level",
choice: "little"
},
{
name: "Pickle",
}
]
}
]
}) {
ok
error
}
}
subscription
- ์ค์๊ฐ ํต์ . ๊ตฌ๋ /๋ฐํ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก WebSocket์ ํตํด ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๊ตฌ๋ ์ ํตํด ํน์ ํ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ํต์ ํ๊ฒ ๋๋ค.
subscription {
hotPotatos
}
REST API VS GraphQL
REST API๋ URL, METHOD๋ฑ์ ์กฐํฉํ๊ธฐ ๋๋ฌธ์ ๋ค์ํ Endpoint๊ฐ ์กด์ฌ ํฉ๋๋ค. ๋ฐ๋ฉด, gql์ ๋จ ํ๋์ Endpoint๊ฐ ์กด์ฌ ํฉ๋๋ค. ๋ํ, gql API์์๋ ๋ถ๋ฌ์ค๋ ๋ฐ์ดํฐ์ ์ข ๋ฅ๋ฅผ ์ฟผ๋ฆฌ ์กฐํฉ์ ํตํด์ ๊ฒฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด, REST API์์๋ ๊ฐ Endpoint๋ง๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL ์ฟผ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง๋ ๋ฐ๋ฉด, gql API๋ gql ์คํค๋ง์ ํ์ ๋ง๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL ์ฟผ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง๋๋ค.
์ฐธ๊ณ : https://tech.kakao.com/2019/08/01/graphql-basic/, ๊ณต์๋ฌธ์, ํ๋ ์ด๊ทธ๋ผ์ด๋, ํํ ๋ฆฌ์ผ์ฌ์ดํธ