โ๏ธ GraphQL์ด๋?
Graph + Query Language์ ์ค์๋ง์ด๋ค. (API๋ฅผ ์ํ ์ฟผ๋ฆฌ ์ธ์ด)
GraphQL์ Facebook์์ ์ฒ์์ผ๋ก ๊ฐ๋ฐํ๊ณ , ์คํ ์์ค๋ก ์ ๊ณต๋ ์ฟผ๋ฆฌ ์ธ์ด์ด๋ค. ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ธฐ ์ํด ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ์ฟผ๋ฆฌ ์ธ์ด์ด๋ค.
โ๏ธ GraphQL์ ํน์ง
- HTTP๋ฅผ ํตํด API ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ๋๋ค.
- ์๋ต์ ๋ฐ์ ๋ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๋ฅผ JSON ํ์์ผ๋ก ๋ฐ๋๋ค.
- GraphQL์ ์๋ฒ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๊ฐ ํ๋์ ๋์ํ๋ resolver ํจ์๋ก ๊ฐ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค.
- GraphQL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กฐํ ๋์ schema๊ฐ ์ ํจํ์ง ๊ฒ์ฌํ๋ค.
โ๏ธ ๊ทธ๋ํ์์ ํธ๋ฆฌ ์ถ์ถํ๋ ๋ฐฉ๋ฒ
query {
์ฑ
(ISBN์ด "9780674430006") {
์ฑ
์ด๋ฆ
์ ์ {
์ด๋ฆ
}
}
}
๐ ๊ฒฐ๊ณผ๐
{
์ฑ
: {
์ฑ
์ด๋ฆ : "GraphQL์ ์ด๋ ต์ง ์๋ค",
์ ์ : [
{ ์ด๋ฆ : "๊น์ฝ๋ฉ"},
{ ์ด๋ฆ : "๋ฐํด์ปค"},
]
}
}
โ๏ธ GraphQL vs REST API
REST API๋ ์๋๋ฐ ์ GraphQL์ด ๋์จ๊ฑธ๊น??
=> REST API์ ํ๊ณ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด์ง!
1. overfetch = ํ์์๋ ๋ฐ์ดํฐ๊น์ง ์ ๊ณตํจ
2. underfetch = ์๋ํฌ์ธํธ๊ฐ ํ์ํ ์ ๋ณด๋ฅผ ์ถฉ๋ถํ ์ ๊ณตํ์ง ๋ชปํจ. / ํ๋ฒ์ fetch ํด์ค์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ์๋ํฌ์ธํธ์ ์์ฒญ์ ๋ณด๋ด์ผํจ.
3. ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์ ์๋ํฌ์ธํธ ๋ณ๊ฒฝ ๋๋ ๋ฐ์ดํฐ ์์ ์ด ํ์ํจ.
REST API |
GraphQL |
Resource์ ํฌ๊ธฐ์ ํํ๋ฅผ ์๋ฒ์์ ๊ฒฐ์ | Resource์ ๋ํ ์ ๋ณด๋ง ์ ์ํ๊ณ , ํ์ํ ํฌ๊ธฐ์ ํํ๋ ํด๋ผ์ด์ธํธ ๋จ์์ ์์ฒญ ์ ๊ฒฐ์ |
URI๊ฐ Resource๋ฅผ ๋ํ๋ด๊ณ Method๊ฐ ์์ ์ ์ ํ์ ๋ํ๋ธ๋ค. |
GraphQL Schema๊ฐ Resource๋ฅผ ๋ํ๋ด๊ณ Query, Mutation ํ์ ์ด ์์ ์ ์ ํ์ ๋ํ๋ธ๋ค. |
์ฌ๋ฌ Resource์ ์ ๊ทผํ๊ณ ์ ํ ๋ ์ฌ๋ฌ ๋ฒ์ ์์ฒญ์ด ํ์ | ํ๋ฒ์ ์์ฒญ์์ ์ฌ๋ฌ Resource์ ์ ๊ทผ ๊ฐ๋ฅ |
์์ฒญ์ ํด๋น ์๋ํฌ์ธํธ์ ์ ์๋ ํธ๋ค๋ง ํจ์๋ฅผ ํธ์ถํ์ฌ ์์ ์ ์ฒ๋ฆฌ | ์์ฒญ ๋ฐ์ ๊ฐ ํ๋์ ๋ํ resolver๋ฅผ ํธ์ถํ์ฌ ์์ ์ ์ฒ๋ฆฌ |
โ๏ธ GraphQL์ ์ฅ์
1. ํ๋์ ์๋ํฌ์ธํธ endpoint ์์ฒญ
- /graphql์ด๋ผ๋ ํ๋์ endpoint ๋ก ์์ฒญ์ ๋ฐ๊ณ ๊ทธ ์์ฒญ์ ๋ฐ๋ผ query , mutation์ resolver ํจ์๋ก ์ ๋ฌํด์ ์์ฒญ์ ์๋ตํ๋ค. ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํจ.
2. overfetch, underfetch ์์
- ํ๋์ ์๋ํฌ์ธํธ์์ ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํด์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๊ฒ API์ ์์ฒญํ๊ณ ์๋ต๋ฐ์ ์ ์๋ค.
3. playground GUI ์ฌ์ฉํด์ resolver, schema ํ ์คํธ ๊ฐ๋ฅ (POSTMAN๊ณผ ๋น์ท)
4. ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ ๋ณ๊ฒฝ์๋ ์ง์ฅ์ด ์์
- ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์๋ต๋ฐ๋ ์ฃผ์ฒด๊ฐ ํด๋ผ์ด์ธํธ์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ์ง์ฅ์ด ์๋ค. ํด๋ผ์ด์ธํธ์์๋ ๋ฌด์จ ๋ฐ์ดํฐ๊ฐ ํ์ํ์ง๋ง ์ฟผ๋ฆฌ๋ก ์์ฑํ๋ฉด ๋!
โ๏ธ GraphQL์ ๋จ์
1. ์บ์ฑ์ด REST๋ณด๋ค ํจ์ฌ ๋ณต์กํ๋ค.
=> REST์ ๊ฒฝ์ฐ, HTTP์์๋ ๊ฐ ๋ฉ์๋์ ๋ฐ๋ผ ์บ์ฑ์ด ๊ตฌํ๋์ด ์์ง๋ง, GraphQL์์๋ POST ๋ฉ์๋๋ง์ ์ด์ฉํด์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ๊ฐ ๋ฉ์๋์ ๋ฐ๋ฅธ ์บ์ฑ์ ์ง์๋ฐ์ ์ ์๋ค.
=> ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๋์จ ๊ฒ์ด Apollo ์์ง์ ์บ์ฑ & ์์ ์ฟผ๋ฆฌ
2. ๊ณ ์ ๋ ์์ฒญ๊ณผ ์๋ต๋ง ํ์ํ ๊ฒฝ์ฐ์๋ ์ฟผ๋ฆฌ๋ก ์ธํด ์์ฒญ์ ํฌ๊ธฐ๊ฐ RESTfull API ๋ณด๋ค ๋ ์ปค์ง๋ค. =>์ถ๊ฐ๊ณต๋ถ ํ์
๐ ์๋ชป๋ ๊ฐ๋ ์ ๋ฌ์ด ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค. ์ ์ ์ฑ์ฅ์ ํฐ ๋์์ด ๋ฉ๋๋ค๐ค
'๐ฌComputer Science > ๋คํธ์ํฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
AWS๋ฅผ ์ด์ฉํ ์๋ฒ ๋ฐฐํฌ ์๋ํ ํ์ดํ๋ผ์ธ ๊ตฌ์ถํ๊ธฐ, EC2 ๊ธฐ๋ณธ ์ธํ ๋ถํฐ, AWS๋ก ์๋ฒ ๋ฐฐํฌ (0) | 2022.08.09 |
---|---|
GraphQL ๊ตฌ์กฐ (0) | 2022.08.02 |
์น ์บ์๋, ์บ์์ ์ฅ์ , ์บ์๊ฐ ์ฌ์ฉ๋๋ ๊ณณ (0) | 2022.08.01 |
๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ (0) | 2022.08.01 |
์ปดํจํฐ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ, ์ค์์ฒ๋ฆฌ์ฅ์น CPU์ ๊ตฌ์ฑ (0) | 2022.08.01 |