Post

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: ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

โžก๏ธ๋‹จ์ 

  1. ํŒ€์› ๋ชจ๋‘ Graph QL ํ•™์Šต์ด ํ•„์š”ํ•˜๋‹ค. (์ดˆ๊ธฐ ํ•™์Šต ๊ณก์„ )
  2. ๋ฐฑ์—”๋“œ์— ์Šคํ‚ค๋งˆ์™€ ํƒ€์ž…์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  3. REST API๋ณด๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œํ•˜๋Š” ๊ฒŒ ๋ณต์žกํ•˜๋‹ค.
    • REST๋Š” URL ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ, ์บ์‹ฑ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฝ์ง€๋งŒ, GraphQL์€ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ธํ•ด ์บ์‹ฑ์ด ๋” ๋ณต์žกํ•˜๋‹ค.

๐Ÿ—‚๏ธ์ฐธ๊ณ  ์‚ฌ์ดํŠธ

  • https://ko.wikipedia.org/wiki/GraphQL
  • https://graphql.org/
  • https://www.youtube.com/watch?v=u8vD2NESjC0
This post is licensed under CC BY 4.0 by the author.