안녕하세요 오늘은 graphQL에 대해서 알아보겠습니다
api요청을 할떄 내가 필요한 데이터가 있는데 그 데이터를 얻을려고 불필요한 데이터까지 가져오거나 어떤 데이터를 가져오기위해 의존하는 api를 여러번 호출하신적이 있나여?
{
"kind": "youtube#videoListResponse",
"etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"",
"videos": [
{
"id": "7lCDEYXw3mM",
"kind": "youtube#video",
"etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"",
"snippet": {
"publishedAt": "2012-06-20T22:45:24.000Z",
"channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"title": "Google I/O 101: Q&A On Using Google APIs",
"description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg"
},
}
]
}
만약 이러한 api가 있는데 id라는 데이터가 필요하다면 어떻게될까여 어쩔수없이 이 api를 호출해서 id를 가져온후 나머지 데이터를 버려야합니다.
또한 어떤 데이터가 id라는 값을 의존하게 된다면 이 api를 호출한후 다시 fetching을 해서 데이터를 얻어와야합니다.
원하는 데이터를 가져오기위해 더 많은 데이터를 가져오는 overfetching 내가 원하는 데이터를 가져오기위해 api를 여러번 호출하는걸 underfetching이라고 부릅니다.
이 두가지 문제점 overfetching
, underfetching
이 rest api의 단점입니다.
이러한 단점을 보안해서 나온게 graphQL
이며
GraphQL은 페이스북에서 쿼리 언어로, 애플리케이션 프로그래밍 인터페이스(API)를 위한 쿼리 언어로, 클라이언트가 서버에게 요청한 만큼의 데이터를 제공하는데 우선순위를 둡니다.
개발자는 무슨 데이터가 필요한 지에 대해서만 쿼리문을 작성하면 되고, 쿼리문에 맞는 데이터를 가져옵니다.
하지만 graphQL도 단점이 존재합니다.
원하는 데이터를 쿼리문을 활용해서 불필요한 데이터를 가져오지않고 유연하게 데이터를 가져올수있지만 파일 업로드
구현 방법이 정해져있지 않아서 직접 구현해야하며 만약 내가 원하는 데이터가 고정된
응답데이터의 대부분
을 필요하다면 굳이 graphQL을 도입하지않아도 되며 오히려 쿼리문을 쓰기때문에 restapi를 쓸떄보다 많은 리소스를 낭비할 수도 있습니다.