GraphQL
GraphQL은 API를 위한 쿼리언어이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임이다. GraphQL은 특정 데이터베이스나 특정 스토리지 엔진과 관계되어 있지 않으며 기존코드와 데이터에 의해 대체된다.
쿼리언어(Query Language)
쿼리언어는 정보를 얻기 위해 보내는 질의문을 만들기 위해 사용되는 컴퓨터 언어이다. 데이터베이스 시스템에 저장된 데이터를 가져오기 위해 사용하는 SQL
GraphQL(Graph Query Language)
SQL이 데이터베이스에서 데이터를 가져오는 목적을 가진다면 GraphQL은 클라이언트가 데이터를 서버로부터 가져오는 것을 목적으로 한다.
GraphQL vs REST
GraphQL은 RESTful API가 이미 존재하고 널리 쓰이던 2012년에 만들어졌다. GraphQL은 어떤 이유에서 만들어졌고 RESTful과는 어떤차이가 있을까
GraphQL이 REST와 비교해서 가지는 차이점은 다음과 같다.
1. GraphQL은 보통 하나의 엔드포인트를 가진다.
2. GraphQL은 요청할때 사용하는 쿼리에 따라 다른 응답을 받을 수 있다.
3. GraphQL은 원하는 데이터만 받을 수 있다.(response)
엔드포인트
REST API는 보통 여러 엔드포인트를 가지며 각각의 엔드포인트가 동일한 응답을 반환한다. GraphQL은 보통 하나의 엔드포인트만을 사용하며 요청하는 쿼리에 따라 다른 응답을 반환하는 방식이다.
REST API로 응답값을 받으면 필요한 데이터 이외의도 많은 정보를 함께 받아야 한다. 하지만 GraphQL을 사용하면 원하는 데이터만 받을 수 있다. 예시로 이름, 키, 몸무게 데이터만 필요하다고 할때 GraphQL을 사용하면 다음과 같이 요청할 수 있다.
// GraphQL request
query {
person(personId: 1) {
name
height
mass
}
}
// GraphQL response
{
"data" : {
"person" : {
"name" : "hansol",
"height" : 170,
"mass" : 62
}
}
}
GraphQL은 클라이언트에서 필요한대로 쿼리를 작성해 원하는 데이터만 가져올 수 있다.
GraphQL 장단점
장점
1. HTTP 요청 횟수를 줄일 수 있다.
RESTful의 경우 필요한 리소스 별로 요청해야 하고 필요한 데이터들이 부분적으로 나눠서 개발되어있다면 그만큼 요청횟수가 늘어난다. 하지만 GraphQL은 원하는 정보를 하나의 쿼리에 모두 담아 요청할 수 있다.
2. HTTP 응답 사이즈를 줄일 수 있다.
RESTful의 경우 응답 형태가 정해져있기 때문에 필요한 정보만 부분적으로 요청하는것이 어렵다. 이로인해 데이터의 사이즈가 크고 불필요한 데이터까지 함께 받아온다. GraphQL을 사용함으로써 응답데이터 사이즈를 최소화할 수 있다.
3. 개발자의 부담을 덜 수 있다.
RESTful API를 사용한다면 개발자는 API의 요청/응답 형식에 의존하게 된다. 따라서 새로운 엔드포인트를 효율적으로 개발하기 위해 커뮤니케이션이 강제되는 경우가 있는데 GraphQL은 요청/응답 의존도가 떨어지기 때문에 API개발 부담을 덜 수 있다.
단점
1. 고정된 요청과 응답만 필요할때에는 query로 인해 요청의 크기가 RESTful보다 커질 수 있다.
2. 캐싱이 REST보다 복잡하다.
3. 파일 업로드 구현 방법이 정해져있지 않아 직접 구현해야 한다.
'database' 카테고리의 다른 글
Dead Lock(교착상태) (0) | 2023.02.23 |
---|---|
[mongoDB] MongoDB에 대하여 (0) | 2023.01.17 |
[Oracle] 계층형 쿼리 (0) | 2022.12.26 |
Redis에 대하여 (0) | 2022.12.08 |