최근에는 RESTful보다 우수하다고 주장하는 GraphQL에 대해 배웠습니다. 그러나 왜 단순히 SQL 문을 HTTP GET 요청에 넣지 않는지 궁금해지기 시작했습니다.
예를 들어 GraphQL에서는
{
Movie(id: "cixos5gtq0ogi0126tvekxo27") {
id
title
actors {
name
}
}
}
SQL보다 훨씬 간단하지는 않습니다.
SELECT id, title FROM movies WHERE id = cixos5gtq0ogi0126tvekxo27;
SELECT actors.name FROM actors, actors_movies WHERE actors.id == movies.actor_id AND movie.id == cixos5gtq0ogi0126tvekxo27;
쿼리를 URL 인코딩하고 서버로 보낼 수 있습니다.
GET endpoint?q=SELECT%20id%2C%20title%20FROM%20movies%20WHERE%20id%20%3D%20cixos5gtq0ogi0126tvekxo27%3B%0ASELECT%20actors.name%20FROM%20actors%2C%20actors_movies%20WHERE%20actors.id%20%3D%3D%20movies.actor_id%20AND%20movie.id%20%3D%3D%20cixos5gtq0ogi0126tvekxo27%3B HTTP/1.1
예, 쿼리 URL이 너무 길 수 있지만 REST 준수에 신경 쓰지 않으면 POST 요청 본문에 넣을 수 있습니다. (그런데 REST가 이해하기 위해 HTTP RFC를 수정해야한다고 생각합니다. 쿼리 문자열의 길이를 제한하면 구현이 사양과 처음부터 혼합됩니다)
클라이언트에서 직접 SQL을 발행하면 다음과 같은 이점이 있습니다.
- GraphQL을 구문 분석하는 데 서버 측 코드 / 라이브러리는 필요하지 않으므로 개발 시간이 단축됩니다.
- GraphQL을 구문 분석하는 데 서버 측 오버 헤드가 필요하지 않으므로 런타임이 줄어 듭니다.
- SQL 문은 GraphQL보다 훨씬 융통성이 있습니다. 왜냐하면 대부분의 경우 후자는 SQL로 줄어 듭니다.
- 누구나 SQL을 알고 있습니다.
그렇다면 GraphQL이 SQL에 비해 어떤 이점이 있습니까?