๐ ๊ทธ๋ํQL์ React๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์์ํ ๋ ํ๋ฒ ๋ค์๋ ๋ด์ฉ์ด๊ณ , ์ฐพ์๋ดค๋ ๋ด์ฉ์ด๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ์ ์๋ ์ํ์์ ์งํ์ด ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ ๋ํ ํ์ด์ค๋ถ์์ ๋ง๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ React๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํ ๋ฒ์ฏค์ ํ์ตํด์ผ ํ๋ ๋ด์ฉ์ด๋ค. ๊ฐ์ ํ์ฌ์์ ๋ง๋ค์ด์ง ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ์ฌ์ฉํ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ ๊ฐ๋ค!!!! ๋น ์!!
๐ ์ค๋ ํ์ตํ ๋ด์ฉ
GraphQL (Graph + Query Language)
- ํ์ด์ค๋ถ์์ ๋ง๋ ์คํ ์์ค๋ก ์ ๊ณต๋๊ณ ์์ผ๋ฉฐ, Server API๋ฅผ ํตํด ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ์ธ์ด์ด๋ค. (2016๋ ๋ฑ์ฅ)
- ์ธ์ง๋ ๋ฐ ๋ง์กฑ ๋ถ๋ถ์์ ๋์ ๋น์จ์ ์ฐจ์งํ๊ณ ์๋ ์ธ์ด์ด๋ฉฐ, GraphQL ๊ด๋ จ ๊ธฐ์ ์ด ๊ณ์ํด์ ์์๊ถ์ ์ฐจ์งํ๊ณ ์๋ค.
- ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ์ธ์๋ฅ ์ด ๊ต์ฅํ ๋์ ์ธ์ด์ด๋ฉฐ, ๋ฐฐ์ฐ๊ณ ์ถ์ ๋น์จ๊ณผ ๋ค์ ์ฌ์ฉํ๊ฒ ๋ค๋ ๋น์จ์ด ๊ต์ฅํ ๋์ ์ฟผ๋ฆฌ ์ธ์ด์ด๋ค.
GraphQL์ ์ฌ์ฉํ๋ ์ด์
- ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๋ผ ์ ์ฐํ๊ฒ ํธ๋ฆฌ ๊ตฌ์กฐ์ JSON ๋ฐ์ดํฐ๋ฅผ ์๋ต์ผ๋ก ์ ์กํ ์ ์๋ค.
- REST API ๋ฐฉ์์ ๊ณ ์ ๋ ์์์ด ์๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๋ผ ์ ์ฐํ๊ฒ ์์์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
GraphQL์ ํน์ง
- HTTP๋ฅผ ํตํด API ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ๋๋ค.
- ์๋ต์ ๋ฐ์ ์, ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๋ฅผ JSON ํ์์ผ๋ก ๋ฐ๋๋ค.
- ์๋ฒ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๊ฐ ํ๋์ ๋์ํ๋ resolver ํจ์๋ก ๊ฐ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค.
- GraphQL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กฐํ ๋์ schema๊ฐ ์ ํจํ์ง ๊ฒ์ฌํ๋ค.
REST API์ ํ๊ณ
- Overfetch: ํ์ ์๋ ๋ฐ์ดํฐ๊น์ง ์ ๊ณตํ๋ค.
- Underfetch: endpoint๊ฐ ํ์ํ ์ ๋ณด๋ฅผ ์ถฉ๋ถํ ์ ๊ณตํ์ง ๋ชปํ๋ค.
- ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์ ์๋ํฌ์ธํธ ๋ณ๊ฒฝ ๋๋ ๋ฐ์ดํฐ ์์ ์ด ํ์ํ๋ค.
REST API์ GraphQL์ ๋ค๋ฅธ์
- REST API๋ Resource์ ๋ํ ํํ ์ ์์ ๋ฐ์ดํฐ ์์ฒญ ๋ฐฉ๋ฒ์ด ์ฐ๊ฒฐ๋์ด ์์ง๋ง, GraphQL์์๋ Resource์ ๋ํ ํํ ์ ์์ ๋ฐ์ดํฐ ์์ฒญ์ด ์์ ํ ๋ถ๋ฆฌ๋์ด ์๋ค.
- REST API ๋ Resource์ ํฌ๊ธฐ์ ํํ๋ฅผ ์๋ฒ์์ ๊ฒฐ์ ํ์ง๋ง GraphQL์์๋ Resource์ ๋ํ ์ ๋ณด๋ง ์ ์ํ๊ณ , ํ์ํ ํฌ๊ธฐ์ ํํ๋ ํด๋ผ์ด์ธํธ ๋จ์์ ์์ฒญ ์ ๊ฒฐ์ ํ๋ค.
- REST API๋ URI๊ฐ Resource๋ฅผ ๋ํ๋ด๊ณ Method๊ฐ ์์ ์ ์ ํ์ ๋ํ๋ด์ง๋ง, GraphQL์์๋ GraphQL Schema๊ฐ Resource๋ฅผ ๋ํ๋ด๊ณ Query, Mutation ํ์ ์ด ์์ ์ ์ ํ์ ๋ํ๋ธ๋ค.
- REST API๋ ์ฌ๋ฌ Resource์ ์ ๊ทผํ๊ณ ์ ํ ๋ ์ฌ๋ฌ ๋ฒ์ ์์ฒญ์ด ํ์ํ์ง๋ง, GraphQL์์๋ ํ๋ฒ์ ์์ฒญ์์ ์ฌ๋ฌ Resource์ ์ ๊ทผํ ์ ์๋ค.
- REST API์์ ๊ฐ ์์ฒญ์ ํด๋น ์๋ํฌ์ธํธ์ ์ ์๋ ํธ๋ค๋ง ํจ์๋ฅผ ํธ์ถํ์ฌ ์์ ์ ์ฒ๋ฆฌํ์ง๋ง, GraphQL์์๋ ์์ฒญ ๋ฐ์ ๊ฐ ํ๋์ ๋ํ resolver๋ฅผ ํธ์ถํ์ฌ ์์ ์ ์ฒ๋ฆฌํ๋ค.
GraphQL์ ์ฅ์
- ํ๋์ endpoint ์์ฒญ
- No! under & overfetching
- ๊ฐ๋ ฅํ playground
- ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ ๋ณ๊ฒฝ์๋ ์ง์ฅ์ด ์๋ค.
GraphQL์ ๋จ์
- REST API์ ์น์ํ ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ GraphQL๋ฅผ ํ์ตํ๋ ๋ฐ ์๊ฐ์ด ํ์ํ๋ค.
- ์บ์ฑ์ด REST๋ณด๋ค ํจ์ฌ ๋ณต์กํ๋ค.
- ๊ณ ์ ๋ ์์ฒญ๊ณผ ์๋ต๋ง ํ์ํ ๊ฒฝ์ฐ์๋ Query๋ก ์ธํด ์์ฒญ์ ํฌ๊ธฐ๊ฐ RESTful API์ ๊ฒฝ์ฐ๋ณด๋ค ๋ ์ปค์ง๋ค.
GraphQL ๊ตฌ์กฐ
- GraphQL Keywords
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ฒฝ์ฐ, REST API์์ GET ์์ฒญ์ด ์์๋ค๋ฉด GraphQL์์๋ Query๋ฅผ ์ด์ฉํด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ ํ ์์๋ค.
- Create, Delete์ ๊ฐ์ด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ Mutaion์ ์ด์ฉํด ์ด๋ฅผ ์ํํ ์ ์๋ค.
- Query: ์ ์ฅ๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ(REST์ GET๊ณผ ๋น์ทํ๋ค)
- Mutation: ์ ์ฅ๋ ๋ฐ์ดํฐ ์์ ํ๊ธฐ
- Create: ์๋ก์ด ๋ฐ์ดํฐ ์์ฑ
- Update: ๊ธฐ์กด์ ๋ฐ์ดํฐ ์์
- Delete: ๊ธฐ์กด์ ๋ฐ์ดํฐ ์ญ์
- Suscription: ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ ์ ์๋ฒ๊ฐ ๋์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก
Query(๋ฐ์ดํฐ ์กฐํ)
- ์ ๋ฌ์ธ์(Arguments)
- ํ๋์ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๋ถ๋ถ์ ์ถ๊ฐํ์ฌ ์ฟผ๋ฆฌ์ ํ๋ ๋ฐ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ค์ ์ ๋ฌํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ง ๋ฐ์์ฌ ์ ์๋ค.
- ๋ณ๋ช
(Aliases)
- ํ๋ ์ด๋ฆ์ ์ค๋ณตํด์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ํ๋ ์ด๋ฆ์ ์ค๋ณต์ผ๋ก ์ฌ์ฉํด์ ์ฟผ๋ฆฌ๋ฅผ ํด์ผ ํ ๋๋ ๋ณ๋ช ์ ๋ถ์ฌ์ ์ฟผ๋ฆฌ๋ฅผ ํ๋ค.
- ์คํผ๋ ์ด์
๋ค์(Operation name)
- ์ฟผ๋ฆฌ์ ์ฟผ๋ฆฌ ๋ค์์ ๋ชจ๋ ์๋ตํ๋ ์ถ์ฝํ ๊ตฌ๋ฌธ ๋์ ์ฝ๋๋ฅผ ๋ชจํธํ์ง ์๊ฒ ์์ฑํ๋ ๊ฒ์ด๋ค.
- ๋ณ์(Variables)
- ๋์ ์ผ๋ก ์ธ์๋ฅผ ๋ฐ์ ์ฟผ๋ฆฌํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
Mutation(๋ฐ์ดํฐ ์์ )
- ์๋ฒ์ธก ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ์ฌ์ฉํ๋ค.
Schema/Type
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ ์์๋ ์๋น์ค์์ ๊ฐ์ ธ์ฌ ์ ์๋ ๊ฐ์ฒด์ ์ข ๋ฅ, ๊ทธ๋ฆฌ๊ณ ํฌํจํ๋ ํ๋๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์ ํ์ด๋ค.
Resolver
- ์์ฒญ์ ๋ํ ์๋ต์ ๊ฒฐ์ ํด์ฃผ๋ ํจ์, Query, Mutation, Subscription๊ณผ ๊ฐ์ ํ์ ์ ์ค์ ์ผํ๋ ๋ก์ง์ ์์ฑํ๋ค.
๐ ์ถ๊ฐ๋ก ๊ณต๋ถํ ๋ด์ฉ
[udemy] React ์๋ฒฝ ๊ฐ์ด๋ ๊ฐ์ ๋ณด๊ธฐ (๋งค์ผ ์กฐ๊ธ์ฉ ์ด๋ผ๋ ๊พธ์คํ ๋ฃ๊ธฐ)
Study์๊ณผ ํจ๊ป ์งํ์ค์ธ ํ๋ก์ ํธ ๊ตฌํ
๐ ์ค์ํ ๋ด์ฉ
- GraphQL์ด๋?
- GraphQL์ ํน์ง
- GraphQL ์ฌ์ฉ๋ฒ
'Daily > Today I Learned' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
22.08.04_TIL (0) | 2022.08.04 |
---|---|
22.08.03_TIL (0) | 2022.08.03 |
22.08.01_TIL (0) | 2022.08.01 |
22.07.28_TIL (0) | 2022.07.28 |
22.07.27_TIL (0) | 2022.07.27 |