๐ REST API์ GRAPHQL ์ค ์ด๋ ๊ฒ์ด ๋ ์ข์ต๋๊น? ๐ค
2342 ๋จ์ด webdevrestapigraphqljavascript
๐์ด๋ฒ ํฌ์คํ ์์๋ ์ด๋ค๊ฒ ์ข์์ง ๋ธ๋ฆฌํ์ ๋๋ฆฌ๊ณ ์ ํฉ๋๋ค. ์ ๋ REST API๋ง ์๊ณ GRAPHQL์ ๋ชฐ๋ผ์ ์ฐธ๊ณ ์๋ฃ๋ฅผ ๋ช๊ฐ ์ฐธ๊ณ ํ์ฌ ์ด ํฌ์คํธ๋ฅผ ์์ฑํ๊ณ ์์ต๋๋ค.
๐ REST API ๋ GRAPHQL
์ด๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์์ง๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค
โ๏ธ GraphQL์ด REST๋ณด๋ค ๋ซ๋ค
๐จโ๐ป GRAPHQL๊ณผ REST์ ์ฃผ์ ์ฐจ์ด์
๐ REST API๋ ๋คํธ์ํฌ ๊ธฐ๋ฐ ์ํํธ์จ์ด์ ์ํคํ ์ฒ ๊ฐ๋ ์ ๋๋ค. ๋ฐ๋ฉด์ GraphQL์ HTTP๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋์ ์์ ์๋ํ๋ ์ฟผ๋ฆฌ ์ธ์ด, ์ฌ์ ๋ฐ ๋๊ตฌ ์งํฉ์ ๋๋ค.
๐จโ๐ป GraphQL์ด REST API๋ณด๋ค ๋์ ์
๐ REST API๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ฉด ํญ์ ์์ ํ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ ๊ฐ์ฒด์์ ์ ๋ณด๋ฅผ ์์ฒญํ๋ ค๋ฉด ๋ ๊ฐ์ REST API ์์ฒญ์ ์ํํด์ผ ํฉ๋๋ค.
์ด๊ธฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๊ณ
/users/:userID
์์ ๊ฐ์ ธ์์ผ ํ๊ณ ๋ ๋ฒ์งธ๋ก ํด๋น ์ฌ์ฉ์์ ๋ํ ๊ฒ์๋ฌผ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฏ๋ก ๋ค๋ฅธ ๋์ ์ด ์์ ์ ์์ต๋๋ค. /users/:userID/posts
.๊ทธ๋์ ๋์ ์ด REST API์ผ ๋. ๋ ๊ฐ์ HTTP GET ์์ฒญ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ค์ (์ด ์์์๋ json ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค)
/users/:userID
{
โuserโ:{
โidโ:โuser1โ,
โfirstNameโ:โrohanโ,
โlastNameโ:โdevakiโ
}
}
๊ทธ๋ฆฌ๊ณ ๋์ ์ด
userID
์ธ /users/:userID/posts
์ ๊ฒ์๋ฌผ์ ๋ํ ์์ฒญ์ด ํ๋ ๋ ์์ต๋๋ค.
{
โpostsโ: [{
โidโ :โpost1โ,
โtitleโ: โREST_vs_GRAPHQLโ,
โcontentโ:โgraphql is better than RESTโ
}]
}
๋ฐ๋ฉด์ GRAPHQL์์๋ ๋ฐ์ดํฐ ์๊ตฌ ์ฌํญ์ ํฌํจํ๋ ์ฟผ๋ฆฌ๋ฅผ GRAPHQL ์๋ฒ๋ก ๋ณด๋ด๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ฒ๋ ์๊ตฌ ์ฌํญ์ด ์ถฉ์กฑ๋๋ JSON ๊ฐ์ฒด๋ก ์๋ตํฉ๋๋ค.
Query{
User(id:โuser1โ){
Name
Posts{
Title
}
}
๐ ๋ฐ๋ผ์ ์ด๋ฅผ ํตํด GRAPHQL์ด ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ๋ฉฐ ํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ์ดํดํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด REST๋ ๊ทธ๋ค์ง ์ ์ฐํ๊ณ ๋นํจ์จ์ ์ด์ง ์์ต๋๋ค.
๐ GRAPHQL์ ์ฟผ๋ฆฌ์ ์ค์ ๋ก ํ์ํ ๋ฐ์ดํฐ๋ ๊ฐ์ ธ์ต๋๋ค. ๋ฐ๋ฉด์ REST๋ ํ์ํ์ง ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๐จโ๐ป as in the above example you can see REST fetched, all of the user and the post details, where as GRAPHQL only fetched the userโs name and the postโs title.
๊ทธ๋ฅ ์ฝ๊ธฐ๋ง ํ์ง ๋ง์๊ณ ์ง์์ ์ป์ผ์๊ณ ์ข์์์ ๊ณต์ ๋ฅผ ํ์ ์ ๋ค๋ฅธ ๋ถ๋ค๋ ์ง์์ ์ป์ผ์ธ์ ๐.
๋๊ธ ์น์ ๐์์ ๊ฐ์ ํด์ผ ํ ์ฌํญ์ ์๋ ค์ฃผ๋ ๊ฒ์ ํ์ํฉ๋๋ค.
์ฌ๊ธฐ์์ ์ ๋ฅผ ํ๋ก์ฐํ์ธ์. ๊ณง ์ ์ตํ ๊ฒ์๋ฌผ๋ก ๋์์ค๊ฒ ์ต๋๋ค ๐.
๋ด ๋ค์ ๋ธ๋ก๊ทธ๋ฅผ ์ฌ๊ธฐ์์ ํ์ธํ์ธ์: best laptops for students under 65K ๐
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ REST API์ GRAPHQL ์ค ์ด๋ ๊ฒ์ด ๋ ์ข์ต๋๊น? ๐ค), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/rohan2734/rest-api-vs-graphql-which-one-is-better-33nkํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค