계발하는 개발자

[GraphQL] GraphQL 이란? 본문

📚 Database/GraphQL

[GraphQL] GraphQL 이란?

dev_genie 2023. 11. 8. 03:17

최근 graphQL이란 단어가 많이 보인다.
graph?? 오늘 확실히 공부해보자!🧐
 

QraphQL 이란?

서버로부터 원하는 데이터를 요청하거나, 데이터를 변경할 수 있도록 해주는 API 언어다.
GraphQL을 이용하면 기존 REST API의 한계를 극복하고, 좀더 효율적으로 서버와 통신할 수 있다.
GraphQL은 2015년 Facebook팀에서 발표됐다.

Graph 자체는 상당히 많은 자료 구조를 의미하며 QL(Query Language)은 쿼리 언어를 뜻한다.
그렇다면 GraphQL은 그래프 구조로 Q의 방식을 말하는 것일까?
    ➡️ 정답! GraphQL은 API를 Graph구조로 QL(질의)하는 언어다.
그렇다면, 페이스북 팀은 왜 GraphQL을 제작한 것일까?

"ios, android 등 다양한 기기에서 필요한 정보의 형태가 조금씩 달랐고,
이를 REST 로 구현하는 것은 힘들다.
그래서 정보를 요청하는 쪽에서 원하는 형태로 정보를 가져오고 수정할 수 있는 API,
즉 query language와 유사한 형태의 api를 만들게 되었다." 
- 페이스북 개발팀

 

vs REST API ?

① 필요한 것을 구체적으로 요청할 수 있다.

그럼 REST API와 뭐가 다를까?
GraphQL은 REST와 달리 "구체적으로 요청" 할 수 있다.
 
예를들어, 영화 API를 요청하려고 할 때 우리가 필요한 정보는 "original_language", "release_date", "title" 정도만 있다하면 기존 REST의 경우 무조건 이 모든 데이터들이 우리에게 전달되게 된다.

 
즉 필요한 정보 이상의 많은 데이터가 전달되게 된다.
이렇게 필요 이상의 데이터가 발생하는 것을 over-fectching 이라 한다.
REST API의 경우 이 over-fecthing이 빈번하게 발생할 수 없는 데 반해,
GraphQL은 우리가 필요한 데이터 만을 요청하고 전달받을 수 있다.
 
같은 영화 정보를 GrapQL을 이용해 조회하면 다음과 같다.

 
필요한 필드명을 명시적으로 작성하고, 그에 맞는 정보들을 받아볼 수가 있다.

 
또, 여기에 추가로 필요한 데이터가 생겼을 때
필드를 추가하는 것으로 그에 맞는 정보를 받아볼 수 있다.

 

② 단일 요청으로 많은 데이터를 얻을 수 있다.

우리가 만드는 서비스에 영화 정보와 함께 영화 배우들에 대한 정보가 필요해졌다고 해보자.
이를 REST로 처리한다면 어떨까?

 

영화 정보 한 번, 배우 정보 한 번 총 2번의 호출이 필요해진다.
이 말인 즉슨 필요한 데이터를 만들기 위해 호출을 여러 번 해야한다는 소리가 되며,
이를 under-fetching 이라 한다.
 
이에 반해, GraphQL은 받아와야 하는 데이터가 흩어져 있을 때
한 번의 요청으로 필요한 모든 데이터를 가져올 수 있다.

다시 말해 영화정보, 배우정보에 대한 요청이 필요하다면
다음과 같이 movie, actor 에 대한 데이터를 한 번에 요청할 수 있는 쿼리를 작성하여 호출하면 되는 것이다.
 
다음의 이미지를 살펴보면 확 이해될 것이다.

 

③ 자동으로 생성되는 API 명세서

이를 잘 활용한다면 API 명세를 만드는 수고를 많이 절약할 수 있다.
(많은 개발자들의 수고를 덜어주는 장점!)

 

④ 한 개의 URL로 해결

REST의 경우 다음에서 보는 것처럼 url에 의존적이다.
따라서 필요한 만큼의 url이 만들어지게 된다.

 
 

그에 반해 GraphQL은 단일 URL만으로 모든 것이 대부분 제어가 된다.

이외에도 GraphQL은 기본 개발자도구가 제공되거나, 버전없이 API를 확장할 수 있는 등의 장점들이 있지만
그렇다 해서 REST 보다 무조건적으로 좋은 것은! 아니다.
 

GraphQL의 단점?

개발 서버의 구조가 REST API 보다 복잡해 진다.
REST API의 경우 호출 자체가 굉장히 단순한데 반해, GraphQL은 다양한 옵션이 있는 만큼
REST API 보다 개발에 복잡해질 수 밖에 없다..!
 
또한 REST API의 경우 구조가 워낙 단순하다 보니 API 호출에 관한 부분은 별다른 프레임워크나 툴 없이도 충분히 개발할 수 있다.
그러나 GraphQL은 GraphQL을 위한 전용 프레임워크나 플러그인 없으면 개발에 많은 어려움이 따를 수 있다.
그렇지만, 이제 GraphQL도 출시된지 꽤 지나서 다양한 써드파티 도구들이 지원되고 있으니 이 부분은 크게 걱정하진 않아도 될듯하다 :)
 
아직 좀더 깊이 써봐야 겠지만, 아직까진 단점보다 단점을 상쇄시킬만한 장점들이 더 커보이는 것 같다.

LIST
profile

dev_genie

@dev_genie

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!