Graph QL(1) - ๊ฐ๋ ์ ๋ฆฌ
๐์์ํ๋ฉฐ
Graph QL์ด๋ผ๋ฉด ์๋ง ๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ํ๋ ์ฌ๋์ด๋ผ๋ฉด ํ ๋ฒ์ฏค์ ๋ค์ด๋ดค์ ๊ฑฐ๋ค! ๋ด๊ฐ ๋ดค๋ ์ธ๊ฐ ์ฝ์ค์์๋ ์์๊ณ , ๊ฐ๋ฐ ์ ํ๋ธ ์ฑ๋์์๋ ๋ฑ์ฅํ๊ณ , ๊ฐ๋ฐ์๋ค ๋ํ๋ ์ฑ์ฉ๊ณต๊ณ ์์๋ ์์ฃผ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.๐ค
์ฌ์ค ๋๋ Graph QL์ด๋ผ๋ ์ด๋ฆ๋ง ๋ค์์ ๋ ๊ทธ๋ํ๋ฅผ ์ด์ฉํ ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ์ข ์ด์ง ์์๊น? ๋ผ๊ณ ์๊ฐํ์๋คโฆ๐
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ์คํด์๊ณ , Graph QL์ ๊ทธ๋ํ๋ฅผ ๋ง๋๋๊ฒ ์๋๋ผ๐คฃ API์ ์ฟผ๋ฆฌ์ธ์ด์ด๋ค.
์ด์จ๋ ๋ ์ค์ค๋ก ์คํด๋ ํ๊ณ (?), Graph QL์ ์ด์ฉํด ์ด๋ค ์ผ์ ํ ์ ์๋๊ฑด์ง ํธ๊ธฐ์ฌ์ด ์๊ฒจ์ ์ด์ ๋ถํฐ Graph QL์ ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ค. ๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์ ๊ฐ๋จํ๊ฒ Graph QL์ ๋ํด ๊ฐ๋ ์ ๋ฆฌ ๋ถํฐ ์์ํ๊ณ ์ ํ๋ค.
โ Graph QL
๋จผ์ Graph QL์ ์ ์ ๋ถํฐ ์ดํด๋ณด์.
Graph QL์ ํ์ด์ค๋ถ์ด 2012๋ ๊ฐ๋ฐ์ ์์ํด 2015๋ ์ ๋ฐํํ ์ฟผ๋ฆฌ ์ธ์ด๋ก, REST ๋ฐ ๋ถ์ ์น์๋น์ค ์ํคํ ์ฒ๋ฅผ ๋์ฒดํ ์ ์๋ค. ์ํค๋ฐฑ๊ณผ
๊ณต์๋ฌธ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ๋ค.
GraphQL์ API๋ฅผ ์ํ ์ฟผ๋ฆฌ ์ธ์ด์ด์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ์คํํ๊ฒฝ์ด๋ค. GraphQL์ API์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ค๋ช ํ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ ํํ ํ์ํ ๋ฐ์ดํฐ๋ง ์์ฒญํ ์ ์๋๋ก ํ๋ค. ์ด๋ฅผ ํตํด API๋ฅผ ์ ์ง์ ์ผ๋ก ๋ฐ์ ์ํค๊ธฐ ์ฌ์์ง๊ณ , ๊ฐ๋ฐ์ ๋๊ตฌ ํ์ฉ์ ๋ ๊ฐ๋ ฅํ๊ฒ ๋ง๋ ๋ค.
โ REST API์์ ์ฐจ์ด์
์์์ โRESTโ๋ฅผ ๋์ฒดํ ์ ์๋ค๊ณ ํ๋๋ฐ ๊ทธ๋ผ REST์์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น?
โก๏ธ๋ฐ์ดํฐ ์์ฒญ ๋ฐฉ์
- REST์์๋ ๊ฐ ๋ฆฌ์์ค๋ง๋ค ๊ณ ์ ํ URL์๋ ํฌ์ธํธ๊ฐ ์กด์ฌํ๋ค. ์๋ฅผ๋ค์ด, ํ์๊ณผ ์ ์๋์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ด์ค๊ณ ์ถ๋ค๋ฉด
/student
/teacher
๋ค์๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ์๋ํฌ์ธํธ๋ฅผ ์ด์ฉํด ์ ๋ณด๋ฅผ ์ป์ด์์ผ ํ๋ค. - Graph QL์ ํ๋์ ์๋ํฌ์ธํธ๋ก ์ํ๋ ์ ๋ณด๋ฅผ ์ป์ด์ฌ ์ ์๋ค.
1
2
3
4
5
6
7
8
9
10
{
student(id: 1) {
name
age
}
teacher(id: 1) {
name
subject
}
}
โก๏ธoverfetching & underfetching
REST: overfetching๊ณผ underfetching์ด ๋ฐ์ํ ์ ์๋ค.
- overfetching: ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์๋ต์ ๋ฐ๋ ๊ฒฝ์ฐ
- underfetching: ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ ์ํด ์ฌ๋ฌ ๋ฒ์ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ ๊ฒฝ์ฐ
Graph QL์ ๋ณด๋ค ํ์ํ ๋ฐ์ดํฐ์ ๋ํ ์ ํํ ์์ฒญ์ด ๊ฐ๋ฅํ๋ฏ๋ก, overfetching๊ณผ underfetching์ ๋ฐฉ์งํ ์ ์๋ค.
โ Graph QL์ ์ฅ์ ๊ณผ ๋จ์
โก๏ธ์ฅ์
์ฅ์ ์ ์์์ ์ค๋ช ํ Graph QL์ ํน์ง๊ณผ ์ฐ๊ฒฐ๋๋ค.
1. ๋ณ๋ ฌ ๊ฐ๋ฐ ๊ฐ๋ฅ
- ๋ฐฑ์๋๊ฐ ์์ ํ ๊ตฌํ๋๊ธฐ ์ ์๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐ์ ์งํํ ์ ์์ด ๊ฐ๋ฐ ์๋๋ฅผ ํฅ์ํ ์ ์๋ค.
2. Overfetching๊ณผ Underfetching ๋ฐฉ์ง
- Overfetching: ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ค.
- Underfetching: ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ ์ํด ์ฌ๋ฌ ๋ฒ์ ์์ฒญ์ ๋ณด๋ด์ง ์์๋ ๋๋ค.
โก๏ธ๋จ์
- ํ์ ๋ชจ๋ Graph QL ํ์ต์ด ํ์ํ๋ค. (์ด๊ธฐ ํ์ต ๊ณก์ )
- ๋ฐฑ์๋์ ์คํค๋ง์ ํ์ ์ ์ง์ ํด์ค์ผ ํ๋ค.
- REST API๋ณด๋ค ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๋ ๊ฒ ๋ณต์กํ๋ค.
- REST๋ URL ๊ธฐ๋ฐ์ด๋ฏ๋ก, ์บ์ฑ์ด ์๋์ ์ผ๋ก ์ฝ์ง๋ง, GraphQL์ ๋ณต์กํ ์ฟผ๋ฆฌ ๊ตฌ์กฐ๋ก ์ธํด ์บ์ฑ์ด ๋ ๋ณต์กํ๋ค.
๐๏ธ์ฐธ๊ณ ์ฌ์ดํธ
- https://ko.wikipedia.org/wiki/GraphQL
- https://graphql.org/
- https://www.youtube.com/watch?v=u8vD2NESjC0