GraphQL vs REST API

๊น€๋‚จ๊ฒฝยท2023๋…„ 1์›” 30์ผ
0

network

๋ชฉ๋ก ๋ณด๊ธฐ
23/27

REST API์˜ ํ•œ๊ณ„

๐Ÿ’ก ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ œ๊ณตํ•จ(Overfetch)
-endpoint ๊ฐ€ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถฉ๋ถ„ํžˆ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•จ
๐Ÿ’ก ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ ์—”๋“œํฌ์ธํŠธ ๋ณ€๊ฒฝ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜์ •์ด ํ•„์š”
-EST API์—์„œ๋Š” ์ž์›์˜ ํฌ๊ธฐ์™€ ํ˜•ํƒœ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ

GraphQL ์žฅ์ 

๐Ÿ“— ํ•˜๋‚˜์˜ endpoint ์š”์ฒญ
-/graphql์ด๋ผ๋Š” ํ•˜๋‚˜์˜ endpoint ๋กœ ์š”์ฒญ์„ ๋ฐ›๊ณ  ๊ทธ ์š”์ฒญ์— ๋”ฐ๋ผ query , mutation์„ resolver ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•ด์„œ ์š”์ฒญ์— ์‘๋‹ต
-๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์€ POST ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉ
-under & overfetching ์šฐ๋ ค ์—†์Œ

๐Ÿ“— ๊ฐ•๋ ฅํ•œ playground
playground๋ผ๋Š” GUI๋ฅผ ์ด์šฉํ•ด resolver ์™€ schema ๋ฅผ ํ•œ ๋ˆˆ์— ๋ณด๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

๐Ÿ“— ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์—๋„ ์ง€์žฅ์ด ์—†์Œ
ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ๋ฐ›๋Š” ์ฃผ์ฒด๊ฐ€ ํด๋ผ์ด์–ธํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์— ์ง€์žฅ์ด ์—†์Œ
ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ๋ฌด์Šจ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฟผ๋ฆฌ๋กœ ์ž‘์„ฑ

GraphQL ๋‹จ์ 

๐Ÿ“— ํ•™์Šต ์‹œ๊ฐ„ ํ•„์š”
REST API๊ฐ€ ์ต์ˆ™ํ•˜๋‹ค๋ฉด GraphQL๋ฅผ ํ•™์Šตํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„ ํ•„์š”

๐Ÿ“— ์บ์‹ฑ์ด REST๋ณด๋‹ค ํ›จ์”ฌ ๋ณต์žกํ•จ
HTTP์—์„  ๊ฐ ๋ฉ”์†Œ๋“œ์— ๋”ฐ๋ผ ์บ์‹ฑ์ด ๊ตฌํ˜„,
GraphQL์—์„  POST ๋ฉ”์†Œ๋“œ๋งŒ์„ ์ด์šฉํ•ด ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์—
๊ฐ ๋ฉ”์†Œ๋“œ์— ๋”ฐ๋ฅธ ์บ์‹ฑ ์ง€์› ๋ถˆ๊ฐ€
๐Ÿ”… Apollo ์—”์ง„์˜ ์บ์‹ฑ๊ณผ ์˜์† ์ฟผ๋ฆฌ ๋“ฑ์œผ๋กœ ๋ณด์™„

๐Ÿ“— ๊ณ ์ •๋œ ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ๊ฒฝ์šฐ ๋ถˆํ•„์š”
๊ณ ์ •๋œ ์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ํ•„์š”ํ•  ๊ฒฝ์šฐ์—๋Š” Query ๋กœ ์ธํ•ด ์š”์ฒญ์˜ ํฌ๊ธฐ๊ฐ€ RESTful API ๋ณด๋‹ค ํผ

REST API์™€ GraphQL

๐Ÿ“— Resource ์ •์˜์™€ ๋ฐ์ดํ„ฐ ์š”์ฒญ
REST API Resource์— ๋Œ€ํ•œ ํ˜•ํƒœ ์ •์˜์™€ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋ฐฉ๋ฒ•์ด ์—ฐ๊ฒฐ
GraphQL Resource์— ๋Œ€ํ•œ ํ˜•ํƒœ ์ •์˜์™€ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ์™„์ „ํžˆ ๋ถ„๋ฆฌ

๐Ÿ“— Resource์— ๋Œ€ํ•œ ๊ฒฐ์ •
REST API Resource์˜ ํฌ๊ธฐ์™€ ํ˜•ํƒœ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฒฐ์ •
GraphQL Resource์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ์ •์˜, ํ•„์š”ํ•œ ํฌ๊ธฐ์™€ ํ˜•ํƒœ๋Š” ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ ์š”์ฒญ ์‹œ ๊ฒฐ์ •

๐Ÿ“— Resource์™€ ์ž‘์—… ์œ ํ˜•
REST API URI๊ฐ€ Resource๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  Method๊ฐ€ ์ž‘์—…์˜ ์œ ํ˜•
GraphQL GraphQL Schema๊ฐ€ Resource๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  Query, Mutation ํƒ€์ž…์ด ์ž‘์—…์˜ ์œ ํ˜•

๐Ÿ“— Resource์™€ ์š”์ฒญ ๋นˆ๋„
REST API ์—ฌ๋Ÿฌ Resource์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•  ๋•Œ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์š”์ฒญ์ด ํ•„์š”
GraphQL ํ•œ๋ฒˆ์˜ ์š”์ฒญ์—์„œ ์—ฌ๋Ÿฌ Resource์— ์ ‘๊ทผ ๊ฐ€๋Šฅ

๐Ÿ“— ์ž‘์—… ์ฒ˜๋ฆฌ
REST API ๊ฐ ์š”์ฒญ์€ ํ•ด๋‹น ์—”๋“œํฌ์ธํŠธ์— ์ •์˜๋œ ํ•ธ๋“ค๋ง ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌ
GraphQL ์š”์ฒญ ๋ฐ›์€ ๊ฐ ํ•„๋“œ์— ๋Œ€ํ•œ resolver๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌ

profile
๊ธฐ๋ณธ์— ์ถฉ์‹คํ•˜๋ฉฐ ์•ž์œผ๋กœ ๋ฐœ์ „ํ•˜๋Š”

0๊ฐœ์˜ ๋Œ“๊ธ€